Télécharger dyne15.eso

Retour à la liste

Numérotation des lignes :

  1. C DYNE15 SOURCE BP208322 17/07/18 21:15:10 9498
  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 demandees (deplacement, vitesse,
  44. * acceleration)
  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 necessaires a 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 deplacement au pas de calcul
  60. * 2- la vitesse au pas de calcul
  61. *
  62. * Les variables auxilliaires sont:
  63. *
  64. * 3- le deplacement au demi-pas precedant le pas de sortie
  65. * 4- la vitesse au demi-pas precedant le pas de sortie
  66. * 5- l'acceleration au pas de sortie
  67. * 6- l'acceleration au demi-pas precedant 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 ete demandees 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, limite a 2000
  107. *
  108. PARAMETER ( NBLS = 2010 )
  109. LOGICAL L0,L1,REPRIS,LDEP,LVIT,LACC,LWEXT,LWINT,lmodyn
  110. CHARACTER*8 TYPRET,CHARRE,CHJTYP
  111. INTEGER JTYP
  112.  
  113. *
  114. * ECRITURE DES CHAINES UTILISEES COMME INDICES DANS LES TABLES
  115. *
  116. CALL DYNE12(ICHAIN)
  117.  
  118. *
  119. * CREATION DU MAILLAGE A PARTIR DE LA LISTE DE REFERENCE:
  120. *
  121. MPREF = KPREF
  122. N1 = IPOREF(/1)
  123.  
  124. * --- syntaxe table PASAPAS ---
  125. IF (lmodyn) THEN
  126.  
  127. * creation des supports geometriques de CHAMPOINT
  128. NBNN = 1
  129. NBELEM = nmost0
  130. NBSOUS = 0
  131. NBREF = 0
  132. IPMMOD = 0
  133. if (nmost0.gt.0) then
  134. SEGINI IPT2
  135. IPMMOD = IPT2
  136. IPT2.ITYPEL = 1
  137. DO 61 I=1,NBELEM
  138. IPT2.NUM(1,I) = IPOREF(I)
  139. 61 CONTINUE
  140. endif
  141. segdes ipt2
  142. *
  143. IPMSTA = 0
  144. NBELEM = N1 - nmost0
  145. if (NBELEM.gt.0) then
  146. SEGINI IPT2
  147. IPMSTA = IPT2
  148. IPT2.ITYPEL = 1
  149. DO 62 I=1,NBELEM
  150. IPT2.NUM(1,I) = IPOREF(nmost0+I)
  151. 62 CONTINUE
  152. segdes ipt2
  153. nbnn = 0
  154. nbelem = 0
  155. nbsous = 2
  156. nbref = 0
  157. segini meleme
  158. lisous(1) = ipmmod
  159. lisous(2) = ipmsta
  160. ipmail = meleme
  161. else
  162. ipmail = ipmmod
  163. endif
  164.  
  165. * --- syntaxe tables DYNE normales ---
  166. ELSE
  167.  
  168. NBNN = 1
  169. NBELEM = N1
  170. NBSOUS = 0
  171. NBREF = 0
  172. SEGINI,MELEME
  173. IPMAIL = MELEME
  174. ITYPEL = 1
  175. DO 60 I=1,N1
  176. NUM(1,I) = IPOREF(I)
  177. 60 CONTINUE
  178. SEGDES,MELEME
  179.  
  180. ENDIF
  181.  
  182. *
  183. * CREATION DE MTRAV ET REMPLISSAGE
  184. *
  185. IIRES = 2
  186. NVALA = 0
  187. NVALB = 0
  188. NLSA = 0
  189. NLSB = 0
  190. II = 10
  191. ILIAA = 0
  192. ILIAB = 0
  193. ITABV = 0
  194. ITLA = 0
  195. ITLB = 0
  196. SEGINI,MTRAV
  197. KTRAV = MTRAV
  198. *
  199. * Option de sortie par defaut:
  200. JTYP = 1
  201. ICHRE2(1) = JTYP
  202. ICHRE2(2) = JTYP
  203. ICHRE2(3) = 0
  204. ICHRE2(4) = 0
  205. ICHRE2(5) = 0
  206. ICHRE2(6) = 0
  207. ICHRE2(7) = 0
  208. ICHRE2(8) = 0
  209. ICHRE2(9) = 0
  210. ICHRE2(10) = 0
  211. *
  212. * Recup de la table de sortie . 'VARIABLE' --> ITABV
  213. IF (ITSORT.NE.0) THEN
  214.  
  215. IF (LMODYN) THEN
  216. call ecrobj('TABLE',itsort)
  217. call indeta
  218. call lirobj('TABLE ',ITAC,1,IRETOU)
  219. moliai = itlia
  220. segact moliai
  221. ITABV = ITSORT
  222. typret='TABLE '
  223. ELSE
  224. TYPRET=' '
  225. CALL ACCTAB(ITSORT,'MOT',I0,X0,'VARIABLE',L0,IP0,
  226. & TYPRET,I1,X1,CHARRE,L1,ITABV)
  227. ENDIF
  228.  
  229. * Remplissage de ICHRE2 en fonction de la table fournie ITABV
  230. IF (ITABV.NE.0 .AND. TYPRET.EQ.'TABLE ') THEN
  231. * ICHRE2(i) = | 0 si pas de sortie
  232. * | 1 si sortie chpoint
  233. * | 2 si sortie listreel
  234. TYPRET=' '
  235. CALL ACCTAB(ITABV,'MOT',I0,X0,'TYPE_SORTIE',L0,IP0,
  236. & TYPRET,I1,X1,CHJTYP,LDEP,IP1)
  237. IF (TYPRET.EQ.'MOT ') THEN
  238. IF(CHJTYP.EQ.'CHPOINT') THEN
  239. JTYP=1
  240. ELSEIF(CHJTYP.EQ.'LISTREEL') THEN
  241. JTYP=2
  242. if (lmodyn) then
  243. WSITE¼spen style="color: #009900;">(IOIMP,*) 'only CHPOINT output is allowed for ',
  244. & 'syntax 2 (DYNE with PASAPAS table)'
  245. CALL ERREUR(19)
  246. return
  247. endif
  248. ELSE
  249. WRITE(IOIMP,*) 'TYPE_SORTIE doit etre le mot ',
  250. & 'CHPOINT ou LISTREEL'
  251. CALL ERREUR(21)
  252. RETURN
  253. ENDIF
  254. ENDIF
  255.  
  256. TYPRET=' '
  257. CALL ACCTAB(ITABV,'MOT',I0,X0,'DEPLACEMENT',L0,IP0,
  258. & TYPRET,I1,X1,CHARRE,LDEP,IP1)
  259. IF (TYPRET.EQ.'LOGIQUE ' .AND. .NOT.LDEP) THEN
  260. ICHRE2(1) = 0
  261. IIRES = IIRES - 1
  262. ELSE
  263. ICHRE2(1) = JTYP
  264. ENDIF
  265. c if (lmodyn) then
  266. c TYPRET=' '
  267. c CALL ACCTAB(ITABV,'MOT',I0,X0,'DEPLACEMENTS',L0,IP0,
  268. c & TYPRET,I1,X1,CHARRE,LDEP,IP1)
  269. c IF (TYPRET.EQ.'LOGIQUE ' .AND. .NOT.LDEP) THEN
  270. c ICHRE2(1) = 0
  271. c IIRES = IIRES - 1
  272. c ELSE
  273. c ICHRE2(1) = JTYP
  274. c ENDIF
  275. c endif
  276. TYPRET=' '
  277. CALL ACCTAB(ITABV,'MOT',I0,X0,'VITESSE',L0,IP0,
  278. & TYPRET,I1,X1,CHARRE,LVIT,IP1)
  279. IF (TYPRET.EQ.'LOGIQUE ' .AND. .NOT.LVIT) THEN
  280. ICHRE2(2) = 0
  281. IIRES = IIRES - 1
  282. ELSE
  283. ICHRE2(2) = JTYP
  284. ENDIF
  285. c if (lmodyn) then
  286. c TYPRET=' '
  287. c CALL ACCTAB(ITABV,'MOT',I0,X0,'VITESSES',L0,IP0,
  288. c & TYPRET,I1,X1,CHARRE,LVIT,IP1)
  289. c IF (TYPRET.EQ.'LOGIQUE ' .AND. .NOT.LVIT) THEN
  290. c ICHRE2(2) = 0
  291. c IIRES = IIRES - 1
  292. c ELSE
  293. c ICHRE2(2) = JTYP
  294. c ENDIF
  295. c endif
  296. TYPRET=' '
  297. CALL ACCTAB(ITABV,'MOT',I0,X0,'DEPLACEMENT_1/2',L0,IP0,
  298. & TYPRET,I1,X1,CHARRE,LDEP,IP1)
  299. IF (TYPRET.EQ.'LOGIQUE ' .AND. LDEP) THEN
  300. ICHRE2(3) = JTYP
  301. IIRES = IIRES + 1
  302. ENDIF
  303. TYPRET=' '
  304. CALL ACCTAB(ITABV,'MOT',I0,X0,'VITESSE_1/2',L0,IP0,
  305. & TYPRET,I1,X1,CHARRE,LVIT,IP1)
  306. IF (TYPRET.EQ.'LOGIQUE ' .AND. LVIT) THEN
  307. ICHRE2(4) = JTYP
  308. IIRES = IIRES + 1
  309. ENDIF
  310. TYPRET=' '
  311. CALL ACCTAB(ITABV,'MOT',I0,X0,'ACCELERATION',L0,IP0,
  312. & TYPRET,I1,X1,CHARRE,LACC,IP1)
  313. IF (TYPRET.EQ.'LOGIQUE ' .AND. LACC) THEN
  314. ICHRE2(5) = JTYP
  315. IIRES = IIRES + 1
  316. ENDIF
  317. TYPRET=' '
  318. CALL ACCTAB(ITABV,'MOT',I0,X0,'ACCELERATION_1/2',L0,IP0,
  319. & TYPRET,I1,X1,CHARRE,LACC,IP1)
  320. IF (TYPRET.EQ.'LOGIQUE ' .AND. LACC) THEN
  321. ICHRE2(6) = JTYP
  322. IIRES = IIRES + 1
  323. ENDIF
  324.  
  325. * sorties des travaux
  326. TYPRET=' '
  327. CALL ACCTAB(ITABV,'MOT',I0,X0,'TRAVAIL_EXTERIEUR',L0,IP0,
  328. & TYPRET,I1,X1,CHARRE,LWEXT,IP1)
  329. IF (TYPRET.EQ.'LOGIQUE ' .AND. LWEXT) THEN
  330. ICHRE2(7) = JTYP
  331. IIRES = IIRES + 1
  332. ENDIF
  333. TYPRET=' '
  334. CALL ACCTAB(ITABV,'MOT',I0,X0,'TRAVAIL_INTERIEUR',L0,IP0,
  335. & TYPRET,I1,X1,CHARRE,LWINT,IP1)
  336. IF (TYPRET.EQ.'LOGIQUE ' .AND. LWINT) THEN
  337. ICHRE2(8) = JTYP
  338. IIRES = IIRES + 1
  339. ENDIF
  340.  
  341. ENDIF
  342.  
  343. * Dimensionnement des sorties LIAISON_A
  344.  
  345. * --- syntaxe table PASAPAS ---
  346. IF (LMODYN) THEN
  347. iliaa = modtla
  348. if (iliaa.gt.0)
  349. & CALL DYNE74(ITSORT,ITCARA,ITAC,ILIAA,KTRAV,II,NLSA,NVALA)
  350. * --- syntaxe tables DYNE normales ---
  351. ELSE
  352. TYPRET = ' '
  353. CALL ACCTAB(ITSORT,'MOT',I0,X0,'LIAISON_A',L0,IP0,
  354. & TYPRET,I1,X1,CHARRE,L1,ITLA)
  355. IF (ITLA.NE.0 .AND. TYPRET.EQ.'TABLE ') THEN
  356. CALL ACCTAB(ITLIA,'MOT',I0,X0,'LIAISON_A',L0,IP0,
  357. & 'TABLE',I1,X1,' ',L1,ILIAA)
  358. CALL DYNE24(ITLA,ILIAA,KTRAV,II,NLSA,NVALA)
  359. ENDIF
  360. ENDIF
  361. IF (IERR.NE.0) RETURN
  362. IF (NLSA.NE.0) ICHRE2(9) = 1
  363.  
  364. * Dimensionnement des sorties LIAISON_B
  365.  
  366. * --- syntaxe table PASAPAS ---
  367. IF (LMODYN) THEN
  368. iliab = modtlb
  369. if (iliab.gt.0)
  370. & CALL DYNE77(ITSORT,ITCARA,ITAC,ILIAB,KTRAV,II,NLSB,NVALB,NPLB)
  371. * --- syntaxe tables DYNE normales ---
  372. ELSE
  373. TYPRET = ' '
  374. CALL ACCTAB(ITSORT,'MOT',I0,X0,'LIAISON_B',L0,IP0,
  375. & TYPRET,I1,X1,CHARRE,L1,ITLB)
  376. IF (ITLB.NE.0 .AND. TYPRET.EQ.'TABLE ') THEN
  377. CALL ACCTAB(ITLIA,'MOT',I0,X0,'LIAISON_B',L0,IP0,
  378. & 'TABLE',I1,X1,' ',L1,ILIAB)
  379. CALL DYNE27(ITLB,ILIAB,KTRAV,II,NLSB,NVALB,NPLB)
  380. ENDIF
  381. ENDIF
  382.  
  383. ENDIF
  384. c fin du cas ou une table de sortie a ete fournie
  385. IF (IERR.NE.0) RETURN
  386. IF (NLSB.NE.0) ICHRE2(10) = 1
  387.  
  388. *
  389. * CREATION ET REMPLISSAGE DE MTRES
  390. *
  391. NRES = IIRES
  392. NVES = II
  393. IF (IIMPI.EQ.333) THEN
  394. WRITE(IOIMP,*)'DYNE15 : NVES = ',NVES
  395. WRITE(IOIMP,*)'DYNE15 : NLSA = ',NLSA
  396. WRITE(IOIMP,*)'DYNE15 : NLSB = ',NLSB
  397. WRITE(IOIMP,*)'DYNE15 : NVALA = ',NVALA
  398. WRITE(IOIMP,*)'DYNE15 : NVALB = ',NVALB
  399. WRITE(IOIMP,*)'DYNE15 : II = ',II
  400. ENDIF
  401. NREP = 10
  402. NCRES = NVA
  403. NPRES = INT(NP/NINS) + 1
  404. IF ( REPRIS ) NPRES = NPRES - 1
  405. SEGINI,MTRES
  406. KTRES = MTRES
  407. DO 30 I = 1,NVES
  408. ICHRES(I) = ICHRE2(I)
  409. 30 CONTINUE
  410. *
  411. DO 40 I = 1,NLSA
  412. DO 42 II = 1,NTVAR
  413. ILIREA(I,II) = IVLIAA(I,II)
  414. ILIRNA(I,II) = INLIAA(I,II)
  415. 42 CONTINUE
  416. IPOLA(I) = MPOLA(I)
  417. INULA(I) = MNULA(I)
  418. 40 CONTINUE
  419. DO 50 I = 1,NLSB
  420. DO 52 II = 1,NTVAR
  421. ILIREB(I,II) = IVLIAB(I,II)
  422. ILIRNB(I,II) = INLIAB(I,II)
  423. 52 CONTINUE
  424. IPOLB(I) = MPOLB(I)
  425. INULB(I) = MNULB(I)
  426. 50 CONTINUE
  427. DO 160 I = 1,NLIAA
  428. ILPOLA(I,1) = IPLA(I)
  429. 160 CONTINUE
  430. *
  431. SEGSUP,MTRAV
  432. SEGSUP,MTRA
  433. *
  434. * Boucle d'impression des ICHRES:
  435. *
  436. IF (IIMPI.EQ.333)
  437. & WRITE(IOIMP,*)'DYNE15 : ICHRES(:)=',(ICHRES(I),I=1,NVES)
  438. *
  439. RETURN
  440. END
  441.  
  442.  
  443.  
  444.  

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