Télécharger dyne15.eso

Retour à la liste

Numérotation des lignes :

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

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