Télécharger dyne15.eso

Retour à la liste

Numérotation des lignes :

  1. C DYNE15 SOURCE FANDEUR 11/04/12 21:16:02 6938
  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 POL) *
  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 demand{es (d{placement, vitesse,
  44. * acc{l{ration)
  45. * NVES : nombre de variables possibles
  46. * NCRES : nombre de valeurs prises par les variables
  47. * NPRES : nombre de pas de sortie INT (NP / NINS) + 1
  48. * NREP : nombre de variables n{cessaires @ la reprise de calcul
  49. * ( pour l'instant NREP = 10 )
  50. * NLSA : nombre de demandes de liaison base A en sortie
  51. * NLSB : nombre de demandes de liaison base B en sortie
  52. * NVALA : nombre de variables internes par liaison base A
  53. * NVALB : nombre de variables internes par liaison base B
  54. *
  55. * *** Liste des variables ***
  56. *
  57. * Les variables principales sont:
  58. *
  59. * 1- le d{placement au pas de calcul
  60. * 2- la vitesse au pas de calcul
  61. *
  62. * Les variables auxilliaires sont:
  63. *
  64. * 3- le d{placement au demi-pas pr{c{dant le pas de sortie
  65. * 4- la vitesse au demi-pas pr{c{dant le pas de sortie
  66. * 5- l'acc{l{ration au pas de sortie
  67. * 6- l'acc{l{ration au demi-pas pr{c{dant le pas de sortie
  68. * 7- le travail des forces exterieures au pas de sortie
  69. * 8- le travail des forces interieures (raideur et amortissement
  70. * et forces de liaison) au pas de sortie
  71. *
  72. * Indique si des liaisons ont {t{ demand{es en sortie
  73. *
  74. * 9- les liaisons base A
  75. * 10- les liaisons base B
  76. *
  77. SEGMENT,MTRES
  78. REAL*8 XRES(NRES,NCRES,NPRES),XREP(NREP,NCRES)
  79. REAL*8 XRESLA(NLSA,NPRES,NVALA),XRESLB(NLSB,NPRES,NVALB)
  80. REAL*8 XMREP(NLIAB,4,IDIMB)
  81. INTEGER ICHRES(NVES),IPORES(NRES,NPRES),IPOREP(NREP)
  82. INTEGER IPOLA(NLSA),INULA(NLSA),IPLRLA(NLSA,NVALA)
  83. INTEGER IPOLB(NLSB),INULB(NLSB),IPLRLB(NLSB,NVALB)
  84. INTEGER ILIREA(NLSA,NTVAR),ILIREB(NLSB,NTVAR)
  85. INTEGER ILIRNA(NLSA,NTVAR),ILIRNB(NLSB,NTVAR)
  86. INTEGER IPOLR(1),IMREP(NLIAB,2),IPPREP(NLIAB,4)
  87. INTEGER ILPOLA(NLIAA,2)
  88. ENDSEGMENT
  89. SEGMENT,MPREF
  90. INTEGER IPOREF(NPREF)
  91. ENDSEGMENT
  92. SEGMENT,MTRAV
  93. INTEGER ICHRE2(NBLS),MPOLA(NBLS),MNULA(NBLS)
  94. INTEGER MPOLB(NBLS),MNULB(NBLS)
  95. INTEGER IVLIAA(NBLS,NTVAR),INLIAA(NBLS,NTVAR)
  96. INTEGER IVLIAB(NBLS,NTVAR),INLIAB(NBLS,NTVAR)
  97. ENDSEGMENT
  98. SEGMENT,MTRA
  99. INTEGER IPLA(NTRA)
  100. ENDSEGMENT
  101. * segment chapeau modeles liaisons
  102. SEGMENT MOLIAI
  103. integer modtla,modtlb
  104. ENDSEGMENT
  105. *
  106. * NBLS : nombre total de liaisons, limit{ @ 2000
  107. *
  108. PARAMETER ( NBLS = 2010 )
  109. LOGICAL L0,L1,REPRIS,LDEP,LVIT,LACC,LWEXT,LWINT,lmodyn
  110. CHARACTER*8 TYPRET,CHARRE
  111. *
  112. * Ecriture des chaines utilisees comme indices dans les tables
  113. *
  114. CALL DYNE12(ICHAIN)
  115. *
  116. * Creation du maillage a partir de la liste de r{f{rence:
  117. *
  118. MPREF = KPREF
  119. N1 = IPOREF(/1)
  120. IF (lmodyn) THEN
  121. * creation des supports geometriques de CHAMPOINT
  122. NBNN = 1
  123. NBELEM = nmost0
  124. NBSOUS = 0
  125. NBREF = 0
  126. IPMMOD = 0
  127. if (nmost0.gt.0) then
  128. SEGINI IPT2
  129. IPMMOD = IPT2
  130. IPT2.ITYPEL = 1
  131. DO 61 I=1,NBELEM
  132. IPT2.NUM(1,I) = IPOREF(I)
  133. 61 CONTINUE
  134. endif
  135. segdes ipt2
  136. *
  137. IPMSTA = 0
  138. NBELEM = N1 - nmost0
  139. if (NBELEM.gt.0) then
  140. SEGINI IPT2
  141. IPMSTA = IPT2
  142. IPT2.ITYPEL = 1
  143. DO 62 I=1,NBELEM
  144. IPT2.NUM(1,I) = IPOREF(nmost0+I)
  145. 62 CONTINUE
  146. segdes ipt2
  147. nbnn = 0
  148. nbelem = 0
  149. nbsous = 2
  150. nbref = 0
  151. segini meleme
  152. lisous(1) = ipmmod
  153. lisous(2) = ipmsta
  154. ipmail = meleme
  155. else
  156. ipmail = ipmmod
  157. endif
  158.  
  159. ELSE
  160.  
  161. NBNN = 1
  162. NBELEM = N1
  163. NBSOUS = 0
  164. NBREF = 0
  165. SEGINI,MELEME
  166. IPMAIL = MELEME
  167. ITYPEL = 1
  168. DO 60 I=1,N1
  169. NUM(1,I) = IPOREF(I)
  170. 60 CONTINUE
  171. * end do
  172. SEGDES,MELEME
  173. ENDIF
  174. *
  175. IIRES = 2
  176. NVALA = 0
  177. NVALB = 0
  178. NLSA = 0
  179. NLSB = 0
  180. II = 10
  181. ILIAA = 0
  182. ILIAB = 0
  183. ITABV = 0
  184. ITLA = 0
  185. ITLB = 0
  186. SEGINI,MTRAV
  187. KTRAV = MTRAV
  188. *
  189. * Option de sortie par d{faut:
  190. *
  191. ICHRE2(1) = 1
  192. ICHRE2(2) = 1
  193. ICHRE2(3) = 0
  194. ICHRE2(4) = 0
  195. ICHRE2(5) = 0
  196. ICHRE2(6) = 0
  197. ICHRE2(7) = 0
  198. ICHRE2(8) = 0
  199. ICHRE2(9) = 0
  200. ICHRE2(10) = 0
  201. *
  202. IF (ITSORT.NE.0) THEN
  203. IF (LMODYN) THEN
  204. call ecrobj('TABLE',itsort)
  205. call indeta
  206. call lirobj('TABLE ',ITAC,1,IRETOU)
  207. moliai = itlia
  208. segact moliai
  209. ITABV = ITSORT
  210. typret='TABLE '
  211. ELSE
  212. TYPRET=' '
  213. CALL ACCTAB(ITSORT,'MOT',I0,X0,'VARIABLE',L0,IP0,
  214. & TYPRET,I1,X1,CHARRE,L1,ITABV)
  215. ENDIF
  216. IF (ITABV.NE.0 .AND. TYPRET.EQ.'TABLE ') THEN
  217. TYPRET=' '
  218. CALL ACCTAB(ITABV,'MOT',I0,X0,'DEPLACEMENT',L0,IP0,
  219. & TYPRET,I1,X1,CHARRE,LDEP,IP1)
  220. IF (TYPRET.EQ.'LOGIQUE ' .AND. .NOT.LDEP) THEN
  221. ICHRE2(1) = 0
  222. IIRES = IIRES - 1
  223. ENDIF
  224. if (lmodyn) then
  225. TYPRET=' '
  226. CALL ACCTAB(ITABV,'MOT',I0,X0,'DEPLACEMENTS',L0,IP0,
  227. & TYPRET,I1,X1,CHARRE,LDEP,IP1)
  228. IF (TYPRET.EQ.'LOGIQUE ' .AND. .NOT.LDEP) THEN
  229. ICHRE2(1) = 0
  230. IIRES = IIRES - 1
  231. ENDIF
  232. endif
  233. TYPRET=' '
  234. CALL ACCTAB(ITABV,'MOT',I0,X0,'VITESSE',L0,IP0,
  235. & TYPRET,I1,X1,CHARRE,LVIT,IP1)
  236. IF (TYPRET.EQ.'LOGIQUE ' .AND. .NOT.LVIT) THEN
  237. ICHRE2(2) = 0
  238. IIRES = IIRES - 1
  239. ENDIF
  240. if (lmodyn) then
  241. TYPRET=' '
  242. CALL ACCTAB(ITABV,'MOT',I0,X0,'VITESSES',L0,IP0,
  243. & TYPRET,I1,X1,CHARRE,LVIT,IP1)
  244. IF (TYPRET.EQ.'LOGIQUE ' .AND. .NOT.LVIT) THEN
  245. ICHRE2(2) = 0
  246. IIRES = IIRES - 1
  247. ENDIF
  248. endif
  249. TYPRET=' '
  250. CALL ACCTAB(ITABV,'MOT',I0,X0,'DEPLACEMENT_1/2',L0,IP0,
  251. & TYPRET,I1,X1,CHARRE,LDEP,IP1)
  252. IF (TYPRET.EQ.'LOGIQUE ' .AND. LDEP) THEN
  253. ICHRE2(3) = 1
  254. IIRES = IIRES + 1
  255. ENDIF
  256. TYPRET=' '
  257. CALL ACCTAB(ITABV,'MOT',I0,X0,'VITESSE_1/2',L0,IP0,
  258. & TYPRET,I1,X1,CHARRE,LVIT,IP1)
  259. IF (TYPRET.EQ.'LOGIQUE ' .AND. LVIT) THEN
  260. ICHRE2(4) = 1
  261. IIRES = IIRES + 1
  262. ENDIF
  263. TYPRET=' '
  264. CALL ACCTAB(ITABV,'MOT',I0,X0,'ACCELERATION',L0,IP0,
  265. & TYPRET,I1,X1,CHARRE,LACC,IP1)
  266. IF (TYPRET.EQ.'LOGIQUE ' .AND. LACC) THEN
  267. ICHRE2(5) = 1
  268. IIRES = IIRES + 1
  269. ENDIF
  270. TYPRET=' '
  271. CALL ACCTAB(ITABV,'MOT',I0,X0,'ACCELERATION_1/2',L0,IP0,
  272. & TYPRET,I1,X1,CHARRE,LACC,IP1)
  273. IF (TYPRET.EQ.'LOGIQUE ' .AND. LACC) THEN
  274. ICHRE2(6) = 1
  275. IIRES = IIRES + 1
  276. ENDIF
  277.  
  278. * ajout des sorties des travaux
  279. TYPRET=' '
  280. CALL ACCTAB(ITABV,'MOT',I0,X0,'TRAVAIL_EXTERIEUR',L0,IP0,
  281. & TYPRET,I1,X1,CHARRE,LWEXT,IP1)
  282. IF (TYPRET.EQ.'LOGIQUE ' .AND. LWEXT) THEN
  283. ICHRE2(7) = 1
  284. IIRES = IIRES + 1
  285. ENDIF
  286. TYPRET=' '
  287. CALL ACCTAB(ITABV,'MOT',I0,X0,'TRAVAIL_INTERIEUR',L0,IP0,
  288. & TYPRET,I1,X1,CHARRE,LWINT,IP1)
  289. IF (TYPRET.EQ.'LOGIQUE ' .AND. LWINT) THEN
  290. ICHRE2(8) = 1
  291. IIRES = IIRES + 1
  292. ENDIF
  293.  
  294. ENDIF
  295. *
  296. IF (LMODYN) THEN
  297. iliaa = modtla
  298. if (iliaa.gt.0)
  299. &CALL DYNE74(ITSORT,ITCARA,ITAC,ILIAA,KTRAV,II,NLSA,NVALA)
  300. ELSE
  301. TYPRET = ' '
  302. CALL ACCTAB(ITSORT,'MOT',I0,X0,'LIAISON_A',L0,IP0,
  303. & TYPRET,I1,X1,CHARRE,L1,ITLA)
  304. IF (ITLA.NE.0 .AND. TYPRET.EQ.'TABLE ') THEN
  305. CALL ACCTAB(ITLIA,'MOT',I0,X0,'LIAISON_A',L0,IP0,
  306. & 'TABLE',I1,X1,' ',L1,ILIAA)
  307. CALL DYNE24(ITLA,ILIAA,KTRAV,II,NLSA,NVALA)
  308. ENDIF
  309. ENDIF
  310. IF (IERR.NE.0) RETURN
  311. IF (NLSA.NE.0) ICHRE2(9) = 1
  312. *
  313. IF (LMODYN) THEN
  314. iliab = modtlb
  315. if (iliab.gt.0)
  316. &CALL DYNE77(ITSORT,ITCARA,ITAC,ILIAB,KTRAV,II,NLSB,NVALB,NPLB)
  317. ELSE
  318. TYPRET = ' '
  319. CALL ACCTAB(ITSORT,'MOT',I0,X0,'LIAISON_B',L0,IP0,
  320. & TYPRET,I1,X1,CHARRE,L1,ITLB)
  321. IF (ITLB.NE.0 .AND. TYPRET.EQ.'TABLE ') THEN
  322. CALL ACCTAB(ITLIA,'MOT',I0,X0,'LIAISON_B',L0,IP0,
  323. & 'TABLE',I1,X1,' ',L1,ILIAB)
  324. CALL DYNE27(ITLB,ILIAB,KTRAV,II,NLSB,NVALB,NPLB)
  325. ENDIF
  326. ENDIF
  327. ENDIF
  328. IF (IERR.NE.0) RETURN
  329. IF (NLSB.NE.0) ICHRE2(10) = 1
  330. *
  331. NRES = IIRES
  332. NVES = II
  333. IF (IIMPI.EQ.333) THEN
  334. WRITE(IOIMP,*)'DYNE15 : NVES = ',NVES
  335. WRITE(IOIMP,*)'DYNE15 : NLSA = ',NLSA
  336. WRITE(IOIMP,*)'DYNE15 : NLSB = ',NLSB
  337. WRITE(IOIMP,*)'DYNE15 : NVALA = ',NVALA
  338. WRITE(IOIMP,*)'DYNE15 : NVALB = ',NVALB
  339. WRITE(IOIMP,*)'DYNE15 : II = ',II
  340. ENDIF
  341. NREP = 10
  342. NCRES = NVA
  343. NPRES = INT(NP/NINS) + 1
  344. IF ( REPRIS ) NPRES = NPRES - 1
  345. SEGINI,MTRES
  346. KTRES = MTRES
  347. DO 30 I = 1,NVES
  348. ICHRES(I) = ICHRE2(I)
  349. 30 CONTINUE
  350. * end do
  351. *
  352. DO 40 I = 1,NLSA
  353. DO 42 II = 1,NTVAR
  354. ILIREA(I,II) = IVLIAA(I,II)
  355. ILIRNA(I,II) = INLIAA(I,II)
  356. 42 CONTINUE
  357. * end do
  358. IPOLA(I) = MPOLA(I)
  359. INULA(I) = MNULA(I)
  360. 40 CONTINUE
  361. * end do
  362. DO 50 I = 1,NLSB
  363. DO 52 II = 1,NTVAR
  364. ILIREB(I,II) = IVLIAB(I,II)
  365. ILIRNB(I,II) = INLIAB(I,II)
  366. 52 CONTINUE
  367. * end do
  368. IPOLB(I) = MPOLB(I)
  369. INULB(I) = MNULB(I)
  370. 50 CONTINUE
  371. * end do
  372. DO 160 I = 1,NLIAA
  373. ILPOLA(I,1) = IPLA(I)
  374. 160 CONTINUE
  375. * end do
  376. *
  377. SEGSUP,MTRAV
  378. SEGSUP,MTRA
  379. *
  380. * Boucle d'impression des ICHRES:
  381. *
  382. IF (IIMPI.EQ.333) THEN
  383. DO 80 I = 1,NVES
  384. WRITE(IOIMP,*)'DYNE15 : ICHRES(',I,')=',ICHRES(I)
  385. 80 CONTINUE
  386. * end do
  387. ENDIF
  388. *
  389. RETURN
  390. END
  391.  
  392.  
  393.  

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