Télécharger supgef.eso

Retour à la liste

Numérotation des lignes :

supgef
  1. C SUPGEF SOURCE CB215821 26/08/24 21:18:26 12622
  2. SUBROUTINE SUPGEF(FN,GR,PG,XYZ,HR,PGSQ,RPG,AJ,
  3. & NES,NP,NPG,IAXI,XCOOR,
  4. & LE,KDEB,KFIN,LRV,IDCEN,CMD,IKOMP,
  5. & TN,IPADT,UN,IPADU,NPTD,ANUK,
  6. & WT,WS,HK,PGSK,RPGK,AJK,AIRE,UIL,DUIL,
  7. & DTM1,DT,DTT1,DTT2,DIAEL,NUEL)
  8. C--------------------------------------------------------------------
  9. C Calcul des fonctions tests associées à la formulation Eléments
  10. C Finis Petrov-Galerkin afin de stabiliser les termes de convection.
  11. C On en profite pour calculer des temps caractéristiques.
  12. C--------------------------------------------------------------------
  13. C Cette subroutine étant écrite en fortran pur, certains arguments
  14. C servent uniquement au dimensionnement des tableaux.
  15. C Afin de doper les calculs, on decoupe la boucle sur les éléments
  16. C par paquets afin de bénéficier à fond de la vectorisation.
  17. C--------------------------------------------------------------------
  18. C
  19. C--------------------------
  20. C Paramètre Entrée/Sortie :
  21. C--------------------------
  22. C
  23. C /S FN : Fonction de forme associé à la transformation géométrique
  24. C /S GR : Gradient de FN dans l'élément de référence
  25. C /S PG : Poids d'intégration associé à chaque point de Gauss
  26. C /S XYZ : Coordonnées des sommets de l'élément
  27. C /S AJ : Jacobien
  28. C /S HR : Gradient des fonctions de forme dans l'élément courant
  29. C /S PGSQ : Produit du poids d'intégration par detJ
  30. C /S RPG : Rayon associé à chaque point de Gauss (cas axisymétrique)
  31. C
  32. C E/ NES : Dimension en espace du problème traité (2 en 2D et 3 en 3D)
  33. C E/ NP : Nombre de points support de ddl pour l'élément considéré
  34. C E/ NPG : Nombre de points de Gauss
  35. C E/ IAXI : Précise l'axe de symétrie dans le cas axisymétrique
  36. C (en fait l'axe de symétrie est toujours y -> IAXI=2)
  37. C E/ XCOOR : Coordonnées de l'ensemble des points (voir SMCOORD.INC)
  38. C Petrov-Galerkin choisi pour stabiliser la convection
  39. C Petrov-Galerkin choisi pour stabiliser la convection
  40. C /S HK : Gradient de FN dans l'élément courant
  41. C /S PGSK : Produit du poids d'intégration par detJ
  42. C /S RPGK : Rayon associé à chaque point de Gauss (cas axisymétrique)
  43. C /S AIRE : Volume de chaque élément
  44. C /S AJK : Jacobien
  45. C /S UIL : Vecteur vitesse aux points de Gauss
  46. C /S DUIL : Gradient du champ de vitesse
  47. C (la divergence est obtenue par sommation)
  48. C E/ KDEB : Indice du début de la fenetre
  49. C E/ KFIN : Indice de fin de la fenetre
  50. C E/ LRV : Dimension de la fenetre
  51. C E/ TN : Inconnue transportée au pas de temps précédent
  52. C E/ IPADT : Correspondance numérotation locale et globale pour les
  53. C points SOMMET : J=LECT(I) : le point numéro I est rangé
  54. C en Jème position pour le CHAMP TN
  55. C E/ UN : Champ de vitesse transportant aux sommets des éléments
  56. C E/ IPADU : Correspondance numérotation locale et globale pour les
  57. C points SOMMET : J=LECT(I) : le point numéro I est rangé
  58. C en Jème position pour le CHAMP UN
  59. C E/ NPTD : Nombre de points sous-tendant le spg associé à UN
  60. C E/ ANUK : Champ contenant le coefficient de diffusion (diffusivité
  61. C pour l'énergie, rapport viscosité sur densité pour qdm)
  62. C E/ IDCEN : Contient le schéma associé au terme convectif
  63. C (1=CENTREE 2=SUPGDC 3=SUPG 4=TVISQUEUX 5=CNG)
  64. C E/ DTM1 : Pas de temps imposé
  65. C E/S DT : Pas de temps
  66. C /S DTT1 : Temps caractéristique associé à la diffusion/convection
  67. C /S DTT2 : Temps caractéristique associé à la diffusion
  68. C /S DIAEL : Longueur carac. de l'élément le plus pénalisant pour dt
  69. C /S NUEL : Numéro de l'élément le plus pénalisant pour dt
  70. C
  71. C Variable locale
  72. C
  73. C DDUIL : gradient de chaque composante de la vitesse au pt Gauss
  74. C pour un élément.
  75. C
  76. C RTNL : valeur de TN au point de gauss
  77. C
  78. C--------------------------------------------------------------------
  79. IMPLICIT INTEGER(I-N)
  80. IMPLICIT REAL*8 (A-H,O-Z)
  81.  
  82. -INC PPARAM
  83. -INC CCOPTIO
  84. -INC CCREEL
  85. DIMENSION IPADT(*),IPADU(*),LE(NP,*)
  86.  
  87. DIMENSION XCOOR(*)
  88. DIMENSION UN(NPTD,IDIM),TN(*)
  89. DIMENSION ANUK(LRV)
  90.  
  91. DIMENSION FN(NP,NPG),GR(IDIM,NP,NPG),PG(NPG),XYZ(IDIM,NP)
  92. DIMENSION HR(IDIM,NP,NPG),PGSQ(NPG),RPG(NPG),AJ(IDIM,IDIM,NPG)
  93. DIMENSION WT(LRV,NP,NPG),WS(LRV,NP,NPG),HK(LRV,IDIM,NP,NPG)
  94. DIMENSION PGSK(LRV,NPG),RPGK(LRV,NPG),AIRE(LRV)
  95. DIMENSION AJK(LRV,IDIM,IDIM,NPG)
  96. C
  97. DIMENSION UIL(LRV,IDIM,NPG),DUIL(LRV,IDIM,NPG)
  98. DIMENSION UPIL(3),GRAD(3)
  99. DATA ACCT,ACC2/1.,1./ , ipas/0/
  100. C
  101. REAL*8 DDUIL(3,3),RTNL
  102. C
  103. C
  104. C- Pour les éléments de la fenetre KDEB:KFIN initialisations des
  105. C- données associées à l'élément fini utilisé : fonctions de forme,
  106. C- gradients des fonctions de forme, aire de l'élément, poids des
  107. C- points de Gauss et rayon des points de Gauss pour le cas axi.
  108. C
  109. C? write(6,*)'UN(NPTD,IDIM) ',nptd,idim
  110. C? write(6,1002)un
  111. XPETI=1.D-30
  112. CALL INITD(UPIL,3,0.D0)
  113.  
  114. DO 5020 K=KDEB,KFIN
  115. KP = K-KDEB+1
  116.  
  117. DO 20 I=1,NP
  118. J = LE(I,K)
  119. DO 10 N=1,IDIM
  120. XYZ(N,I) = XCOOR((J-1)*(IDIM+1)+N)
  121. 10 CONTINUE
  122. 20 CONTINUE
  123.  
  124. CALL CALJBR(FN,GR,PG,XYZ,HR,PGSQ,RPG,
  125. & NES,IDIM,NP,NPG,IAXI,AIRE(KP),AJ,SGN)
  126.  
  127. DO 8936 N=1,IDIM
  128. DO 8935 M=1,IDIM
  129. DO 8934 L=1,NPG
  130. AJK(KP,M,N,L)=AJ(M,N,L)
  131. 8934 CONTINUE
  132. 8935 CONTINUE
  133. 8936 CONTINUE
  134.  
  135. CALL CALJTR(GR,XYZ,NES,IDIM,NP,NPG,AJ)
  136.  
  137. C
  138. DO 5030 L=1,NPG
  139.  
  140. DO 40 N=1,IDIM
  141. DO 30 I=1,NP
  142. HK(KP,N,I,L) = HR(N,I,L)
  143. 30 CONTINUE
  144. 40 CONTINUE
  145.  
  146. PGSK(KP,L) = PGSQ(L)
  147. RPGK(KP,L) = RPG(L)
  148. C
  149. C- Calcul en chaque élément, pour chaque point de Gauss
  150. C- UIL : Vitesse
  151. C
  152. DO 230 N=1,IDIM
  153. DUIL(KP,N,L) = XPETI
  154. UIL(KP,N,L) = XPETI
  155. DO 210 I=1,NP
  156. NF = IPADU(LE(I,K))
  157. UIL(KP,N,L) = UIL(KP,N,L) + UN(NF,N)*FN(I,L)
  158. DUIL(KP,N,L) = DUIL(KP,N,L) + UN(NF,N)*HK(KP,N,I,L)
  159. 210 CONTINUE
  160. 230 CONTINUE
  161. C
  162. C Dans le cas d'une formulation conservative du transport,
  163. C La vitesse de transport réelle est d(uT)/d(T). Cela revient
  164. C à rajouter le terme T (dU/dT) à la vitesse U.
  165. C Le terme dU/dT peut s'écrite pour chaque composante :
  166. C dx/dT dU/dx + dy/dT dU/dy
  167. C Lorsque dx/dT ou dy/dT est infini, cela signifie que les variables
  168. C sont indépendantes de T. Le terme correspondant doit alors être
  169. C éliminé du caclul.
  170. C
  171. IF (IDCEN .EQ. 2 .OR. IDCEN .EQ. 3) THEN
  172. IF (IKOMP .EQ. 1 .OR. IKOMP .EQ. 2) THEN
  173. C
  174. C Evaluation du gradient de TN.
  175. C
  176. DO 171 N=1,IDIM
  177. GRAD(N)=0.D0
  178. DO 172 I=1,NP
  179. NT = IPADT(LE(I,K))
  180. GRAD(N) = GRAD(N) + TN(NT) *HK(KP,N,I,L)
  181. 172 CONTINUE
  182. IF (ABS(GRAD(N)) .LT. 1.D-10) THEN
  183. C La variable x ou y est indépendante de T. On met le
  184. C gradient à l'infini pour le déconnecter des calculs
  185. C suivants.
  186. GRAD(N) = 1.D+100
  187. ENDIF
  188. 171 CONTINUE
  189. * WRITE(*,*) 'GRADT', GRAD(1),GRAD(2)
  190. C
  191. C On évalue le gradient de chaque composante de la vitesse.
  192. C
  193. DO 8937 N=1,IDIM
  194. DO 231 M=1,IDIM
  195. DDUIL(N,M) = XPETI
  196. DO 211 I=1,NP
  197. NF = IPADU(LE(I,K))
  198. DDUIL(N,M) = DDUIL(N,M) + UN(NF,N)*HK(KP,M,I,L)
  199. 211 CONTINUE
  200. 231 CONTINUE
  201. 8937 CONTINUE
  202. C
  203. C Correction en axisymetrique
  204. C
  205. C? IF (IAXI .EQ. 1) THEN
  206. C? DO 212 I=1,NP
  207. C? NF = IPADU(LE(I,K))
  208. C? DDUIL(1,1)=DDUIL(1,1)+(UN(NF,1)*FN(I,L)/RPGK(KP,L))
  209. C? 212 CONTINUE
  210. C? ENDIF
  211. C
  212. C On évalue la variable scalaire TN au point de gauss L
  213. C
  214. RTNL=0.D0
  215. DO 173 I=1,NP
  216. NT = IPADT(LE(I,K))
  217. RTNL = RTNL + TN(NT) * FN(I,L)
  218. 173 CONTINUE
  219. * WRITE(*,*) 'RTNL', RTNL
  220. C
  221. C Modification de la vitesse U
  222. C
  223. IF (IKOMP .EQ. 1) THEN
  224. c decentrement de UN*TN en UN + TN*(dUN/dTN).
  225. DO 8938 N=1,IDIM
  226. DO 174 M=1,IDIM
  227. UIL(KP,N,L) = UIL(KP,N,L)+RTNL*(DDUIL(N,M)/GRAD(M))
  228. 174 CONTINUE
  229. 8938 CONTINUE
  230. ELSE
  231. c décentrement de JN=UN*TN en dJN/dTN
  232. DO 8939 N=1,IDIM
  233. DO 175 M=1,IDIM
  234. UIL(KP,N,L) = DDUIL(N,M)/GRAD(M)
  235. 175 CONTINUE
  236. 8939 CONTINUE
  237. ENDIF
  238. C
  239. ENDIF
  240. ENDIF
  241. C
  242. C- Calcul pour chaque point de Gauss de chaque élément de :
  243. C- /L UML : Norme de la vitesse aux points de Gauss
  244. C- BM : module d'un temps caractéristique associé à la convection
  245. C- XMB : caractéristique géométrique 1/2 He
  246. C
  247.  
  248. C
  249. BMI=0.D0
  250. UL=0.D0
  251. DO 310 N=1,IDIM
  252. UHAT=0.D0
  253. DO 311 M=1,IDIM
  254. UHAT=UHAT+AJ(M,N,L)*UIL(KP,M,L)
  255. 311 CONTINUE
  256.  
  257. BMI=BMI+UHAT*UHAT
  258. UL=UL+UIL(KP,N,L)*UIL(KP,N,L)
  259. 310 CONTINUE
  260. BM=SQRT(BMI) + XPETI
  261. UML=SQRT(UL)
  262. XMB=UML/BM
  263.  
  264.  
  265. C
  266. C
  267. C- Calcul en chaque élément, pour chaque point de Gauss de
  268. C- GRAD : vecteur unitaire porté par le gradient du champ scalaire
  269. C- UP : projection de la vitesse sur la direction donnée par GRAD
  270. C- UPIL : vecteur UP*GRAD aux points de Gauss
  271. C- pour l'option SUPGDC
  272. C
  273. IF (IDCEN.EQ.2) THEN
  274. DO 8940 N=1,IDIM
  275. GRAD(N)=0.D0
  276. DO 170 I=1,NP
  277. NT = IPADT(LE(I,K))
  278. GRAD(N) = GRAD(N) + TN(NT) *HK(KP,N,I,L)
  279. 170 CONTINUE
  280. 8940 CONTINUE
  281.  
  282. AX=0.D0
  283. DO 2301 M=1,IDIM
  284. AX = AX + GRAD(M)*GRAD(M)
  285. 2301 CONTINUE
  286. AX = SQRT(AX) + XPETI
  287.  
  288. UPL=0.D0
  289. DO 2302 N=1,IDIM
  290. GRAD(N) = GRAD(N) / AX
  291. UPL = UPL + GRAD(N) * UIL(KP,N,L)
  292. 2302 CONTINUE
  293.  
  294. DO 2303 N=1,IDIM
  295. UPIL(N) = GRAD(N) * UPL
  296. 2303 CONTINUE
  297.  
  298. C
  299. BPI=0.D0
  300. DO 410 N=1,IDIM
  301. UPHAT=0.D0
  302. DO 411 M=1,IDIM
  303. UPHAT=UPHAT+AJ(M,N,L)*UPIL(M)
  304. 411 CONTINUE
  305.  
  306. BPI=BPI+UPHAT*UPHAT
  307. 410 CONTINUE
  308. BP=SQRT(BPI) + XPETI
  309. XPB=UPL/BP
  310.  
  311. ENDIF
  312. C
  313. C-----------------------------
  314. C- DECENTREMENT suivant IDCEN
  315. C-----------------------------
  316. C On calcule dans chaque cas TO1 et TO2 ainsi que le tenseur
  317. C associé à la viscosité numérique afin d'évaluer le pas de
  318. C temps de stabilité pour les schémas explicites.
  319. C
  320. C----------
  321. C CENTREE :
  322. C----------
  323. IF (IDCEN.EQ.1) THEN
  324. SI1 = 0.D0
  325. SI2 = 0.D0
  326. TO1 = 0.D0
  327. TO2 = 0.D0
  328. C---------
  329. C SUPGDC : Base théorique dans : A New FE formulation for computational
  330. C fluid dynamics, II Beyond SUPG, HUGHES et al., in Comp.Meth.Appl.Mech.
  331. C Eng., vol 54, pp 341-355 (1986).
  332. C---------
  333. ELSEIF (IDCEN.EQ.2) THEN
  334. SI1 = 1.D0
  335. SI2 = 1.D0
  336. C
  337. C- Approximation "doublement asymptotique" basée sur la vitesse moyenne
  338. C- HMK : Distance basé sur la vitesse moyenne
  339. C- ALFA : Peclet de maille basé sur la vitesse moyenne
  340. C
  341. ALFA = UML * XMB / (ANUK(KP)+XPETI) / 3.D0
  342. AKSI = MIN(1.D0,ALFA)
  343. CCT = AKSI / BM * ACCT * CMD
  344. C
  345. C- Approximation "doublement asymptotique" basée sur la projection de
  346. C- la vitesse sur le gradient du champ scalaire
  347. C- HMK : Distance basée sur la vitesse projetée
  348. C- ALFA : Peclet de maille basé sur la vitesse projetée
  349. C
  350. ALFA = UPL * XPB / (ANUK(KP)+XPETI) / 3.D0
  351. AKSI = MIN(1.D0,ALFA)
  352. CCP = AKSI / BP
  353. C
  354. CPT = CCP - CCT
  355. CC2 = MAX(0.D0,CPT) * ACC2 * CMD
  356. C
  357. TO1 = CCT
  358. TO2 = CC2
  359. C-------
  360. C SUPG :
  361. C-------
  362. ELSEIF (IDCEN.EQ.3) THEN
  363. SI1 = 1.D0
  364. SI2 = 1.D0
  365. C
  366. C- Approximation "doublement asymptotique" basée sur la vitesse moyenne
  367. C- HMK : Distance basé sur la vitesse moyenne
  368. C- ALFA : Peclet de maille basé sur la vitesse moyenne
  369. C
  370. ALFA = UML * XMB / (ANUK(KP)+XPETI) / 3.D0
  371. AKSI = MIN(1.D0,ALFA)
  372. CCT = AKSI / BM * ACCT * CMD
  373. C
  374. TO1 = CCT
  375. TO2 = 0.D0
  376. C-------------------
  377. C Tenseur Visqueux :
  378. C-------------------
  379. ELSEIF (IDCEN.EQ.4) THEN
  380. SI1 =-1.D0
  381. SI2 = 1.D0
  382. DT19 = DTM1 * 0.5D0
  383. TO1 = DT19
  384. TO2 = 0.D0
  385. C-----------------------------
  386. C Crank Nicholson généralisé :
  387. C-----------------------------
  388. ELSEIF (IDCEN.EQ.5) THEN
  389. SI1 =-1.D0
  390. SI2 = 1.D0
  391. DT19 = DTM1/6.D0
  392. TO1 = DT19
  393. TO2 = 0.D0
  394. ENDIF
  395. C
  396. C---------------------------
  397. C Pas de temps de stabilité
  398. C---------------------------
  399. C
  400. C La viscosité utilisée dans l'évaluation des pas de temps de stabilité
  401. C explicite ajoute à la viscosité physique la viscosité numérique :
  402. C DT1 : Correspond à une CFL de 1 et un Peclet de maille de 1
  403. C CFL=1 -> dx=Vdt |
  404. C |-> dt=2D/V2
  405. C Pe=1 -> dx=2D/V |
  406. C DT2 : Correspond au pas de temps de stabilité lié à la diffusion
  407. C FOU=1 -> dt=0.5 dx2/D
  408. C
  409. IF (IDCEN.NE.5) THEN
  410. DT0 = DT
  411. C DT1 = 2.D0 /
  412. C & ( UIL(KP,1,L)*UIL(KP,1,L)/(ANUK(KP)+XPETI)
  413. C & + UIL(KP,2,L)*UIL(KP,2,L)/(ANUK(KP)+XPETI) )
  414. C DT2 = 0.5D0 /
  415. C & ( ANUK(KP)*AL2(KP)
  416. C & + ANUK(KP)*AH2(KP) )
  417. * faut il provoquer une erreur?
  418. if (abs(uml).lt.xpetit) then
  419. dt1=xgrand
  420. else
  421. DT1 = 2.D0 * ANUK(KP) / (UML * UML)
  422. endif
  423. DT2 = DT1
  424. C
  425. IF (DT1.LT.DT) DT=DT1
  426. IF (DT2.LT.DT) DT=DT2
  427. IF (DT.NE.DT0) THEN
  428. DTT1 = DT1
  429. DTT2 = DT2
  430. DIAEL = XMB * 2.D0
  431. NUEL = K
  432. ENDIF
  433. ENDIF
  434. C
  435. C---------------------------------------------------
  436. C Fonction test pour la formulation Petrov-Galerkin
  437. C---------------------------------------------------
  438. C Ce qui est diffusion numérique en explicite se transforme en
  439. C ajoutant de la viscosité numérique (Tenseurs visqueux et CNG).
  440. C WS : Fonction test pour la partie explicite
  441. C
  442. IF(IDIM.EQ.2)THEN
  443. DO 2050 I=1,NP
  444. WT(KP,I,L) = FN(I,L) + SI1 *
  445. & (TO1*(UIL(KP,1,L)*HK(KP,1,I,L)+UIL(KP,2,L)*HK(KP,2,I,L))
  446. & +TO2*(UPIL(1)*HK(KP,1,I,L)+UPIL(2)*HK(KP,2,I,L)))
  447. WS(KP,I,L) = FN(I,L) + SI2 *
  448. & (TO1*(UIL(KP,1,L)*HK(KP,1,I,L)+UIL(KP,2,L)*HK(KP,2,I,L))
  449. & +TO2*(UPIL(1)*HK(KP,1,I,L)+UPIL(2)*HK(KP,2,I,L)))
  450. 2050 CONTINUE
  451. C
  452. ELSEIF(IDIM.EQ.3)THEN
  453. DO 2051 I=1,NP
  454. WT(KP,I,L) = FN(I,L) + SI1 *
  455. & (TO1*(UIL(KP,1,L)*HK(KP,1,I,L)+UIL(KP,2,L)*HK(KP,2,I,L)+
  456. & UIL(KP,3,L)*HK(KP,3,I,L) )
  457. & +TO2*(UPIL(1)*HK(KP,1,I,L)+UPIL(2)*HK(KP,2,I,L)+
  458. & UPIL(3)*HK(KP,3,I,L) ))
  459.  
  460. WS(KP,I,L) = FN(I,L) + SI2 *
  461. & (TO1*(UIL(KP,1,L)*HK(KP,1,I,L)+UIL(KP,2,L)*HK(KP,2,I,L)+
  462. & UIL(KP,3,L)*HK(KP,3,I,L))
  463. & + TO2*(UPIL(1)*HK(KP,1,I,L)+UPIL(2)*HK(KP,2,I,L)+
  464. & UPIL(3)*HK(KP,3,I,L) ))
  465. 2051 CONTINUE
  466. ENDIF
  467. C
  468. C- Si on est en conservatif, on rétablit les valeurs de la vitesse
  469. C de transport qui ont été modifiées car elles sont utilisées
  470. C dans d'autres subroutines ultérieures.
  471. C
  472. IF (IKOMP .EQ. 1) THEN
  473. DO 235 N=1,IDIM
  474. UIL(KP,N,L) = XPETI
  475. DO 215 I=1,NP
  476. NF = IPADU(LE(I,K))
  477. UIL(KP,N,L) = UIL(KP,N,L) + UN(NF,N)*FN(I,L)
  478. 215 CONTINUE
  479. 235 CONTINUE
  480. ENDIF
  481. C
  482. 5030 CONTINUE
  483.  
  484. 5020 CONTINUE
  485.  
  486. RETURN
  487. 1001 FORMAT(20(1X,I5))
  488. 1002 FORMAT(10(1X,1PE11.4))
  489. END
  490.  
  491.  
  492.  
  493.  
  494.  
  495.  
  496.  

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