Télécharger dyne15.eso

Retour à la liste

Numérotation des lignes :

  1. C DYNE15 SOURCE BP208322 18/01/30 21:15:22 9719
  2. SUBROUTINE DYNE15(ITSORT,KPREF,NVA,NP,NINS,ITLIA,KTRES,IPMAIL,
  3. & REPRIS,ICHAIN,NTVAR,NLIAA,NLIAB,NPLB,
  4. & IDIMB,MTRA,ITCARA,lmodyn,nmost0)
  5. IMPLICIT INTEGER(I-N)
  6. IMPLICIT REAL*8(A-H,O-Z)
  7. *--------------------------------------------------------------------*
  8. * *
  9. * Operateur DYNE : algorithme de Fu - de Vogelaere *
  10. * ________________________________________________ *
  11. * *
  12. * Gestion de la table definissant les resultats attendus, *
  13. * parmi la liste des variables principales et auxilliaires. *
  14. * *
  15. * Parametres: *
  16. * *
  17. * e ITSORT Table definissant les resultats attendus *
  18. * es KPREF Segment des points de reference *
  19. * e NVA Nombre de valeurs prises par les variables *
  20. * e NP Nombre de pas de calcul *
  21. * e NINS On veut une sortie tous les NINS pas de calcul *
  22. * e ITLIA Pointeur sur la table de liaisons *
  23. * s MTRES Segment de sauvegarde des resultats *
  24. * s IPMAIL Maillage de reference pour les CHPOINTs resultats *
  25. * e REPRIS Vrai si reprise de calcul, faux sinon *
  26. * s ICHAIN Segment MLENTI (ACTIF) contenant les adresses des *
  27. * chaines dans la pile des mots de CCNOYAU *
  28. * s NTVAR Nombre total de variables internes pour les liaisons *
  29. * e NLIAA Nombre de liaisons en base A *
  30. * s NLIAB Nombre de liaisons base B *
  31. * s IDIMB Nombre de directions base B *
  32. * e MTRA Segment de travail temporaire (indique si liaison POLY)*
  33. * *
  34. * Auteur, date de creation: *
  35. * *
  36. * Denis ROBERT-MOUGIN, le 2 juin 1989. *
  37. * *
  38. *--------------------------------------------------------------------*
  39. *
  40. -INC CCOPTIO
  41. -INC SMELEME
  42. *
  43. * NRES : nombre de variables demandees (deplacement, vitesse,
  44. * acceleration, ...)
  45. * =NRESPO+NRESLI
  46. * NVES : nombre de variables possibles
  47. * = 10 (depl...) + nombre liaisons a sortir
  48. * NCRES : nombre de valeurs prises par les variables
  49. * (= nombre de ddls = nombre de modes)
  50. * NPRES : nombre de pas de sortie INT (NP / NINS) + 1
  51. * NREP : nombre de variables necessaires a la reprise de calcul
  52. * (pour l'instant NREP = 10)
  53. * NLSA : nombre de demandes de liaison base A en sortie
  54. * NLSB : nombre de demandes de liaison base B en sortie
  55. * NVALA : nombre de variables internes par liaison base A
  56. * NVALB : nombre de variables internes par liaison base B
  57. *
  58. * *** Liste des variables ***
  59. *
  60. * Les variables principales sont:
  61. *
  62. * 1- le deplacement au pas de calcul
  63. * 2- la vitesse au pas de calcul
  64. *
  65. * Les variables auxilliaires sont:
  66. *
  67. * 3- le deplacement au demi-pas precedant le pas de sortie
  68. * 4- la vitesse au demi-pas precedant le pas de sortie
  69. * 5- l'acceleration au pas de sortie
  70. * 6- l'acceleration au demi-pas precedant le pas de sortie
  71. * 7- le travail des forces exterieures au pas de sortie
  72. * 8- le travail des forces interieures (raideur et amortissement
  73. * et forces de liaison) au pas de sortie
  74. *
  75. * Indique si des liaisons ont ete demandees en sortie
  76. *
  77. * 9- les liaisons base A
  78. * 10- les liaisons base B
  79. *
  80. SEGMENT,MTRES
  81. REAL*8 XRES(NRES,NCRES,NPRES),XREP(NREP,NCRES)
  82. REAL*8 XRESLA(NLSA,NPRES,NVALA),XRESLB(NLSB,NPRES,NVALB)
  83. REAL*8 XMREP(NLIAB,4,IDIMB)
  84. INTEGER ICHRES(NVES),IPORES(NRESPO,NPRES),IPOREP(NREP)
  85. INTEGER ILIRES(NRESLI,NCRES)
  86. INTEGER IPOLA(NLSA),INULA(NLSA),IPLRLA(NLSA,NVALA)
  87. INTEGER IPOLB(NLSB),INULB(NLSB),IPLRLB(NLSB,NVALB)
  88. INTEGER ILIREA(NLSA,NTVAR),ILIREB(NLSB,NTVAR)
  89. INTEGER ILIRNA(NLSA,NTVAR),ILIRNB(NLSB,NTVAR)
  90. INTEGER IPOLR(1),IMREP(NLIAB,2),IPPREP(NLIAB,4)
  91. INTEGER ILPOLA(NLIAA,2)
  92. ENDSEGMENT
  93. SEGMENT,MPREF
  94. INTEGER IPOREF(NPREF)
  95. ENDSEGMENT
  96. SEGMENT,MTRAV
  97. INTEGER ICHRE2(NBLS),MPOLA(NBLS),MNULA(NBLS)
  98. INTEGER MPOLB(NBLS),MNULB(NBLS)
  99. INTEGER IVLIAA(NBLS,NTVAR),INLIAA(NBLS,NTVAR)
  100. INTEGER IVLIAB(NBLS,NTVAR),INLIAB(NBLS,NTVAR)
  101. ENDSEGMENT
  102. SEGMENT,MTRA
  103. INTEGER IPLA(NTRA)
  104. ENDSEGMENT
  105. * segment chapeau modeles liaisons
  106. SEGMENT MOLIAI
  107. integer modtla,modtlb
  108. ENDSEGMENT
  109. *
  110. c * NBLS : nombre total de liaisons, limite a 2000
  111. c PARAMETER ( NBLS = 2010 )
  112. * on leve cette limite et on utilise le vrai nombre de liaisons
  113. LOGICAL L0,L1,REPRIS,LDEP,LVIT,LACC,LWEXT,LWINT,lmodyn
  114. CHARACTER*8 TYPRET,CHARRE,CHJTYP
  115. INTEGER JTYP
  116. *
  117. * ECRITURE DES CHAINES UTILISEES COMME INDICES DANS LES TABLES
  118. *
  119. CALL DYNE12(ICHAIN)
  120.  
  121. *
  122. * CREATION DU MAILLAGE A PARTIR DE LA LISTE DE REFERENCE:
  123. *
  124. MPREF = KPREF
  125. N1 = IPOREF(/1)
  126.  
  127. * --- syntaxe table PASAPAS ---
  128. IF (lmodyn) THEN
  129.  
  130. * creation des supports geometriques de CHAMPOINT
  131. NBNN = 1
  132. NBELEM = nmost0
  133. NBSOUS = 0
  134. NBREF = 0
  135. IPMMOD = 0
  136. if (nmost0.gt.0) then
  137. SEGINI IPT2
  138. IPMMOD = IPT2
  139. IPT2.ITYPEL = 1
  140. DO 61 I=1,NBELEM
  141. IPT2.NUM(1,I) = IPOREF(I)
  142. 61 CONTINUE
  143. endif
  144. segdes ipt2
  145. *
  146. IPMSTA = 0
  147. NBELEM = N1 - nmost0
  148. if (NBELEM.gt.0) then
  149. SEGINI IPT2
  150. IPMSTA = IPT2
  151. IPT2.ITYPEL = 1
  152. DO 62 I=1,NBELEM
  153. IPT2.NUM(1,I) = IPOREF(nmost0+I)
  154. 62 CONTINUE
  155. segdes ipt2
  156. nbnn = 0
  157. nbelem = 0
  158. nbsous = 2
  159. nbref = 0
  160. segini meleme
  161. lisous(1) = ipmmod
  162. lisous(2) = ipmsta
  163. ipmail = meleme
  164. else
  165. ipmail = ipmmod
  166. endif
  167.  
  168. * --- syntaxe tables DYNE normales ---
  169. ELSE
  170.  
  171. NBNN = 1
  172. NBELEM = N1
  173. NBSOUS = 0
  174. NBREF = 0
  175. SEGINI,MELEME
  176. IPMAIL = MELEME
  177. ITYPEL = 1
  178. DO 60 I=1,N1
  179. NUM(1,I) = IPOREF(I)
  180. 60 CONTINUE
  181. SEGDES,MELEME
  182.  
  183. ENDIF
  184.  
  185. *
  186. * CREATION DE MTRAV ET REMPLISSAGE
  187. *
  188. IIRES = 2
  189. NVALA = 0
  190. NVALB = 0
  191. NLSA = 0
  192. NLSB = 0
  193. II = 10
  194. ILIAA = 0
  195. ILIAB = 0
  196. ITABV = 0
  197. ITLA = 0
  198. ITLB = 0
  199. NBLS = II + NLIAA + NLIAB
  200. SEGINI,MTRAV
  201. KTRAV = MTRAV
  202. *
  203. * Option de sortie par defaut:
  204. JTYP = 1
  205. ICHRE2(1) = JTYP
  206. ICHRE2(2) = JTYP
  207. ICHRE2(3) = 0
  208. ICHRE2(4) = 0
  209. ICHRE2(5) = 0
  210. ICHRE2(6) = 0
  211. ICHRE2(7) = 0
  212. ICHRE2(8) = 0
  213. ICHRE2(9) = 0
  214. ICHRE2(10) = 0
  215. *
  216. * Recup de la table de sortie . 'VARIABLE' --> ITABV
  217. IF (ITSORT.NE.0) THEN
  218.  
  219. IF (LMODYN) THEN
  220. call ecrobj('TABLE',itsort)
  221. call indeta
  222. call lirobj('TABLE ',ITAC,1,IRETOU)
  223. moliai = itlia
  224. segact moliai
  225. ITABV = ITSORT
  226. typret='TABLE '
  227. ELSE
  228. TYPRET=' '
  229. CALL ACCTAB(ITSORT,'MOT',I0,X0,'VARIABLE',L0,IP0,
  230. & TYPRET,I1,X1,CHARRE,L1,ITABV)
  231. ENDIF
  232.  
  233. * Remplissage de ICHRE2 en fonction de la table fournie ITABV
  234. IF (ITABV.NE.0 .AND. TYPRET.EQ.'TABLE ') THEN
  235. * ICHRE2(i) = | 0 si pas de sortie
  236. * | 1 si sortie chpoint
  237. * | 2 si sortie listreel
  238. TYPRET=' '
  239. CALL ACCTAB(ITABV,'MOT',I0,X0,'TYPE_SORTIE',L0,IP0,
  240. & TYPRET,I1,X1,CHJTYP,LDEP,IP1)
  241. IF (TYPRET.EQ.'MOT ') THEN
  242. IF(CHJTYP.EQ.'CHPOINT') THEN
  243. JTYP=1
  244. ELSEIF(CHJTYP.EQ.'LISTREEL') THEN
  245. JTYP=2
  246. if (lmodyn) then
  247. WRITE(IOIMP,*) 'only CHPOINT output is allowed for ',
  248. & 'syntax 2 (DYNE with PASAPAS table)'
  249. CALL ERREUR(19)
  250. return
  251. endif
  252. ELSE
  253. WRITE(IOIMP,*) 'TYPE_SORTIE doit etre le mot ',
  254. & 'CHPOINT ou LISTREEL'
  255. CALL ERREUR(21)
  256. RETURN
  257. ENDIF
  258. ENDIF
  259.  
  260. TYPRET=' '
  261. CALL ACCTAB(ITABV,'MOT',I0,X0,'DEPLACEMENT',L0,IP0,
  262. & TYPRET,I1,X1,CHARRE,LDEP,IP1)
  263. IF (TYPRET.EQ.'LOGIQUE ' .AND. .NOT.LDEP) THEN
  264. ICHRE2(1) = 0
  265. IIRES = IIRES - 1
  266. ELSE
  267. ICHRE2(1) = JTYP
  268. ENDIF
  269. c if (lmodyn) then
  270. c TYPRET=' '
  271. c CALL ACCTAB(ITABV,'MOT',I0,X0,'DEPLACEMENTS',L0,IP0,
  272. c & TYPRET,I1,X1,CHARRE,LDEP,IP1)
  273. c IF (TYPRET.EQ.'LOGIQUE ' .AND. .NOT.LDEP) THEN
  274. c ICHRE2(1) = 0
  275. c IIRES = IIRES - 1
  276. c ELSE
  277. c ICHRE2(1) = JTYP
  278. c ENDIF
  279. c endif
  280. TYPRET=' '
  281. CALL ACCTAB(ITABV,'MOT',I0,X0,'VITESSE',L0,IP0,
  282. & TYPRET,I1,X1,CHARRE,LVIT,IP1)
  283. IF (TYPRET.EQ.'LOGIQUE ' .AND. .NOT.LVIT) THEN
  284. ICHRE2(2) = 0
  285. IIRES = IIRES - 1
  286. ELSE
  287. ICHRE2(2) = JTYP
  288. ENDIF
  289. c if (lmodyn) then
  290. c TYPRET=' '
  291. c CALL ACCTAB(ITABV,'MOT',I0,X0,'VITESSES',L0,IP0,
  292. c & TYPRET,I1,X1,CHARRE,LVIT,IP1)
  293. c IF (TYPRET.EQ.'LOGIQUE ' .AND. .NOT.LVIT) THEN
  294. c ICHRE2(2) = 0
  295. c IIRES = IIRES - 1
  296. c ELSE
  297. c ICHRE2(2) = JTYP
  298. c ENDIF
  299. c endif
  300. TYPRET=' '
  301. CALL ACCTAB(ITABV,'MOT',I0,X0,'DEPLACEMENT_1/2',L0,IP0,
  302. & TYPRET,I1,X1,CHARRE,LDEP,IP1)
  303. IF (TYPRET.EQ.'LOGIQUE ' .AND. LDEP) THEN
  304. ICHRE2(3) = JTYP
  305. IIRES = IIRES + 1
  306. ENDIF
  307. TYPRET=' '
  308. CALL ACCTAB(ITABV,'MOT',I0,X0,'VITESSE_1/2',L0,IP0,
  309. & TYPRET,I1,X1,CHARRE,LVIT,IP1)
  310. IF (TYPRET.EQ.'LOGIQUE ' .AND. LVIT) THEN
  311. ICHRE2(4) = JTYP
  312. IIRES = IIRES + 1
  313. ENDIF
  314. TYPRET=' '
  315. CALL ACCTAB(ITABV,'MOT',I0,X0,'ACCELERATION',L0,IP0,
  316. & TYPRET,I1,X1,CHARRE,LACC,IP1)
  317. IF (TYPRET.EQ.'LOGIQUE ' .AND. LACC) THEN
  318. ICHRE2(5) = JTYP
  319. IIRES = IIRES + 1
  320. ENDIF
  321. TYPRET=' '
  322. CALL ACCTAB(ITABV,'MOT',I0,X0,'ACCELERATION_1/2',L0,IP0,
  323. & TYPRET,I1,X1,CHARRE,LACC,IP1)
  324. IF (TYPRET.EQ.'LOGIQUE ' .AND. LACC) THEN
  325. ICHRE2(6) = JTYP
  326. IIRES = IIRES + 1
  327. ENDIF
  328.  
  329. * sorties des travaux
  330. TYPRET=' '
  331. CALL ACCTAB(ITABV,'MOT',I0,X0,'TRAVAIL_EXTERIEUR',L0,IP0,
  332. & TYPRET,I1,X1,CHARRE,LWEXT,IP1)
  333. IF (TYPRET.EQ.'LOGIQUE ' .AND. LWEXT) THEN
  334. ICHRE2(7) = JTYP
  335. IIRES = IIRES + 1
  336. ENDIF
  337. TYPRET=' '
  338. CALL ACCTAB(ITABV,'MOT',I0,X0,'TRAVAIL_INTERIEUR',L0,IP0,
  339. & TYPRET,I1,X1,CHARRE,LWINT,IP1)
  340. IF (TYPRET.EQ.'LOGIQUE ' .AND. LWINT) THEN
  341. ICHRE2(8) = JTYP
  342. IIRES = IIRES + 1
  343. ENDIF
  344.  
  345. ENDIF
  346.  
  347. * Dimensionnement des sorties LIAISON_A
  348.  
  349. * --- syntaxe table PASAPAS ---
  350. IF (LMODYN) THEN
  351. iliaa = modtla
  352. if (iliaa.gt.0)
  353. & CALL DYNE74(ITSORT,ITCARA,ITAC,ILIAA,KTRAV,II,NLSA,NVALA)
  354. * --- syntaxe tables DYNE normales ---
  355. ELSE
  356. TYPRET = ' '
  357. CALL ACCTAB(ITSORT,'MOT',I0,X0,'LIAISON_A',L0,IP0,
  358. & TYPRET,I1,X1,CHARRE,L1,ITLA)
  359. IF (ITLA.NE.0 .AND. TYPRET.EQ.'TABLE ') THEN
  360. CALL ACCTAB(ITLIA,'MOT',I0,X0,'LIAISON_A',L0,IP0,
  361. & 'TABLE',I1,X1,' ',L1,ILIAA)
  362. CALL DYNE24(ITLA,ILIAA,KTRAV,II,NLSA,NVALA)
  363. ENDIF
  364. ENDIF
  365. IF (IERR.NE.0) RETURN
  366. IF (NLSA.NE.0) ICHRE2(9) = 1
  367.  
  368. * Dimensionnement des sorties LIAISON_B
  369.  
  370. * --- syntaxe table PASAPAS ---
  371. IF (LMODYN) THEN
  372. iliab = modtlb
  373. if (iliab.gt.0)
  374. & CALL DYNE77(ITSORT,ITCARA,ITAC,ILIAB,KTRAV,II,NLSB,NVALB,NPLB)
  375. * --- syntaxe tables DYNE normales ---
  376. ELSE
  377. TYPRET = ' '
  378. CALL ACCTAB(ITSORT,'MOT',I0,X0,'LIAISON_B',L0,IP0,
  379. & TYPRET,I1,X1,CHARRE,L1,ITLB)
  380. IF (ITLB.NE.0 .AND. TYPRET.EQ.'TABLE ') THEN
  381. CALL ACCTAB(ITLIA,'MOT',I0,X0,'LIAISON_B',L0,IP0,
  382. & 'TABLE',I1,X1,' ',L1,ILIAB)
  383. CALL DYNE27(ITLB,ILIAB,KTRAV,II,NLSB,NVALB,NPLB)
  384. ENDIF
  385. ENDIF
  386.  
  387. ENDIF
  388. c fin du cas ou une table de sortie a ete fournie
  389. IF (IERR.NE.0) RETURN
  390. IF (NLSB.NE.0) ICHRE2(10) = 1
  391.  
  392. *
  393. * CREATION ET REMPLISSAGE DE MTRES
  394. *
  395. NRES = IIRES
  396. if(JTYP.eq.1) then
  397. NRESPO = IIRES
  398. NRESLI = 0
  399. else
  400. NRESPO = 0
  401. NRESLI = IIRES
  402. endif
  403. NVES = II
  404. NREP = 10
  405. NCRES = NVA
  406. NPRES = INT(NP/NINS) + 1
  407. IF ( REPRIS ) NPRES = NPRES - 1
  408. SEGINI,MTRES
  409. KTRES = MTRES
  410. DO 30 I = 1,NVES
  411. ICHRES(I) = ICHRE2(I)
  412. 30 CONTINUE
  413. *
  414. DO 40 I = 1,NLSA
  415. DO 42 II = 1,NTVAR
  416. ILIREA(I,II) = IVLIAA(I,II)
  417. ILIRNA(I,II) = INLIAA(I,II)
  418. 42 CONTINUE
  419. IPOLA(I) = MPOLA(I)
  420. INULA(I) = MNULA(I)
  421. 40 CONTINUE
  422. DO 50 I = 1,NLSB
  423. DO 52 II = 1,NTVAR
  424. ILIREB(I,II) = IVLIAB(I,II)
  425. ILIRNB(I,II) = INLIAB(I,II)
  426. 52 CONTINUE
  427. IPOLB(I) = MPOLB(I)
  428. INULB(I) = MNULB(I)
  429. 50 CONTINUE
  430. DO 160 I = 1,NLIAA
  431. ILPOLA(I,1) = IPLA(I)
  432. 160 CONTINUE
  433. *
  434. SEGSUP,MTRAV
  435. SEGSUP,MTRA
  436. *
  437. * Boucle d'impression
  438. *
  439. IF (IIMPI.EQ.333) THEN
  440. WRITE(IOIMP,*)'DYNE15 : CREATION DU SEGMENT MTRES',KTRES
  441. WRITE(IOIMP,*)'DYNE15 : NRES = ',NRES,'variables a sortir'
  442. WRITE(IOIMP,*)' dont NRESPO = ',NRESPO,' en chpoint'
  443. WRITE(IOIMP,*)' et NRESLI = ',NRESLI,' en listreel'
  444. WRITE(IOIMP,*)' sur NVES = ',NVES,'possibles'
  445. WRITE(IOIMP,*)'DYNE15 : NLSA = ',NLSA,'liaison A a sortir'
  446. WRITE(IOIMP,*)' avec NVALA = ',NVALA,'parametres max'
  447. WRITE(IOIMP,*)'DYNE15 : NLSB = ',NLSB,'liaison B a sortir'
  448. WRITE(IOIMP,*)' avec NVALB = ',NVALB,'parametres max'
  449. WRITE(IOIMP,*)'DYNE15 : NPRES = ',NPRES,'pas a sortir'
  450. WRITE(IOIMP,*)'DYNE15 : NCRES = ',NCRES,'ddls(=modes) a sortir'
  451. WRITE(IOIMP,*)'DYNE15 : ICHRES(:)=',(ICHRES(I),I=1,NVES)
  452. ENDIF
  453. *
  454. RETURN
  455. END
  456.  
  457.  
  458.  
  459.  
  460.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales