Télécharger dyne17.eso

Retour à la liste

Numérotation des lignes :

dyne17
  1. C DYNE17 SOURCE CB215821 20/11/25 13:26:22 10792
  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 50 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. IF(NYSONT.lt.NBELEM) THEN
  285. NBELEM=NYSONT
  286. SEGADJ,MELEME
  287. ENDIF
  288. IF (IIMPI.EQ.333) THEN
  289. WRITE(IOIMP,*)'DYNE17: nombre de noeuds dans la zone ',NYSONT
  290. ENDIF
  291. N = NYSONT
  292. SEGINI,MPOVAL
  293. IPOVAL = MPOVAL
  294. SEGDES,DESCR,IPT1,MELEME,MSOUPO
  295. 30 CONTINUE
  296. SEGDES,MRIGID
  297. SEGSUP,MVU
  298.  
  299. ENDIF
  300. *=========== FIN DES CAS BASE MODALE / MATRICES MODALES ===========
  301.  
  302. *
  303. * Variables demandees en sortie:
  304. c II = 0
  305. IIPO = 0
  306. c IILI = 0
  307. c boucle sur les variables (deplacement, vitesse ... )
  308. DO 60 ICR=1,8
  309. * - Duplication du CHPOINT pour les variables demandees
  310. * a tous les pas de sortie
  311. IF (ICHRES(ICR).EQ.1) THEN
  312. c II = II + 1
  313. IIPO=IIPO+1
  314. DO 70 IPAS=1,NPRES
  315. CALL COPIE5(IPCHPO,IPCHP1)
  316. IPORES(IIPO,IPAS) = IPCHP1
  317. 70 CONTINUE
  318. * - creation des LISTREEL pour les variables demandees
  319. * et tous les modes
  320. ELSEIF(ICHRES(ICR).EQ.2) THEN
  321. c II = II + 1
  322. c IILI=IILI+1
  323. c if (NCRES.gt.IPORES(/2)) then
  324. c write(ioimp,*) 'il faut plus de pas que de modes !'
  325. c call erreur(481)
  326. c return
  327. c endif
  328. c DO 71 IMODE=1,NCRES
  329. c JG=NPRES
  330. c segini,MLREEL
  331. c ILIRES(IILI,IMODE) = MLREEL
  332. c c rem : on range le MLREEL ici en supposant qu'il y a plus
  333. c c de pas que de modes
  334. cbp : on ne fait quasi-rien ici, on travaillera dans devso2
  335. 71 CONTINUE
  336. ENDIF
  337.  
  338. 60 CONTINUE
  339. *
  340. * Cas des CHPOINTs necessaires a la reprise du calcul:
  341. *
  342. DO 80 I = 1,NREP
  343. CALL COPIE5(IPCHPO,IPCHP1)
  344. IPOREP(I) = IPCHP1
  345. 80 CONTINUE
  346. *
  347. * Cas des POINTS necessaires a la reprise du calcul:
  348. *
  349. IDIM1 = IDIM + 1
  350. segact mcoord*mod
  351. NPTS = nbpts
  352. NBPTS = NPTS + 4 * NLIAB
  353. SEGADJ MCOORD
  354. DO 90 I = 1,NLIAB
  355. DO 90 II = 1,4
  356. NPTS = NPTS + 1
  357. IPPREP(I,II) = NPTS
  358. 90 CONTINUE
  359. *
  360. MCHPOI = IPCHPO
  361. SEGSUP,MCHPOI
  362. *
  363. * Creation des LISTREELs qui contiendront les resultats
  364. *
  365. JG = NPRES
  366. SEGINI,MLREEL
  367. IPOLR(1) = MLREEL
  368. *
  369. * liaisons en base A
  370. DO 100 IL = 1,NLSA
  371. NLR = ICHRES(10 + IL)
  372. DO 105 IN = 1,NLR
  373. JG = NPRES
  374. SEGINI,MLREEL
  375. IPLRLA(IL,IN) = MLREEL
  376. 105 CONTINUE
  377. 100 CONTINUE
  378.  
  379. * DO 110 IL = 1,NLSB
  380. * NLR = ICHRES(10 + NLSA + IL)
  381. * DO 115 IN = 1,NLR
  382. * JG = NPRES
  383. * SEGINI,MLREEL
  384. * IPLRLB(IL,IN) = MLREEL
  385. * 115 CONTINUE
  386. * end do
  387. * 110 CONTINUE
  388. * end do
  389. *
  390. * Creation des LISTENTIs et des LISTREELs pour sauvegarde
  391. * des liaisons en base A en vue d'une reprise
  392. *
  393. DO 200 I = 1,NLIAA
  394. * liaisons POLYNOMIALEs
  395. IF (ILPOLA(I,1).EQ.1) THEN
  396. JG = NPLAA * 2
  397. SEGINI,MLENTI
  398. ILPOLA(I,1) = MLENTI
  399. JG = NXPALA
  400. SEGINI,MLREEL
  401. ILPOLA(I,2) = MLREEL
  402. * liaisons COUPLAGE_DEPLACEMENT + CONVOLUTION
  403. ELSEIF(ILPOLA(I,1).EQ.2) THEN
  404. * on ne fait rien ici :
  405. * on branchera les listreels creees par dyne19 dans devso4
  406. ENDIF
  407. 200 CONTINUE
  408. *
  409. * liaisons en base B
  410. DO 300 IL=1,NLSB
  411. II=0
  412. DO 310 IV = 1,NTVAR
  413.  
  414. * -Creation de listreels
  415. IF (ILIREB(IL,IV).EQ.1) THEN
  416. II=II+1
  417. JG = NPRES
  418. SEGINI,MLREEL
  419. IPLRLB(IL,II) = MLREEL
  420.  
  421. * -Creation d'une table de chpoints
  422. ELSEIF (ILIREB(IL,IV).EQ.2) THEN
  423. M=NPRES
  424. SEGINI,MTABLE
  425. MLOTAB=M
  426. DO 320 IM=1,NPRES
  427. MTABTI(IM)='ENTIER'
  428. MTABTV(IM)='CHPOINT'
  429. MTABII(IM)=IM
  430. 320 CONTINUE
  431. SEGDES,MTABLE
  432. IPLRLB(IL,II+1)=MTABLE
  433. * Creation d un champoint
  434. NSOUPO=1
  435. SEGINI,MCHPOI
  436. IPCHPO = MCHPOI
  437. MOCHDE = 'Force_de_choc'
  438. * nature diffuse
  439. NC=2
  440. SEGINI,MSOUPO
  441. NOCOMP(1)='NORM'
  442. NOCOMP(2)='TANG'
  443. IPCHP(1)=MSOUPO
  444. N=NPLBB
  445. SEGINI,MPOVAL
  446. IPOVAL=MPOVAL
  447. NBELEM=NPLBB
  448. NBNN=1
  449. NBREF=0
  450. NBSOUS=0
  451. SEGINI,MELEME
  452. DO 330 IE=1,NPLBB
  453. NUM(1,IE)=JPLIBB(IE)
  454. 330 CONTINUE
  455. IGEOC=MELEME
  456. JG=NPRES
  457. SEGINI,MLENTI
  458. DO 340 I = 1,NPRES
  459. CALL COPIE5(IPCHPO,IPCHP1)
  460. LECT(I) = IPCHP1
  461. 340 CONTINUE
  462. SEGDES,MLENTI
  463. IPLRLB(IL,II+2)=MLENTI
  464. MCHPOI=IPCHPO
  465. SEGSUP,MCHPOI
  466. II=II+NPLBB*2
  467. ENDIF
  468.  
  469. 310 CONTINUE
  470. 300 CONTINUE
  471. *
  472. END
  473.  
  474.  
  475.  
  476.  
  477.  
  478.  
  479.  
  480.  
  481.  
  482.  
  483.  
  484.  
  485.  
  486.  
  487.  
  488.  
  489.  
  490.  
  491.  

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