Télécharger ksupg.eso

Retour à la liste

Numérotation des lignes :

ksupg
  1. C KSUPG SOURCE CB215821 26/08/24 21:17:06 12622
  2. C KSUPG SOURCE MAGN 97/07/19 21:18:18 2765
  3. SUBROUTINE KSUPG(FN,GR,PG,XYZ,HR,PGSQ,RPG,
  4. & NES,NP,NPG,IAXI,XCOOR,
  5. & WT,WS,HK,PGSK,RPGK,AIRE,
  6. & UMJ,DUMJ,KDEB,KFIN,LRV,NPX,NPGX,
  7. & TN,IPADT,UN,IPADU,NPTD,NEL,ANUK,
  8. & IDCEN,LE,
  9. & AL,AH,AP,
  10. & DTM1,DT,DTT1,DTT2,DIAEL,NUEL)
  11. C--------------------------------------------------------------------
  12. C Calcul des fonctions tests associées à la formulation Eléments
  13. C Finis Petrov-Galerkin afin de stabiliser les termes de convection.
  14. C On en profite pour calculer des temps caractéristiques.
  15. C--------------------------------------------------------------------
  16. C Cette subroutine étant écrite en fortran pur, certains arguments
  17. C servent uniquement au dimensionnement des tableaux.
  18. C Afin de doper les calculs, on decoupe la boucle sur les éléments
  19. C par paquets afin de bénéficier à fond de la vectorisation.
  20. C--------------------------------------------------------------------
  21. C
  22. C--------------------------
  23. C Paramètre Entrée/Sortie :
  24. C--------------------------
  25. C
  26. C /S FN : Fonction de forme associé à la transformation géométrique
  27. C /S GR : Gradient de FN dans l'élément de référence
  28. C /S PG : Poids d'intégration associé à chaque point de Gauss
  29. C /S XYZ : Coordonnées des sommets de l'élément
  30. C /S HR : Gradient des fonctions de forme dans l'élément courant
  31. C /S PGSQ : Produit du poids d'intégration par detJ
  32. C /S RPG : Rayon associé à chaque point de Gauss (cas axisymétrique)
  33. C
  34. C E/ NES : Dimension en espace du problème traité (2 en 2D et 3 en 3D)
  35. C E/ NP : Nombre de points support de ddl pour l'élément considéré
  36. C E/ NPG : Nombre de points de Gauss
  37. C E/ IAXI : Précise l'axe de symétrie dans le cas axisymétrique
  38. C (en fait l'axe de symétrie est toujours y -> IAXI=2)
  39. C E/ XCOOR : Coordonnées de l'ensemble des points (voir SMCOORD.INC)
  40. C Petrov-Galerkin choisi pour stabiliser la convection
  41. C Petrov-Galerkin choisi pour stabiliser la convection
  42. C /S HK : Gradient de FN dans l'élément courant
  43. C /S PGSK : Produit du poids d'intégration par detJ
  44. C /S RPGK : Rayon associé à chaque point de Gauss (cas axisymétrique)
  45. C /S AIRE : Volume de chaque élément
  46. C /S UMJ : Vitesse servant à la convection en chaque point de Gauss
  47. C /S DUMJ : Gradient de Vitesse servant en formulation conservative
  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/ NPX : Nombre de points maximum par élément
  52. C E/ NPGX : Nombre de points de Gauss maximum
  53. C E/ TN : Inconnue transportée au pas de temps précédent
  54. C E/ IPADT : Correspondance numérotation locale et globale pour les
  55. C points SOMMET : J=LECT(I) : le point numéro I est rangé
  56. C en Jème position pour le CHAMP TN
  57. C E/ UN : Champ de vitesse transportant aux sommets des éléments
  58. C E/ IPADU : Correspondance numérotation locale et globale pour les
  59. C points SOMMET : J=LECT(I) : le point numéro I est rangé
  60. C en Jème position pour le CHAMP UN
  61. C E/ NPTD : Nombre de points sous-tendant le spg associé à UN
  62. C E/ NEL : Nombre de points sous-tendant le spg associé à XXDXDY
  63. C E/ ANUK : Champ contenant le coefficient de diffusion (diffusivité
  64. C pour l'énergie, rapport viscosité sur densité pour qdm)
  65. C E/ IDCEN : Contient le schéma associé au terme convectif
  66. C (1=CENTREE 2=SUPGDC 3=SUPG 4=TVISQUEUX 5=CNG)
  67. C E/ LE : Maillage de la zone considérée
  68. C E/ AL : Première composante de XXDXDY (longueur carac. en x)
  69. C E/ AH : Deuxième composante de XXDXDY (longueur carac. en y)
  70. C E/ AP : Troiième composante de XXDXDY (longueur carac. en z)
  71. C E/ DTM1 : Pas de temps imposé
  72. C E/S DT : Pas de temps
  73. C /S DTT1 : Temps caractéristique associé à la diffusion/convection
  74. C /S DTT2 : Temps caractéristique associé à la diffusion
  75. C /S DIAEL : Longueur carac. de l'élément le plus pénalisant pour dt
  76. C /S NUEL : Numéro de l'élément le plus pénalisant pour dt
  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,NEL)
  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)
  93. DIMENSION WT(LRV,NPX,NPGX),WS(LRV,NPX,NPGX),HK(LRV,3,NPX,NPGX)
  94. DIMENSION PGSK(LRV,NPGX),RPGK(LRV,NPGX),AIRE(LRV)
  95. C
  96. PARAMETER (LRV1=64,NPGX1=64)
  97. DIMENSION AL(LRV),AH(LRV),AP(LRV)
  98. DIMENSION UM(LRV1),UMI(LRV1,3),BMI(LRV1),TOI1(LRV1),TOI2(LRV1)
  99. DIMENSION GRAD(LRV1,3,NPGX1),UMJ(LRV,3,NPG),DUMJ(LRV,3,NPG)
  100. DIMENSION UP(LRV1,NPGX1),UPI(LRV1,3,NPGX1)
  101. DIMENSION BM(LRV1,NPGX1),BP(LRV1,NPGX1)
  102. DIMENSION TO1(LRV1,NPGX1),TO2(LRV1,NPGX1)
  103. DIMENSION CXT(LRV1,NPGX1),CYT(LRV1,NPGX1),CZT(LRV1,NPGX1)
  104. C Pas utilise en mars 2019 : commentaire
  105. C DIMENSION CXY(LRV1,NPGX1),CXZ(LRV1,NPGX1),CYZ(LRV1,NPGX1)
  106. DIMENSION AL2(LRV1),AH2(LRV1),AP2(LRV1),XMB(LRV1)
  107. C
  108. CC0 = 1.D0
  109.  
  110. C Initialisation par CB215821 sinon NAN...
  111. DT =-1.D0
  112. DTT1=-1.D0
  113. DTT2=-1.D0
  114.  
  115. IF (LRV.NE.LRV1) CALL ARRET(0)
  116. IF (NPG.GT.NPGX1) CALL ARRET(0)
  117. C
  118. C- Pour les éléments de la fenetre KDEB:KFIN initialisations des
  119. C- données associées à l'élément fini utilisé : fonctions de forme,
  120. C- gradients des fonctions de forme, aire de l'élément, poids des
  121. C- points de Gauss et rayon des points de Gauss pour le cas axi.
  122. C
  123. DO 100 K=KDEB,KFIN
  124. KP = K - KDEB + 1
  125. DO 20 I=1,NP
  126. J = LE(I,K)
  127. DO 10 N=1,IDIM
  128. XYZ(N,I) = XCOOR((J-1)*(IDIM+1)+N)
  129. 10 CONTINUE
  130. 20 CONTINUE
  131. CALL CALJBC(FN,GR,PG,XYZ,HR,PGSQ,RPG,
  132. & NES,IDIM,NP,NPG,IAXI,AIRE(KP))
  133. C
  134. DO 50 L=1,NPG
  135. DO 40 N=1,IDIM
  136. DO 30 I=1,NP
  137. HK(KP,N,I,L) = HR(N,I,L)
  138. 30 CONTINUE
  139. 40 CONTINUE
  140. PGSK(KP,L) = PGSQ(L)
  141. RPGK(KP,L) = RPG(L)
  142. 50 CONTINUE
  143. 100 CONTINUE
  144. C
  145. C- Initialisations des variables
  146. C
  147. DO 120 N=1,IDIM
  148. DO 110 K=KDEB,KFIN
  149. KP = K - KDEB + 1
  150. UMI(KP,N) = XPETIT
  151. 110 CONTINUE
  152. 120 CONTINUE
  153. C
  154. DO 150 L=1,NPG
  155. DO 140 N=1,IDIM
  156. DO 130 K=KDEB,KFIN
  157. KP = K - KDEB + 1
  158. UMJ(KP,N,L) = XPETIT
  159. DUMJ(KP,N,L) = XPETIT
  160. UPI(KP,N,L) = XPETIT
  161. GRAD(KP,N,L) = XPETIT
  162. 130 CONTINUE
  163. 140 CONTINUE
  164. 150 CONTINUE
  165. C
  166. C- Calcul en chaque élément, pour chaque point de Gauss
  167. C- UMJ : Vitesse
  168. C- GRAD : Gradient de l'inconnue scalaire au pas de temps précédent
  169. C- Le gradient n'est à calculer que pour l'option SUPGDC
  170. C
  171. IF (IDCEN.EQ.2) THEN
  172. DO 190 N=1,IDIM
  173. DO 180 L=1,NPG
  174. DO 170 I=1,NP
  175. DO 160 K=KDEB,KFIN
  176. KP = K - KDEB + 1
  177. NF = IPADU(LE(I,K))
  178. NT = IPADT(LE(I,K))
  179. UMJ(KP,N,L) = UMJ(KP,N,L) + UN(NF,N)*FN(I,L)
  180. DUMJ(KP,N,L) = DUMJ(KP,N,L) + UN(NF,N)*HK(KP,N,I,L)
  181. GRAD(KP,N,L) = GRAD(KP,N,L) + TN(NT) *HK(KP,N,I,L)
  182. 160 CONTINUE
  183. 170 CONTINUE
  184. 180 CONTINUE
  185. 190 CONTINUE
  186. ELSE
  187. DO 230 N=1,IDIM
  188. DO 220 L=1,NPG
  189. DO 210 I=1,NP
  190. DO 200 K=KDEB,KFIN
  191. KP = K - KDEB + 1
  192. NF = IPADU(LE(I,K))
  193. UMJ(KP,N,L) = UMJ(KP,N,L) + UN(NF,N)*FN(I,L)
  194. DUMJ(KP,N,L) = DUMJ(KP,N,L) + UN(NF,N)*HK(KP,N,I,L)
  195. 200 CONTINUE
  196. 210 CONTINUE
  197. 220 CONTINUE
  198. 230 CONTINUE
  199. ENDIF
  200. C
  201. C- Calcul pour chaque élément de
  202. C- UMI : Vitesse moyenne
  203. C- pour les options SUPGDC et SUPG
  204. C
  205. IF (IDCEN.EQ.2.OR.IDCEN.EQ.3) THEN
  206. DO 260 L=1,NPG
  207. DO 250 N=1,IDIM
  208. DO 240 K=KDEB,KFIN
  209. KP = K - KDEB + 1
  210. UMI(KP,N) = UMI(KP,N) + UMJ(KP,N,L)*PGSK(KP,L)/AIRE(KP)
  211. 240 CONTINUE
  212. 250 CONTINUE
  213. 260 CONTINUE
  214. ENDIF
  215. C
  216. C
  217. C====================================================================
  218. C Cas 2D
  219. C====================================================================
  220. C
  221. C
  222. IF (IDIM.EQ.2) THEN
  223. C
  224. C- Calcul pour chaque élément de
  225. C- UM : Norme de la vitesse moyenne
  226. C- BMI : Inverse d'un temps caractéristique associé à la convection
  227. C- pour l'option SUPGDC et SUPG
  228. C
  229. IF (IDCEN.EQ.2.OR.IDCEN.EQ.3) THEN
  230. DO 1000 K=KDEB,KFIN
  231. KP = K - KDEB + 1
  232. UM(KP) = UMI(KP,1)*UMI(KP,1) + UMI(KP,2)*UMI(KP,2)
  233. UM(KP) = SQRT(UM(KP))
  234. BMIX = UMI(KP,1) / AL(KP)
  235. BMIY = UMI(KP,2) / AH(KP)
  236. BMI(KP) = BMIX*BMIX + BMIY*BMIY
  237. BMI(KP) = SQRT(BMI(KP)) + XPETIT
  238. 1000 CONTINUE
  239. ENDIF
  240. C
  241. C- Calcul de facteur géométrique associé à chaque élément
  242. C
  243. DO 1010 K=KDEB,KFIN
  244. KP=K-KDEB+1
  245. AL2(KP) = 1.D0 / AL(KP) / AL(KP)
  246. AH2(KP) = 1.D0 / AH(KP) / AH(KP)
  247. XMB(KP) = (AL(KP)+AH(KP)) / 2.D0
  248. 1010 CONTINUE
  249. C
  250. C- Calcul en chaque élément, pour chaque point de Gauss de
  251. C- GRAD : vecteur unitaire porté par le gradient du champ scalaire
  252. C- UP : projection de la vitesse sur la direction donnée par GRAD
  253. C- UPI : vecteur UP*GRAD
  254. C- BM : inverse d'un temps caractéristique basé sur la vitesse
  255. C- BP : idem BP mais en considérant la projection de V sur GRAD
  256. C- pour l'option SUPGDC
  257. C
  258. IF (IDCEN.EQ.2) THEN
  259. DO 1030 L=1,NPG
  260. DO 1020 K=KDEB,KFIN
  261. KP = K - KDEB + 1
  262. AX = GRAD(KP,1,L)*GRAD(KP,1,L) + GRAD(KP,2,L)*GRAD(KP,2,L)
  263. AX = SQRT(AX) + XPETIT
  264. GRAD(KP,1,L) = GRAD(KP,1,L) / AX
  265. GRAD(KP,2,L) = GRAD(KP,2,L) / AX
  266. UP(KP,L) = GRAD(KP,1,L) * UMJ(KP,1,L)
  267. & + GRAD(KP,2,L) * UMJ(KP,2,L)
  268. UPI(KP,1,L) = GRAD(KP,1,L) * UP(KP,L)
  269. UPI(KP,2,L) = GRAD(KP,2,L) * UP(KP,L)
  270. 1020 CONTINUE
  271. 1030 CONTINUE
  272. DO 1050 L=1,NPG
  273. DO 1040 K=KDEB,KFIN
  274. KP = K - KDEB + 1
  275. BMX = UMJ(KP,1,L) / AL(KP)
  276. BMY = UMJ(KP,2,L) / AH(KP)
  277. BPX = UPI(KP,1,L) / AL(KP)
  278. BPY = UPI(KP,2,L) / AH(KP)
  279. BM(KP,L) = BMX*BMX + BMY*BMY
  280. BP(KP,L) = BPX*BPX + BPY*BPY
  281. BM(KP,L) = SQRT(BM(KP,L)) + XPETIT
  282. BP(KP,L) = SQRT(BP(KP,L)) + XPETIT
  283. 1040 CONTINUE
  284. 1050 CONTINUE
  285. ENDIF
  286. C
  287. C-----------------------------
  288. C- DECENTREMENT suivant IDCEN
  289. C-----------------------------
  290. C On calcule dans chaque cas TO1 et TO2 ainsi que le tenseur
  291. C associé à la viscosité numérique afin d'évaluer le pas de
  292. C temps de stabilité pour les schémas explicites.
  293. C
  294. C----------
  295. C CENTREE :
  296. C----------
  297. IF (IDCEN.EQ.1) THEN
  298. SI1 = 0.D0
  299. SI2 = 0.D0
  300. DO 1110 L=1,NPG
  301. DO 1100 K=KDEB,KFIN
  302. KP = K - KDEB + 1
  303. TO1(KP,L) = 0.D0
  304. TO2(KP,L) = 0.D0
  305. CXT(KP,L) = 0.D0
  306. CYT(KP,L) = 0.D0
  307. C Pas utilise en mars 2019 : commentaire
  308. C CXY(KP,L) = 0.D0
  309. 1100 CONTINUE
  310. 1110 CONTINUE
  311. C---------
  312. C SUPGDC : Base théorique dans : A New FE formulation for computational
  313. C fluid dynamics, II Beyond SUPG, HUGHES et al., in Comp.Meth.Appl.Mech.
  314. C Eng., vol 54, pp 341-355 (1986).
  315. C---------
  316. ELSEIF (IDCEN.EQ.2) THEN
  317. SI1 = 1.D0
  318. SI2 = 1.D0
  319. DO 1130 L=1,NPG
  320. DO 1120 K=KDEB,KFIN
  321. KP = K - KDEB + 1
  322. C
  323. C- Approximation "doublement asymptotique" basée sur la vitesse moyenne
  324. C- HMK : Distance basé sur la vitesse moyenne
  325. C- ALFA : Peclet de maille basé sur la vitesse moyenne
  326. C
  327. HMK = 2.D0 * UM(KP) / BM(KP,L)
  328. ALFA = UM(KP) * HMK / ANUK(KP) / 2.D0
  329. IF (ALFA.GT.3.D0) THEN
  330. AKSI = 1.D0
  331. ELSE
  332. AKSI = ALFA / 3.D0
  333. ENDIF
  334. CCT = AKSI / BM(KP,L)
  335. XMB(KP) = HMK
  336. C
  337. C- Approximation "doublement asymptotique" basée sur la projection de
  338. C- la vitesse sur le gradient du champ scalaire
  339. C- HMK : Distance basée sur la vitesse projetée
  340. C- ALFA : Peclet de maille basé sur la vitesse projetée
  341. C
  342. HPK = 2.D0 * UP(KP,L) / BP(KP,L)
  343. ALFA = UP(KP,L) * HPK / ANUK(KP) / 2.D0
  344. IF (ALFA.GT.3.D0) THEN
  345. AKSI = 1.D0
  346. ELSE
  347. AKSI = ALFA / 3.D0
  348. ENDIF
  349. CCP = AKSI / BP(KP,L)
  350. C
  351. CPT = CCP - CCT
  352. IF (CPT.GE.0.D0) then
  353. CC2 = CPT * CC0
  354. ELSE
  355. CC2 = 0.D0
  356. ENDIF
  357. C
  358. TO1(KP,L) = CCT
  359. TO2(KP,L) = CC2
  360. CXT(KP,L) = UMJ(KP,1,L)*UMJ(KP,1,L)*CCT
  361. & + UPI(KP,1,L)*UPI(KP,1,L)*CC2
  362. CYT(KP,L) = UMJ(KP,2,L)*UMJ(KP,2,L)*CCT
  363. & + UPI(KP,2,L)*UPI(KP,2,L)*CC2
  364.  
  365. C Pas utilise en mars 2019 : commentaire
  366. C CXY(KP,L) = UMJ(KP,1,L)*UMJ(KP,2,L)*CCT
  367. & + UPI(KP,1,L)*UPI(KP,2,L)*CC2
  368.  
  369. 1120 CONTINUE
  370. 1130 CONTINUE
  371. C-------
  372. C SUPG :
  373. C-------
  374. ELSEIF (IDCEN.EQ.3) THEN
  375. SI1 = 1.D0
  376. SI2 = 1.D0
  377. DO 1150 L=1,NPG
  378. DO 1140 K=KDEB,KFIN
  379. KP = K - KDEB + 1
  380. C
  381. C- Approximation "doublement asymptotique" basée sur la vitesse moyenne
  382. C- HMK : Distance basé sur la vitesse moyenne
  383. C- ALFA : Peclet de maille basé sur la vitesse moyenne
  384. C
  385. HMK = 2.D0 * UM(KP) / BMI(KP)
  386. ALFA = UM(KP) * HMK / ANUK(KP) / 2.D0
  387. IF (ALFA.GT.3.D0) THEN
  388. AKSI = 1.D0
  389. ELSE
  390. AKSI = ALFA / 3.D0
  391. ENDIF
  392. CCT = AKSI / BMI(KP)
  393. XMB(KP) = HMK
  394. C
  395. TO1(KP,L) = CCT
  396. TO2(KP,L) = 0.D0
  397. CXT(KP,L) = UMJ(KP,1,L)*UMJ(KP,1,L)*CCT
  398. CYT(KP,L) = UMJ(KP,2,L)*UMJ(KP,2,L)*CCT
  399.  
  400. C Pas utilise en mars 2019 : commentaire
  401. C CXY(KP,L) = UMJ(KP,1,L)*UMJ(KP,2,L)*CCT
  402. 1140 CONTINUE
  403. 1150 CONTINUE
  404. C-------------------
  405. C Tenseur Visqueux :
  406. C-------------------
  407. ELSEIF (IDCEN.EQ.4) THEN
  408. SI1 =-1.D0
  409. SI2 = 1.D0
  410. DT19 = DTM1 * 0.5D0
  411. DO 1170 L=1,NPG
  412. DO 1160 K=KDEB,KFIN
  413. KP = K - KDEB + 1
  414. TO1(KP,L) = DT19
  415. TO2(KP,L) = 0.D0
  416. CXT(KP,L) = UMJ(KP,1,L)*UMJ(KP,1,L)*DT19
  417. CYT(KP,L) = UMJ(KP,2,L)*UMJ(KP,2,L)*DT19
  418.  
  419. C Pas utilise en mars 2019 : commentaire
  420. C CXY(KP,L) = UMJ(KP,1,L)*UMJ(KP,2,L)*DT19
  421. 1160 CONTINUE
  422. 1170 CONTINUE
  423. C-----------------------------
  424. C Crank Nicholson généralisé :
  425. C-----------------------------
  426. ELSEIF (IDCEN.EQ.5) THEN
  427. SI1 =-1.D0
  428. SI2 = 1.D0
  429. DT19 = DTM1/6.D0
  430. DO 1190 L=1,NPG
  431. DO 1180 K=KDEB,KFIN
  432. KP = K - KDEB + 1
  433. TO1(KP,L) = DT19
  434. TO2(KP,L) = 0.D0
  435. 1180 CONTINUE
  436. 1190 CONTINUE
  437. ENDIF
  438. C
  439. C---------------------------
  440. C Pas de temps de stabilité
  441. C---------------------------
  442. C
  443. C La viscosité utilisée dans l'évaluation des pas de temps de stabilité
  444. C explicite ajoute à la viscosité physique la viscosité numérique :
  445. C DT1 : Correspond à une CFL de 1 et un Peclet de maille de 1
  446. C CFL=1 -> dx=Vdt |
  447. C |-> dt=2D/V2
  448. C Pe=1 -> dx=2D/V |
  449. C DT2 : Correspond au pas de temps de stabilité lié à la diffusion
  450. C FOU=1 -> dt=0.5 dx2/D
  451. C
  452. IF (IDCEN.NE.5) THEN
  453. DO 2010 L=1,NPG
  454. DO 2000 K=KDEB,KFIN
  455. KP = K - KDEB + 1
  456. DT0 = DT
  457. DT1 = 2.D0 /
  458. & ( UMJ(KP,1,L)*UMJ(KP,1,L)/(CXT(KP,L)+ANUK(KP))
  459. & + UMJ(KP,2,L)*UMJ(KP,2,L)/(CYT(KP,L)+ANUK(KP)) )
  460. DT2 = 0.5D0 /
  461. & ( (CXT(KP,L)+ANUK(KP))*AL2(KP)
  462. & + (CYT(KP,L)+ANUK(KP))*AH2(KP) )
  463. IF (DT .LT. 0.D0) DT=DT1
  464. IF (DT1.LT.DT) DT=DT1
  465. IF (DT2.LT.DT) DT=DT2
  466. IF (DT.NE.DT0) THEN
  467. DTT1 = DT1
  468. DTT2 = DT2
  469. DIAEL = XMB(KP)
  470. NUEL = K
  471. ENDIF
  472. 2000 CONTINUE
  473. 2010 CONTINUE
  474. ENDIF
  475. C
  476. C---------------------------------------------------
  477. C Fonction test pour la formulation Petrov-Galerkin
  478. C---------------------------------------------------
  479. C Ce qui est diffusion numérique en explicite se transforme en
  480. C ajoutant de la viscosité numérique (Tenseurs visqueux et CNG).
  481. C WS : Fonction test pour la partie explicite
  482. C
  483. DO 5222 L=1,NPG
  484. DO 5221 I=1,NP
  485. DO 2050 K=KDEB,KFIN
  486. KP = K - KDEB + 1
  487. WT(KP,I,L) = FN(I,L) + SI1 *
  488. & (TO1(KP,L)*(UMJ(KP,1,L)*HK(KP,1,I,L)+UMJ(KP,2,L)*HK(KP,2,I,L))
  489. & +TO2(KP,L)*(UPI(KP,1,L)*HK(KP,1,I,L)+UPI(KP,2,L)*HK(KP,2,I,L)))
  490. WS(KP,I,L) = FN(I,L) + SI2 *
  491. & (TO1(KP,L)*(UMJ(KP,1,L)*HK(KP,1,I,L)+UMJ(KP,2,L)*HK(KP,2,I,L))
  492. & +TO2(KP,L)*(UPI(KP,1,L)*HK(KP,1,I,L)+UPI(KP,2,L)*HK(KP,2,I,L)))
  493. 2050 CONTINUE
  494. 5221 CONTINUE
  495. 5222 CONTINUE
  496. C
  497. C
  498. C====================================================================
  499. C Cas 3D
  500. C====================================================================
  501. C
  502. C
  503. ELSEIF (IDIM.EQ.3) THEN
  504. IF (IDCEN.EQ.2.OR.IDCEN.EQ.3) THEN
  505. DO 5000 K=KDEB,KFIN
  506. KP = K - KDEB + 1
  507. UM(KP) = UMI(KP,1)*UMI(KP,1)
  508. & + UMI(KP,2)*UMI(KP,2)
  509. & + UMI(KP,3)*UMI(KP,3)
  510. UM(KP) = SQRT(UM(KP))
  511. BMIX = UMI(KP,1) / AL(KP)
  512. BMIY = UMI(KP,2) / AH(KP)
  513. BMIZ = UMI(KP,3) / AP(KP)
  514. BMI(KP) = BMIX*BMIX + BMIY*BMIY + BMIZ*BMIZ
  515. BMI(KP) = SQRT(BMI(KP)) + XPETIT
  516. 5000 CONTINUE
  517. ENDIF
  518. *
  519. DO 5010 K=KDEB,KFIN
  520. KP=K-KDEB+1
  521. AL2(KP) = 1.D0 / AL(KP) / AL(KP)
  522. AH2(KP) = 1.D0 / AH(KP) / AH(KP)
  523. AP2(KP) = 1.D0 / AP(KP) / AP(KP)
  524. XMB(KP) = (AL(KP)+AH(KP)+AP(KP)) / 3.D0
  525. 5010 CONTINUE
  526. *
  527. IF (IDCEN.EQ.2) THEN
  528. DO 5030 L=1,NPG
  529. DO 5020 K=KDEB,KFIN
  530. KP = K-KDEB+1
  531. AX = GRAD(KP,1,L)*GRAD(KP,1,L)
  532. & + GRAD(KP,2,L)*GRAD(KP,2,L)
  533. & + GRAD(KP,3,L)*GRAD(KP,3,L)
  534. AX = SQRT(AX) + XPETIT
  535. GRAD(KP,1,L) = GRAD(KP,1,L) / AX
  536. GRAD(KP,2,L) = GRAD(KP,2,L) / AX
  537. GRAD(KP,3,L) = GRAD(KP,3,L) / AX
  538. UP(KP,L) = GRAD(KP,1,L) * UMJ(KP,1,L)
  539. & + GRAD(KP,2,L) * UMJ(KP,2,L)
  540. & + GRAD(KP,3,L) * UMJ(KP,3,L)
  541. UPI(KP,1,L) = GRAD(KP,1,L) * UP(KP,L)
  542. UPI(KP,2,L) = GRAD(KP,2,L) * UP(KP,L)
  543. UPI(KP,3,L) = GRAD(KP,3,L) * UP(KP,L)
  544. 5020 CONTINUE
  545. 5030 CONTINUE
  546. DO 5050 L=1,NPG
  547. DO 5040 K=KDEB,KFIN
  548. KP = K-KDEB+1
  549. BMX = UMJ(KP,1,L) / AL(KP)
  550. BMY = UMJ(KP,2,L) / AH(KP)
  551. BMZ = UMJ(KP,3,L) / AP(KP)
  552. BPX = UPI(KP,1,L) / AL(KP)
  553. BPY = UPI(KP,2,L) / AH(KP)
  554. BPZ = UPI(KP,3,L) / AP(KP)
  555. BM(KP,L) = BMX*BMX + BMY*BMY + BMZ*BMZ
  556. BP(KP,L) = BPX*BPX + BPY*BPY + BPZ*BPZ
  557. BM(KP,L) = SQRT(BM(KP,L)) + XPETIT
  558. BP(KP,L) = SQRT(BP(KP,L)) + XPETIT
  559. 5040 CONTINUE
  560. 5050 CONTINUE
  561. ENDIF
  562. C
  563. C-----------------------------
  564. C- DECENTREMENT suivant IDCEN
  565. C-----------------------------
  566. C
  567. C----------
  568. C CENTREE :
  569. C----------
  570. IF (IDCEN.EQ.1) THEN
  571. SI1= 0.D0
  572. SI2= 0.D0
  573. DO 5110 L=1,NPG
  574. DO 5100 K=KDEB,KFIN
  575. KP = K - KDEB + 1
  576. TO1(KP,L) = 0.D0
  577. TO2(KP,L) = 0.D0
  578. CXT(KP,L) = 0.D0
  579. CYT(KP,L) = 0.D0
  580. CZT(KP,L) = 0.D0
  581.  
  582. C Pas utilise en mars 2019 : commentaire
  583. C CXY(KP,L) = 0.D0
  584. C CXZ(KP,L) = 0.D0
  585. C CYZ(KP,L) = 0.D0
  586. 5100 CONTINUE
  587. 5110 CONTINUE
  588. C---------
  589. C SUPGDC :
  590. C---------
  591. ELSEIF (IDCEN.EQ.2) THEN
  592. SI1= 1.D0
  593. SI2= 1.D0
  594. DO 5130 L=1,NPG
  595. DO 5120 K=KDEB,KFIN
  596. KP = K - KDEB + 1
  597. HMK = 2.D0 * UM(KP) / BM(KP,L)
  598. ALFA = UM(KP)*HMK / ANUK(KP) / 2.D0
  599. IF (ALFA.GT.3.D0) THEN
  600. AKSI = 1.D0
  601. ELSE
  602. AKSI = ALFA / 3.D0
  603. ENDIF
  604. CCT = AKSI / BM(KP,L)
  605. XMB(KP) = HMK
  606. *
  607. HPK = 2.D0 * UP(KP,L) / BP(KP,L)
  608. ALFA = UP(KP,L)*HPK / ANUK(KP) / 2.D0
  609. IF (ALFA.GT.3.D0) THEN
  610. AKSI = 1.D0
  611. ELSE
  612. AKSI = ALFA / 3.D0
  613. ENDIF
  614. CCP = AKSI / BP(KP,L)
  615. *
  616. CPT=CCP-CCT
  617. IF (CPT.GE.0.D0) then
  618. CC2 = CPT * CC0
  619. ELSE
  620. CC2 = 0.D0
  621. ENDIF
  622. *
  623. TO1(KP,L) = CCT
  624. TO2(KP,L) = CC2
  625. CXT(KP,L) = UMJ(KP,1,L)*UMJ(KP,1,L)*CCT
  626. & + UPI(KP,1,L)*UPI(KP,1,L)*CC2
  627. CYT(KP,L) = UMJ(KP,2,L)*UMJ(KP,2,L)*CCT
  628. & + UPI(KP,2,L)*UPI(KP,2,L)*CC2
  629. CZT(KP,L) = UMJ(KP,3,L)*UMJ(KP,3,L)*CCT
  630. & + UPI(KP,3,L)*UPI(KP,3,L)*CC2
  631.  
  632. C Pas utilise en mars 2019 : commentaire
  633. C CXY(KP,L) = UMJ(KP,1,L)*UMJ(KP,2,L)*CCT
  634. C & + UPI(KP,1,L)*UPI(KP,2,L)*CC2
  635. C CXZ(KP,L) = UMJ(KP,1,L)*UMJ(KP,3,L)*CCT
  636. C & + UPI(KP,1,L)*UPI(KP,3,L)*CC2
  637. C CYZ(KP,L) = UMJ(KP,2,L)*UMJ(KP,3,L)*CCT
  638. C & + UPI(KP,2,L)*UPI(KP,3,L)*CC2
  639.  
  640. 5120 CONTINUE
  641. 5130 CONTINUE
  642. C-------
  643. C SUPG :
  644. C-------
  645. ELSEIF (IDCEN.EQ.3) THEN
  646. SI1= 1.D0
  647. SI2= 1.D0
  648. DO 5150 L=1,NPG
  649. DO 5140 K=KDEB,KFIN
  650. KP = K - KDEB + 1
  651. HMK = 2.D0 * UM(KP) / BM(KP,L)
  652. ALFA = UM(KP)*HMK / ANUK(KP) / 2.D0
  653. IF (ALFA.GT.3.D0) THEN
  654. AKSI = 1.D0
  655. ELSE
  656. AKSI = ALFA / 3.D0
  657. ENDIF
  658. CCT = AKSI / BM(KP,L)
  659. XMB(KP) = HMK
  660. TO1(KP,L) = CCT
  661. TO2(KP,L) = 0.D0
  662. CXT(KP,L) = UMJ(KP,1,L)*UMJ(KP,1,L)*CCT
  663. CYT(KP,L) = UMJ(KP,2,L)*UMJ(KP,2,L)*CCT
  664. CZT(KP,L) = UMJ(KP,3,L)*UMJ(KP,3,L)*CCT
  665.  
  666. C Pas utilise en mars 2019 : commentaire
  667. C CXY(KP,L) = UMJ(KP,1,L)*UMJ(KP,2,L)*CCT
  668. C CXZ(KP,L) = UMJ(KP,1,L)*UMJ(KP,3,L)*CCT
  669. C CYZ(KP,L) = UMJ(KP,2,L)*UMJ(KP,3,L)*CCT
  670. 5140 CONTINUE
  671. 5150 CONTINUE
  672. C-------------------
  673. C Tenseur Visqueux :
  674. C-------------------
  675. ELSEIF (IDCEN.EQ.4) THEN
  676. SI1 =-1.D0
  677. SI2 = 1.D0
  678. DT19 = DTM1 * 0.5D0
  679. DO 5170 L=1,NPG
  680. DO 5160 K=KDEB,KFIN
  681. KP = K - KDEB + 1
  682. TO1(KP,L) = DT19
  683. TO2(KP,L) = 0.D0
  684. CXT(KP,L) = UMJ(KP,1,L)*UMJ(KP,1,L)*DT19
  685. CYT(KP,L) = UMJ(KP,2,L)*UMJ(KP,2,L)*DT19
  686. CZT(KP,L) = UMJ(KP,3,L)*UMJ(KP,3,L)*DT19
  687.  
  688. C Pas utilise en mars 2019 : commentaire
  689. C CXY(KP,L) = UMJ(KP,1,L)*UMJ(KP,2,L)*DT19
  690. C CXZ(KP,L) = UMJ(KP,1,L)*UMJ(KP,3,L)*DT19
  691. C CYZ(KP,L) = UMJ(KP,2,L)*UMJ(KP,3,L)*DT19
  692. 5160 CONTINUE
  693. 5170 CONTINUE
  694. C-----------------------------
  695. C Crank Nicholson généralisé :
  696. C-----------------------------
  697. ELSEIF(IDCEN.EQ.5)THEN
  698. SI1 =-1.D0
  699. SI2 = 1.D0
  700. DT19 = DTM1/6.D0
  701. DO 5190 L=1,NPG
  702. DO 5180 K=KDEB,KFIN
  703. KP = K - KDEB + 1
  704. TO1(KP,L) = DT19
  705. TO2(KP,L) = 0.D0
  706. 5180 CONTINUE
  707. 5190 CONTINUE
  708. ENDIF
  709. C
  710. C---------------------------
  711. C Pas de temps de stabilité
  712. C---------------------------
  713. C
  714. IF (IDCEN.NE.5) THEN
  715. DO 5210 L=1,NPG
  716. DO 5200 K=KDEB,KFIN
  717. KP = K - KDEB + 1
  718. DT0 = DT
  719. DT1 = 2.D0 /
  720. & ( UMJ(KP,1,L)*UMJ(KP,1,L)/(CXT(KP,L)+ANUK(KP))
  721. & + UMJ(KP,2,L)*UMJ(KP,2,L)/(CYT(KP,L)+ANUK(KP))
  722. & + UMJ(KP,3,L)*UMJ(KP,3,L)/(CZT(KP,L)+ANUK(KP)) )
  723.  
  724. DT2 = 0.5D0 /
  725. & ( (CXT(KP,L)+ANUK(KP))*AL2(KP)
  726. & + (CYT(KP,L)+ANUK(KP))*AH2(KP)
  727. & + (CZT(KP,L)+ANUK(KP))*AP2(KP) )
  728.  
  729. IF (DT1.LT.DT) DT=DT1
  730. IF (DT2.LT.DT) DT=DT2
  731. IF (DT.NE.DT0) THEN
  732. DTT1 = DT1
  733. DTT2 = DT2
  734. DIAEL = XMB(KP)
  735. NUEL = K
  736. ENDIF
  737. 5200 CONTINUE
  738. 5210 CONTINUE
  739. END IF
  740. C
  741. C---------------------------------------------------
  742. C Fonction test pour la formulation Petrov-Galerkin
  743. C---------------------------------------------------
  744. C
  745. DO 5224 L=1,NPG
  746. DO 5223 I=1,NP
  747. DO 5220 K=KDEB,KFIN
  748. KP = K - KDEB + 1
  749. WT(KP,I,L)= FN(I,L) + SI1
  750. & * ( TO1(KP,L) * ( UMJ(KP,1,L)*HK(KP,1,I,L)
  751. & + UMJ(KP,2,L)*HK(KP,2,I,L)
  752. & + UMJ(KP,3,L)*HK(KP,3,I,L) )
  753. & + TO2(KP,L) * ( UPI(KP,1,L)*HK(KP,1,I,L)
  754. & + UPI(KP,2,L)*HK(KP,2,I,L)
  755. & + UPI(KP,3,L)*HK(KP,3,I,L) ))
  756. WS(KP,I,L)= FN(I,L) + SI2
  757. & * ( TO1(KP,L) * ( UMJ(KP,1,L)*HK(KP,1,I,L)
  758. & + UMJ(KP,2,L)*HK(KP,2,I,L)
  759. & + UMJ(KP,3,L)*HK(KP,3,I,L))
  760. & + TO2(KP,L) * ( UPI(KP,1,L)*HK(KP,1,I,L)
  761. & + UPI(KP,2,L)*HK(KP,2,I,L)
  762. & + UPI(KP,3,L)*HK(KP,3,I,L) ))
  763. 5220 CONTINUE
  764. 5223 CONTINUE
  765. 5224 CONTINUE
  766. ENDIF
  767. END
  768.  
  769.  
  770.  
  771.  

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