Télécharger elfgr2.eso

Retour à la liste

Numérotation des lignes :

elfgr2
  1. C ELFGR2 SOURCE CB215821 17/11/30 21:16:01 9639
  2. SUBROUTINE ELFGR2(KGREEN,DELTAT,M,NPAS,MAXBLO,KNREFE,KANBN,KDNCN)
  3. IMPLICIT INTEGER(I-N)
  4. IMPLICIT REAL*8(A-H,O-Z)
  5. C
  6. C =====================================================================
  7. C APPELE PAR ELFE
  8. C INITIALISATION DES BLOCS ANBN ET DNCN
  9. C REMPLISSAGE DES ANBN AVEC LES FONCTIONS DE GREEN ( KGREEN )
  10. C
  11. C CREATION : 22/09/87
  12. C PROGRAMMEUR : GUILBAUD
  13. C =====================================================================
  14.  
  15. -INC PPARAM
  16. -INC CCOPTIO
  17. -INC CCREEL
  18. -INC SMEVOLL
  19. -INC SMLREEL
  20. C
  21. SEGMENT MANBN
  22. POINTEUR KAB(NSGA).ANBN
  23. ENDSEGMENT
  24. C
  25. C NSGA : NOMBRE DE BLOCS ANBN
  26. C
  27. SEGMENT ANBN
  28. REAL*8 AB(NTANBN,LANBN)
  29. ENDSEGMENT
  30. C
  31. C AB(I,K) : TERME I DE LA MATRICE A OU B D'UN ELEMENT AU TEMPS K
  32. C NTANBN : NOMBRE DE TERMES DES MATRICES A ET B DE TOUS LES ELEMENTS
  33. C LANBN : NOMBRE DE PAS DE TEMPS STOCKES DANS UN BLOC ANBN
  34. C
  35. SEGMENT MDNCN
  36. POINTEUR KDC(NSGD).DNCN
  37. ENDSEGMENT
  38. C
  39. C NSGD : NOMBRE DE BLOCS DNCN
  40. C
  41. SEGMENT DNCN
  42. REAL*8 DC(NIDNCN,LDNCN)
  43. ENDSEGMENT
  44. C
  45. C DC(I,K) : DDL I AU TEMPS (K-1)*DELTAT
  46. C NIDNCN : NOMBRE TOTAL D'INCONNUES
  47. C LDNCN : 1 + NOMBRE DE PAS DE TEMPS STOCKES DANS UN BLOC DNCN
  48. C
  49. SEGMENT MNREFE
  50. INTEGER NREFE(8,NSTR)
  51. INTEGER NTANBN
  52. INTEGER NIDNCN
  53. INTEGER NTVN
  54. POINTEUR NREPA.MPASS
  55. POINTEUR NRECA.MCARA
  56. POINTEUR NRENO.MNORM
  57. POINTEUR NRECPR.ICPR
  58. POINTEUR NREMEL.MELEME
  59. POINTEUR NREDEN.MDEN
  60. ENDSEGMENT
  61. C
  62. C NSTR : NOMBRE D'ELEMENTS
  63. C NREFE(1,I) : MELEME
  64. C NREFE(2,I) : MSOSTU
  65. C NREFE(3,I) : TYPE DE L'ELEMENT
  66. C NREFE(4,I) : NOMBRE DE POINTS DU MELEME
  67. C NREFE(5,I) : NOMBRE DE DDL PAR POINT
  68. C NREFE(6,I)=IVN :LE 1ER DDL DE L'ELEMENT EST LE IVN+1 IEME DE VN
  69. C NREFE(7,I)=IAN :LE 1ER TERME DE LA MATRICE A EST LE IAN IEME DE ANBN
  70. C NREFE(8,I)=1 :LE IEME ELEMENT EST RIGIDE (OU PARTIELLEMENT) SINON 0
  71. C NTANBN : NOMBRE DE TERMES DES MATRICES A ET B POUR TOUS LES ELEMENTS
  72. C NIDNCN : NOMBRE TOTAL D'INCONNUES DE DNCN
  73. C NTVN : LONGUEUR DU TABLEAU VN
  74. C
  75. SEGMENT MCARA
  76. REAL*8 CARA(LCAR*NSTR)
  77. ENDSEGMENT
  78. C
  79. C LCAR : NOMBRE DE CARACTERISTIQUES DE L'ELEMENT
  80. C
  81. SEGMENT MDEN
  82. INTEGER IDEN(INS)
  83. ENDSEGMENT
  84. C
  85. C IL Y A INS STRUCTURES AYANT DES CARACTERISTIQUES DIFFERENTES
  86. C IDEN CONTIENT LEUR NUMERO D'ORDRE DANS MNREFE
  87. C
  88. SEGMENT ITRAV(INS)
  89. CHARACTER *72 ITEX
  90. LOGICAL TRACTI,TORSIO
  91. C
  92. EPS=1.D-3
  93. IF (IIMPI.EQ.1) THEN
  94. WRITE(IOIMP,*) ' DEBUT DE ELFGR2 '
  95. END IF
  96. MNREFE=KNREFE
  97. MDEN=NREDEN
  98. NSTR=NREFE(/2)
  99. MCARA=NRECA
  100. LCAR=CARA(/1)/NSTR
  101. IF(M.EQ.0) M=NPAS
  102. TMAX=M*DELTAT
  103. C
  104. C RECHERCHE DES FONCTIONS DE GREEN
  105. C
  106. MEVOLL=KGREEN
  107. SEGACT MEVOLL
  108. NBEL=IEVOLL(/1)
  109. IF(MOD(NBEL,28).NE.0) THEN
  110. C *** IL MANQUE DES FONCTIONS DE GREEN
  111. CALL ERREUR(388)
  112. SEGDES MEVOLL
  113. RETURN
  114. ENDIF
  115. INS=IDEN(/1)
  116. SEGINI ITRAV
  117. DO 20 NB=1,NBEL
  118. KEVOLL=IEVOLL((NB-1)*28+1)
  119. SEGACT KEVOLL
  120. MLREEL=IPROGX
  121. SEGACT MLREEL
  122. DT=PROG(2)-PROG(1)
  123. IL=PROG(/1)
  124. TT=PROG(IL)
  125. SEGDES MLREEL
  126. DT2=DT*0.999999999
  127. IF (DELTAT.LT.DT2 .OR. (INT(DELTAT/DT)*DT).LT.DT2) THEN
  128. CALL ERREUR(389)
  129. SEGDES KEVOLL
  130. SEGDES MEVOLL
  131. RETURN
  132. END IF
  133. IF(TMAX .GT. TT) THEN
  134. C *** LA DUREE DU CALCUL EST TROP GRANDE POUR LES FONCTIONS DE GREEN
  135. CALL ERREUR(390)
  136. SEGDES KEVOLL
  137. SEGDES MEVOLL
  138. RETURN
  139. ENDIF
  140. ITEX=KEVTEX
  141. READ (ITEX(6:17),FMT='(1PE12.5)') DLL
  142. READ (ITEX(24:35),FMT='(1PE12.5)') CTC
  143. READ (ITEX(43:54),FMT='(1PE12.5)') RTC
  144. SEGDES KEVOLL
  145. KEVOLL=IEVOLL((NB-1)*28+3)
  146. SEGACT KEVOLL
  147. ITEX=KEVTEX
  148. READ (ITEX(24:35),FMT='(1PE12.5)') CTO
  149. READ (ITEX(43:54),FMT='(1PE12.5)') RTO
  150. SEGDES KEVOLL
  151. KEVOLL=IEVOLL((NB-1)*28+5)
  152. SEGACT KEVOLL
  153. ITEX=KEVTEX
  154. READ (ITEX(43:54),FMT='(1PE12.5)') RFZ
  155. SEGDES KEVOLL
  156. KEVOLL=IEVOLL((NB-1)*28+10)
  157. SEGACT KEVOLL
  158. ITEX=KEVTEX
  159. READ (ITEX(43:54),FMT='(1PE12.5)') RFY
  160. SEGDES KEVOLL
  161. C
  162. C BOUCLE SUR LES ELEMENTS------------------------------
  163. C
  164. DO 10 IN=1,INS
  165. IF(ITRAV(IN).EQ.0) THEN
  166. NS=IDEN(IN)
  167. NCA=LCAR*(NS-1)
  168. DIF=ABS(1.D0-DLL/CARA(NCA+1))
  169. IF(DIF.GT.EPS) GOTO 10
  170. C DIF=ABS(1.D0-CTC/CARA(NCA+6))
  171. C IF(DIF.GT.EPS) GOTO 10
  172. DIF=ABS(1.D0-RTC/CARA(NCA+2))
  173. IF(DIF.GT.EPS) GOTO 10
  174. C DIF=ABS(1.D0-CTO/CARA(NCA+7))
  175. C IF(DIF.GT.EPS) GOTO 10
  176. DIF=ABS(1.D0-RTO/CARA(NCA+3))
  177. IF(DIF.GT.EPS) GOTO 10
  178. DIF=ABS(1.D0-RFY/CARA(NCA+4))
  179. IF(DIF.GT.EPS) GOTO 10
  180. DIF=ABS(1.D0-RFZ/CARA(NCA+5))
  181. IF(DIF.GT.EPS) GOTO 10
  182. ITRAV(IN)=NB
  183. GOTO 20
  184. ENDIF
  185. 10 CONTINUE
  186. 20 CONTINUE
  187. DO 30 IN=1,INS
  188. IF(ITRAV(IN).EQ.0) THEN
  189. C *** IL MANQUE LES FONCTIONS DE GREEN DE LA SOUS-STRUCTURE
  190. NS=IDEN(IN)
  191. INTERR(1)=NREFE(2,NS)
  192. CALL ERREUR(391)
  193. ENDIF
  194. 30 CONTINUE
  195. IF(IERR.EQ.2) THEN
  196. SEGSUP ITRAV
  197. SEGDES MEVOLL
  198. RETURN
  199. ENDIF
  200. C
  201. C CREATION DES BLOCS ANBN
  202. C
  203. IF(NTANBN.GT.MAXBLO) THEN
  204. C *** TAILLE DU CALCUL TROP IMPORTANTE
  205. CALL ERREUR(382)
  206. RETURN
  207. ENDIF
  208. LANBN=MAXBLO/NTANBN
  209. LANBND=LANBN
  210. NSGA=(M-1)/LANBN+1
  211. SEGINI MANBN
  212. KANBN=MANBN
  213. DO 40 K=1,NSGA
  214. IF(K.EQ.NSGA) LANBN=M-(NSGA-1)*LANBN
  215. SEGINI ANBN
  216. SEGDES ANBN
  217. KAB(K)=ANBN
  218. 40 CONTINUE
  219. LANBN=LANBND
  220. C
  221. C CREATION DES BLOCS DNCN
  222. C
  223. IF(NIDNCN.GT.MAXBLO) THEN
  224. C *** TAILLE DU CALCUL TROP IMPORTANTE
  225. CALL ERREUR(382)
  226. RETURN
  227. ENDIF
  228. LDNCN=MAXBLO/NIDNCN
  229. MPAS=NPAS
  230. IF(M.NE.NPAS) THEN
  231. C TRONCATURE DU PRODUIT DE CONVOLUTION ( MEMOIRE GLISSANT PAR BLOC )
  232. MMPAS=M+LDNCN
  233. IF(NPAS.GT.MMPAS) MPAS=MMPAS
  234. ENDIF
  235. NSGD=MPAS/LDNCN+1
  236. SEGINI MDNCN
  237. KDNCN=MDNCN
  238. DO 50 K=1,NSGD
  239. SEGINI DNCN
  240. CALL ZERO(DC,NIDNCN,LDNCN)
  241. SEGDES DNCN
  242. KDC(K)=DNCN
  243. 50 CONTINUE
  244. IF (IIMPI .EQ. 1801) THEN
  245. WRITE(IOIMP,*) 'NIDNC= ',NIDNCN
  246. WRITE(IOIMP,*) 'MAXBLO= ',MAXBLO
  247. WRITE(IOIMP,*) 'NB DE BLOCS ',NSGD
  248. END IF
  249. C
  250. C BOUCLE SUR LES BLOCS
  251. C
  252. LDEC=0
  253. DO 100 K=1,NSGA
  254. ANBN=KAB(K)
  255. SEGACT ANBN
  256. LANBN=AB(/2)
  257. C
  258. C--------BOUCLE SUR LES ELEMENTS------------------------------
  259. C
  260. DO 90 IN=1,INS
  261. NB=ITRAV(IN)
  262. NS=IDEN(IN)
  263. NRG=NREFE(7,NS)-1
  264. *
  265. DO 80 J=1,28
  266. KEVOLL=IEVOLL((NB-1)*28+J)
  267. SEGACT KEVOLL
  268. MLREEL=IPROGX
  269. SEGACT MLREEL
  270. DT=PROG(2)-PROG(1)
  271. DIF=ABS(1.D0-DT/DELTAT)
  272. SEGDES MLREEL
  273. MLREEL=IPROGY
  274. SEGACT MLREEL
  275. IF (DIF.LT.EPS) THEN
  276. DO 60 L=1,LANBN
  277. AB(NRG+J,L)=PROG(L+LDEC)
  278. 60 CONTINUE
  279. ELSE
  280. DO 70 L=1,LANBN
  281. T=DELTAT*DBLE(L+LDEC)
  282. N=INT(T/DT)
  283. ALPHA=(T-DBLE(N)*DT)/DT
  284. N1=N+1
  285. N2=N+2
  286. AB(NRG+J,L)=(PROG(N2)-PROG(N1))*ALPHA+PROG(N1)
  287. 70 CONTINUE
  288. END IF
  289. SEGDES MLREEL
  290. SEGDES KEVOLL
  291. 80 CONTINUE
  292. *
  293. IF(IIMPI.EQ.1801)THEN
  294. WRITE(IOIMP,*) ' STRUCTURE ',NS
  295. WRITE(IOIMP,1000) K
  296. 1000 FORMAT(1X,//I5,'IEME BLOC DES TERMES DES MATRICES ANBN'/)
  297. DO 120 J=1,28
  298. WRITE(IOIMP,1001) (J,AB(NRG+J,LL2),LL2=1,LANBN)
  299. 1001 FORMAT(1X,5(I5,1X,1PE12.5))
  300. 120 CONTINUE
  301. ENDIF
  302. 90 CONTINUE
  303. SEGDES ANBN
  304. LDEC=LDEC+LANBN
  305. 100 CONTINUE
  306. C
  307. C BOUCLE SUR LES ELEMENTS POUR DETERMINER CEUX QUI SONT RIGIDES
  308. C
  309. DO 110 NS=1,NSTR
  310. NCA=LCAR*(NS-1)
  311. DLL=CARA(NCA+1)
  312. CTC=CARA(NCA+6)
  313. WRITE(IOIMP,*)' CTC= ',CTC
  314. DTL=DLL/CTC
  315. IF(DELTAT.GT.DTL) THEN
  316. NREFE(8,NS)=1
  317. GOTO 110
  318. ENDIF
  319. CTO=CARA(NCA+7)
  320. DTL=DLL/CTO
  321. IF(DELTAT.GT.DTL) THEN
  322. NREFE(8,NS)=1
  323. GOTO 110
  324. ENDIF
  325. RFY=CARA(NCA+4)
  326. DTL=DLL*DLL/(3.D0*CTC*RFY*XPI)
  327. IF(DELTAT.GT.DTL) THEN
  328. NREFE(8,NS)=1
  329. GOTO 110
  330. ENDIF
  331. RFZ=CARA(NCA+5)
  332. DTL=DLL*DLL/(3.D0*CTC*RFZ*XPI)
  333. IF(DELTAT.GT.DTL) THEN
  334. NREFE(8,NS)=1
  335. GOTO 110
  336. ENDIF
  337. 110 CONTINUE
  338. WRITE(IOIMP,*) ' NREFE ',(NREFE(8,NS),NS=1,NSTR)
  339. SEGSUP ITRAV
  340. SEGDES MEVOLL
  341. IF (IIMPI.EQ.1) THEN
  342. WRITE(IOIMP,*)' FIN DE ELFGR2 '
  343. END IF
  344. RETURN
  345. END
  346.  
  347.  
  348.  
  349.  
  350.  

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