Télécharger dyne17.eso

Retour à la liste

Numérotation des lignes :

dyne17
  1. C DYNE17 SOURCE CB215821 26/08/24 21:16:19 12622
  2. SUBROUTINE DYNE17(ITBAS,ITKM,IPMAIL,KTRES,KPREF,NPLAA,NXPALA,
  3. &KSAM,lmodyn)
  4. IMPLICIT INTEGER(I-N)
  5. IMPLICIT REAL*8(A-H,O-Z)
  6. *--------------------------------------------------------------------*
  7. * *
  8. * Operateur DYNE : algorithme de Fu - de Vogelaere *
  9. * ________________________________________________ *
  10. * *
  11. * Creation des CHPOINTs qui contiendront les resultats. *
  12. * Creation des LISTREELs qui contiendront les resultats. *
  13. * Creation des POINTS qui contiendront les variables de liaison *
  14. * necessaires a une reprise. *
  15. * *
  16. * Parametres: *
  17. * *
  18. * e ITBAS Table representant une base modale *
  19. * e ITKM Table contenant les matrices XK et XM *
  20. * e IPMAIL Maillage de reference *
  21. * es KTRES Segment de sauvegarde des resultats *
  22. * e KPREF Segment des points de reference *
  23. * e NPLAA Nombre max de pts pour les liaisons en base A *
  24. * e NXPALA Nombre max de var internes pour ces memes liaisons *
  25. * *
  26. * Remarque importante: tous les CHPOINTs crees vont pointer *
  27. * sur le meme MELEME afin de limiter au maximum la memoire *
  28. * utilisee. *
  29. * *
  30. * Auteur, date de creation: *
  31. * *
  32. * Denis ROBERT-MOUGIN, le 30 juin 1989. *
  33. * *
  34. *--------------------------------------------------------------------*
  35.  
  36. -INC PPARAM
  37. -INC CCOPTIO
  38. -INC SMCHARG
  39. -INC SMCHPOI
  40. -INC SMELEME
  41. -INC SMRIGID
  42. -INC SMLREEL
  43. -INC SMLENTI
  44. -INC SMCOORD
  45. -INC SMTABLE
  46. *
  47. * IPORES contient les pointeurs sur les CHPOINTs qui
  48. * representeront chaque variable pour chaque pas de sortie.
  49. * IPOREP contient les pointeurs sur les CHPOINTs
  50. * necessaires a une reprise eventuelle de calcul.
  51. *
  52. SEGMENT,MTRES
  53. REAL*8 XRES(NRES,NCRES,NPRES),XREP(NREP,NCRES)
  54. REAL*8 XRESLA(NLSA,NPRES,NVALA),XRESLB(NLSB,NPRES,NVALB)
  55. REAL*8 XMREP(NLIAB,4,IDIMB)
  56. INTEGER ICHRES(NVES),IPORES(NRESPO,NPRES),IPOREP(NREP)
  57. INTEGER ILIRES(NRESLI,NCRES)
  58. INTEGER IPOLA(NLSA),INULA(NLSA),IPLRLA(NLSA,NVALA)
  59. INTEGER IPOLB(NLSB),INULB(NLSB),IPLRLB(NLSB,NVALB)
  60. INTEGER ILIREA(NLSA,NTVAR),ILIREB(NLSB,NTVAR)
  61. INTEGER ILIRNA(NLSA,NTVAR),ILIRNB(NLSB,NTVAR)
  62. INTEGER IPOLR(1),IMREP(NLIAB,2),IPPREP(NLIAB,4)
  63. INTEGER ILPOLA(NLIAA,2)
  64. ENDSEGMENT
  65. SEGMENT,MPREF
  66. INTEGER IPOREF(NPREF)
  67. ENDSEGMENT
  68. * Segment pour Champoints
  69. SEGMENT,MSAM
  70. integer jplibb(NPLB)
  71. ENDSEGMENT
  72. c segment local pour verifier que les matrices sont deja assemblees et
  73. c pas 2 fois la meme inconnue (composante + noeud) dans 2 sous-matrices
  74. SEGMENT MVU
  75. c CHARACTER*4 COMPVU(NCVU)
  76. c INTEGER IDEJVU(NIVU,NCVU)
  77. INTEGER IDEJVU(NIVU)
  78. ENDSEGMENT
  79. *
  80. LOGICAL L0,L1,lmodyn
  81. *
  82. MTRES = KTRES
  83. MPREF = KPREF
  84. MSAM = KSAM
  85. NPREF = IPOREF(/1)
  86. NVES = ICHRES(/1)
  87. NRES = XRES(/1)
  88. NCRES = XRES(/2)
  89. NPRES = XRES(/3)
  90. NREP = XREP(/1)
  91. NLSA = IPLRLA(/1)
  92. NLSB = IPLRLB(/1)
  93. NLIAB = XMREP(/1)
  94. NLIAA = ILPOLA(/1)
  95. NPLBB = JPLIBB(/1)
  96. NTVAR = ILIRNB(/2)
  97.  
  98. *
  99. *=========== CAS D'UNE BASE MODALE ===========
  100. *
  101. IF (ITBAS.NE.0.AND.ITKM.EQ.0) THEN
  102.  
  103. * --- syntaxe table PASAPAS ---
  104. IF(LMODYN) THEN
  105.  
  106. * maillage
  107. meleme = ipmail
  108. segact meleme
  109. if (lisous(/1).eq.0) then
  110. ipmmod = ipmail
  111. ipmsta = 0
  112. else
  113. ipmmod = lisous(1)
  114. ipmsta = lisous(2)
  115. endif
  116. *
  117. * production chpoint forces base A (devso2)
  118. NSOUPO = 1
  119. if(ipmmod.gt.0.and.ipmsta.gt.0) nsoupo = 2
  120. NAT=1
  121. SEGINI,MCHPOI
  122. IPCHPO = MCHPOI
  123. MTYPOI = 'FLIAISONS'
  124. IFOPOI = IFOUR
  125. * nature diffuse
  126. JATTRI(1) = 1
  127. nmost0 = 0
  128. KIPCHP = 0
  129. if (ipmmod.gt.0) then
  130. NC = 1
  131. SEGINI,MSOUPO
  132. KIPCHP = KIPCHP + 1
  133. IPCHP(KIPCHP) = MSOUPO
  134. NOCOMP(1) = 'ALFA'
  135. NOHARM(1) = NIFOUR
  136. IGEOC = ipmmod
  137. ipt1 = ipmmod
  138. segact ipt1
  139. N = ipt1.num(/2)
  140. nmost0 = N
  141. SEGINI,MPOVAL
  142. IPOVAL = MPOVAL
  143. endif
  144.  
  145. if (ipmsta.gt.0) then
  146. NC = 1
  147. SEGINI,MSOUPO
  148. KIPCHP = KIPCHP + 1
  149. IPCHP(KIPCHP) = MSOUPO
  150. NOCOMP(1) = 'BETA'
  151. NOHARM(1) = NIFOUR
  152. IGEOC = ipmsta
  153. ipt1 = ipmsta
  154. segact ipt1
  155. N = ipt1.num(/2)
  156. SEGINI,MPOVAL
  157. IPOVAL = MPOVAL
  158. endif
  159.  
  160. * --- syntaxe tables DYNE normales ---
  161. ELSE
  162. *
  163. * Cas de la base modale, on n'a qu'une composante: 'ALFA'
  164. IF (IIMPI.EQ.333) THEN
  165. WRITE(IOIMP,*)'DYNE17: cas de la base modale'
  166. ENDIF
  167. NSOUPO = 1
  168. NAT=1
  169. SEGINI,MCHPOI
  170. IPCHPO = MCHPOI
  171. MTYPOI = ' '
  172. IFOPOI = IFOUR
  173. * nature diffuse
  174. JATTRI(1) = 1
  175. NC = 1
  176. SEGINI,MSOUPO
  177. IPCHP(1) = MSOUPO
  178. NOCOMP(1) = 'ALFA'
  179. NOHARM(1) = NIFOUR
  180. NOCOMP(1) = 'ALFA'
  181. NOHARM(1) = NIFOUR
  182. IGEOC = IPMAIL
  183. N = NPREF
  184. SEGINI,MPOVAL
  185. IPOVAL = MPOVAL
  186.  
  187. ENDIF
  188.  
  189. *
  190. *=========== CAS DE MATRICES MODALES EN ENTREE ===========
  191. *
  192. ELSE IF (ITKM.NE.0) THEN
  193. *
  194. * On se refere au descripteur de la rigidite, mais attention:
  195. * les composantes peuvent differer d'une zone elementaire a
  196. * une autre.
  197. *
  198. CALL ACCTAB(ITKM,'MOT',I0,X0,'RAIDEUR',L0,IP0,
  199. & 'RIGIDITE',I1,X1,' ',L1,IRIGI)
  200. *
  201. * Creation du CHPOINT de reference:
  202. *
  203. IF (IIMPI.EQ.333) THEN
  204. WRITE(IOIMP,*)
  205. & 'DYNE17: creation selon un descripteur de rigidite'
  206. ENDIF
  207. MRIGID = IRIGI
  208. SEGACT,MRIGID
  209. NRIGI = IRIGEL(/2)
  210. IF (IIMPI.EQ.333) THEN
  211. WRITE(IOIMP,*)
  212. & 'DYNE17: nombre de rigidites elementaires ',NRIGI
  213. ENDIF
  214. NSOUPO = NRIGI
  215. NAT=1
  216. SEGINI,MCHPOI
  217. IPCHPO = MCHPOI
  218. MTYPOI = ' '
  219. * nature diffuse
  220. JATTRI(1) = 1
  221. IFOPOI = IFOUR
  222. c creation du segment de verif
  223. NIVU = NPREF
  224. SEGINI,MVU
  225. DO 30 I=1,NRIGI
  226. NYSONT = 0
  227. DESCR = IRIGEL(3,I)
  228. IPT1 = IRIGEL(1,I)
  229. SEGACT,DESCR,IPT1
  230. * NTOTC est le nombre total d'inconnues
  231. * NBNO est le nombre de noeuds par element
  232. * NBEL est le nombre d'elements dans la zone
  233. * NC est le nombre de composantes par noeud dans la zone
  234. NBNO = IPT1.NUM(/1)
  235. NBEL = IPT1.NUM(/2)
  236. NTOTC = LISINC(/2)
  237. NC = NTOTC / NBNO
  238. IF (IIMPI.EQ.333) THEN
  239. WRITE(IOIMP,*)'DYNE17: nombre total d''inconnues ',NTOTC
  240. WRITE(IOIMP,*)'DYNE17: nombre de noeuds par element ',NBNO
  241. WRITE(IOIMP,*)'DYNE17: nombre d''elements dans la zone ',NBEL
  242. WRITE(IOIMP,*)'DYNE17: nombre de composantes par noeud ',NC
  243. ENDIF
  244. SEGINI,MSOUPO
  245. IPCHP(I) = MSOUPO
  246. DO 40 IC=1,NC
  247. IF (LISINC(IC).NE.'ALFA'.and.LISINC(IC).NE.'BETA') THEN
  248. WRITE(IOIMP,*) 'DYNE: la raideur K de la table RAIDEUR_ET_MASSE',
  249. & ' ne peut avoir que ALFA ou BETA pour composante!'
  250. CALL ERREUR(483)
  251. RETURN
  252. ENDIF
  253. NOCOMP(IC) = LISINC(IC)
  254. NOHARM(IC) = NIFOUR
  255. 40 CONTINUE
  256. *
  257. * Combien de noeuds references dans cette zone ?
  258. *
  259. c BP : le chpoint repose necessairement sur des elements POI1
  260. NBSOUS=0
  261. NBREF =0
  262. NBNN =1
  263. NBELEM=NBNO*NBEL
  264. SEGINI,MELEME
  265. ITYPEL=1
  266. IGEOC = MELEME
  267. DO 341 IEL=1,NBEL
  268. DO 50 INO=1,NBNO
  269. c ce noeud appartient-il bien a la liste MPREF.IPOREF ?
  270. CALL PLACE2(IPOREF,NPREF,ILYEST,IPT1.NUM(INO,IEL))
  271. IF (ILYEST.EQ.0) GOTO 50
  272. c rem : si ILYEST = 0 , on a un pb --> erreur dans devtra
  273. c BP : ce noeud a t'il deja ete vu dans une autre zone?
  274. IF(IDEJVU(ILYEST).EQ.0) THEN
  275. c tout va bien on ajoute ce noeud pour ces composantes
  276. NYSONT = NYSONT + 1
  277. NUM(1,NYSONT) = IPT1.NUM(INO,IEL)
  278. IDEJVU(ILYEST)=NYSONT
  279. ELSE
  280. c noeud deja vu a l element NYSONT : on ne fait rien
  281. c on suppose qu'1 noeud => 1 inconnue
  282. ENDIF
  283. 50 CONTINUE
  284. 341 CONTINUE
  285. IF(NYSONT.lt.NBELEM) THEN
  286. NBELEM=NYSONT
  287. SEGADJ,MELEME
  288. ENDIF
  289. IF (IIMPI.EQ.333) THEN
  290. WRITE(IOIMP,*)'DYNE17: nombre de noeuds dans la zone ',NYSONT
  291. ENDIF
  292. N = NYSONT
  293. SEGINI,MPOVAL
  294. IPOVAL = MPOVAL
  295. SEGDES,DESCR,IPT1,MELEME,MSOUPO
  296. 30 CONTINUE
  297. SEGDES,MRIGID
  298. SEGSUP,MVU
  299.  
  300. ENDIF
  301. *=========== FIN DES CAS BASE MODALE / MATRICES MODALES ===========
  302.  
  303. *
  304. * Variables demandees en sortie:
  305. c II = 0
  306. IIPO = 0
  307. c IILI = 0
  308. c boucle sur les variables (deplacement, vitesse ... )
  309. DO 60 ICR=1,8
  310. * - Duplication du CHPOINT pour les variables demandees
  311. * a tous les pas de sortie
  312. IF (ICHRES(ICR).EQ.1) THEN
  313. c II = II + 1
  314. IIPO=IIPO+1
  315. DO 70 IPAS=1,NPRES
  316. CALL COPIE5(IPCHPO,IPCHP1)
  317. IPORES(IIPO,IPAS) = IPCHP1
  318. 70 CONTINUE
  319. * - creation des LISTREEL pour les variables demandees
  320. * et tous les modes
  321. ELSEIF(ICHRES(ICR).EQ.2) THEN
  322. c II = II + 1
  323. c IILI=IILI+1
  324. c if (NCRES.gt.IPORES(/2)) then
  325. c write(ioimp,*) 'il faut plus de pas que de modes !'
  326. c call erreur(481)
  327. c return
  328. c endif
  329. c DO 71 IMODE=1,NCRES
  330. c JG=NPRES
  331. c segini,MLREEL
  332. c ILIRES(IILI,IMODE) = MLREEL
  333. c c rem : on range le MLREEL ici en supposant qu'il y a plus
  334. c c de pas que de modes
  335. cbp : on ne fait quasi-rien ici, on travaillera dans devso2
  336. 71 CONTINUE
  337. ENDIF
  338.  
  339. 60 CONTINUE
  340. *
  341. * Cas des CHPOINTs necessaires a la reprise du calcul:
  342. *
  343. DO 80 I = 1,NREP
  344. CALL COPIE5(IPCHPO,IPCHP1)
  345. IPOREP(I) = IPCHP1
  346. 80 CONTINUE
  347. *
  348. * Cas des POINTS necessaires a la reprise du calcul:
  349. *
  350. IDIM1 = IDIM + 1
  351. segact mcoord*mod
  352. NPTS = nbpts
  353. NBPTS = NPTS + 4 * NLIAB
  354. SEGADJ MCOORD
  355. DO 342 I = 1,NLIAB
  356. DO 90 II = 1,4
  357. NPTS = NPTS + 1
  358. IPPREP(I,II) = NPTS
  359. 90 CONTINUE
  360. 342 CONTINUE
  361. *
  362. MCHPOI = IPCHPO
  363. SEGSUP,MCHPOI
  364. *
  365. * Creation des LISTREELs qui contiendront les resultats
  366. *
  367. JG = NPRES
  368. SEGINI,MLREEL
  369. IPOLR(1) = MLREEL
  370. *
  371. * liaisons en base A
  372. DO 100 IL = 1,NLSA
  373. NLR = ICHRES(10 + IL)
  374. DO 105 IN = 1,NLR
  375. JG = NPRES
  376. SEGINI,MLREEL
  377. IPLRLA(IL,IN) = MLREEL
  378. 105 CONTINUE
  379. 100 CONTINUE
  380.  
  381. * DO 110 IL = 1,NLSB
  382. * NLR = ICHRES(10 + NLSA + IL)
  383. * DO 115 IN = 1,NLR
  384. * JG = NPRES
  385. * SEGINI,MLREEL
  386. * IPLRLB(IL,IN) = MLREEL
  387. * 115 CONTINUE
  388. * end do
  389. * 110 CONTINUE
  390. * end do
  391. *
  392. * Creation des LISTENTIs et des LISTREELs pour sauvegarde
  393. * des liaisons en base A en vue d'une reprise
  394. *
  395. DO 200 I = 1,NLIAA
  396. * liaisons POLYNOMIALEs
  397. IF (ILPOLA(I,1).EQ.1) THEN
  398. JG = NPLAA * 2
  399. SEGINI,MLENTI
  400. ILPOLA(I,1) = MLENTI
  401. JG = NXPALA
  402. SEGINI,MLREEL
  403. ILPOLA(I,2) = MLREEL
  404. * liaisons COUPLAGE_DEPLACEMENT + CONVOLUTION
  405. ELSEIF(ILPOLA(I,1).EQ.2) THEN
  406. * on ne fait rien ici :
  407. * on branchera les listreels creees par dyne19 dans devso4
  408. ENDIF
  409. 200 CONTINUE
  410. *
  411. * liaisons en base B
  412. DO 300 IL=1,NLSB
  413. II=0
  414. DO 310 IV = 1,NTVAR
  415.  
  416. * -Creation de listreels
  417. IF (ILIREB(IL,IV).EQ.1) THEN
  418. II=II+1
  419. JG = NPRES
  420. SEGINI,MLREEL
  421. IPLRLB(IL,II) = MLREEL
  422.  
  423. * -Creation d'une table de chpoints
  424. ELSEIF (ILIREB(IL,IV).EQ.2) THEN
  425. M=NPRES
  426. SEGINI,MTABLE
  427. MLOTAB=M
  428. DO 320 IM=1,NPRES
  429. MTABTI(IM)='ENTIER'
  430. MTABTV(IM)='CHPOINT'
  431. MTABII(IM)=IM
  432. 320 CONTINUE
  433. SEGDES,MTABLE
  434. IPLRLB(IL,II+1)=MTABLE
  435. * Creation d un champoint
  436. NSOUPO=1
  437. SEGINI,MCHPOI
  438. IPCHPO = MCHPOI
  439. MOCHDE = 'Force_de_choc'
  440. * nature diffuse
  441. NC=2
  442. SEGINI,MSOUPO
  443. NOCOMP(1)='NORM'
  444. NOCOMP(2)='TANG'
  445. IPCHP(1)=MSOUPO
  446. N=NPLBB
  447. SEGINI,MPOVAL
  448. IPOVAL=MPOVAL
  449. NBELEM=NPLBB
  450. NBNN=1
  451. NBREF=0
  452. NBSOUS=0
  453. SEGINI,MELEME
  454. DO 330 IE=1,NPLBB
  455. NUM(1,IE)=JPLIBB(IE)
  456. 330 CONTINUE
  457. IGEOC=MELEME
  458. JG=NPRES
  459. SEGINI,MLENTI
  460. DO 340 I = 1,NPRES
  461. CALL COPIE5(IPCHPO,IPCHP1)
  462. LECT(I) = IPCHP1
  463. 340 CONTINUE
  464. SEGDES,MLENTI
  465. IPLRLB(IL,II+2)=MLENTI
  466. MCHPOI=IPCHPO
  467. SEGSUP,MCHPOI
  468. II=II+NPLBB*2
  469. ENDIF
  470.  
  471. 310 CONTINUE
  472. 300 CONTINUE
  473. *
  474. END
  475.  
  476.  
  477.  
  478.  
  479.  
  480.  
  481.  
  482.  
  483.  
  484.  
  485.  
  486.  
  487.  
  488.  
  489.  
  490.  
  491.  
  492.  
  493.  
  494.  

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