Télécharger ksupg.eso

Retour à la liste

Numérotation des lignes :

ksupg
  1. C KSUPG SOURCE CB215821 19/03/20 21:15:09 10165
  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 2050 L=1,NPG
  484. DO 2050 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. C
  495. C
  496. C====================================================================
  497. C Cas 3D
  498. C====================================================================
  499. C
  500. C
  501. ELSEIF (IDIM.EQ.3) THEN
  502. IF (IDCEN.EQ.2.OR.IDCEN.EQ.3) THEN
  503. DO 5000 K=KDEB,KFIN
  504. KP = K - KDEB + 1
  505. UM(KP) = UMI(KP,1)*UMI(KP,1)
  506. & + UMI(KP,2)*UMI(KP,2)
  507. & + UMI(KP,3)*UMI(KP,3)
  508. UM(KP) = SQRT(UM(KP))
  509. BMIX = UMI(KP,1) / AL(KP)
  510. BMIY = UMI(KP,2) / AH(KP)
  511. BMIZ = UMI(KP,3) / AP(KP)
  512. BMI(KP) = BMIX*BMIX + BMIY*BMIY + BMIZ*BMIZ
  513. BMI(KP) = SQRT(BMI(KP)) + XPETIT
  514. 5000 CONTINUE
  515. ENDIF
  516. *
  517. DO 5010 K=KDEB,KFIN
  518. KP=K-KDEB+1
  519. AL2(KP) = 1.D0 / AL(KP) / AL(KP)
  520. AH2(KP) = 1.D0 / AH(KP) / AH(KP)
  521. AP2(KP) = 1.D0 / AP(KP) / AP(KP)
  522. XMB(KP) = (AL(KP)+AH(KP)+AP(KP)) / 3.D0
  523. 5010 CONTINUE
  524. *
  525. IF (IDCEN.EQ.2) THEN
  526. DO 5030 L=1,NPG
  527. DO 5020 K=KDEB,KFIN
  528. KP = K-KDEB+1
  529. AX = GRAD(KP,1,L)*GRAD(KP,1,L)
  530. & + GRAD(KP,2,L)*GRAD(KP,2,L)
  531. & + GRAD(KP,3,L)*GRAD(KP,3,L)
  532. AX = SQRT(AX) + XPETIT
  533. GRAD(KP,1,L) = GRAD(KP,1,L) / AX
  534. GRAD(KP,2,L) = GRAD(KP,2,L) / AX
  535. GRAD(KP,3,L) = GRAD(KP,3,L) / AX
  536. UP(KP,L) = GRAD(KP,1,L) * UMJ(KP,1,L)
  537. & + GRAD(KP,2,L) * UMJ(KP,2,L)
  538. & + GRAD(KP,3,L) * UMJ(KP,3,L)
  539. UPI(KP,1,L) = GRAD(KP,1,L) * UP(KP,L)
  540. UPI(KP,2,L) = GRAD(KP,2,L) * UP(KP,L)
  541. UPI(KP,3,L) = GRAD(KP,3,L) * UP(KP,L)
  542. 5020 CONTINUE
  543. 5030 CONTINUE
  544. DO 5050 L=1,NPG
  545. DO 5040 K=KDEB,KFIN
  546. KP = K-KDEB+1
  547. BMX = UMJ(KP,1,L) / AL(KP)
  548. BMY = UMJ(KP,2,L) / AH(KP)
  549. BMZ = UMJ(KP,3,L) / AP(KP)
  550. BPX = UPI(KP,1,L) / AL(KP)
  551. BPY = UPI(KP,2,L) / AH(KP)
  552. BPZ = UPI(KP,3,L) / AP(KP)
  553. BM(KP,L) = BMX*BMX + BMY*BMY + BMZ*BMZ
  554. BP(KP,L) = BPX*BPX + BPY*BPY + BPZ*BPZ
  555. BM(KP,L) = SQRT(BM(KP,L)) + XPETIT
  556. BP(KP,L) = SQRT(BP(KP,L)) + XPETIT
  557. 5040 CONTINUE
  558. 5050 CONTINUE
  559. ENDIF
  560. C
  561. C-----------------------------
  562. C- DECENTREMENT suivant IDCEN
  563. C-----------------------------
  564. C
  565. C----------
  566. C CENTREE :
  567. C----------
  568. IF (IDCEN.EQ.1) THEN
  569. SI1= 0.D0
  570. SI2= 0.D0
  571. DO 5110 L=1,NPG
  572. DO 5100 K=KDEB,KFIN
  573. KP = K - KDEB + 1
  574. TO1(KP,L) = 0.D0
  575. TO2(KP,L) = 0.D0
  576. CXT(KP,L) = 0.D0
  577. CYT(KP,L) = 0.D0
  578. CZT(KP,L) = 0.D0
  579.  
  580. C Pas utilise en mars 2019 : commentaire
  581. C CXY(KP,L) = 0.D0
  582. C CXZ(KP,L) = 0.D0
  583. C CYZ(KP,L) = 0.D0
  584. 5100 CONTINUE
  585. 5110 CONTINUE
  586. C---------
  587. C SUPGDC :
  588. C---------
  589. ELSEIF (IDCEN.EQ.2) THEN
  590. SI1= 1.D0
  591. SI2= 1.D0
  592. DO 5130 L=1,NPG
  593. DO 5120 K=KDEB,KFIN
  594. KP = K - KDEB + 1
  595. HMK = 2.D0 * UM(KP) / BM(KP,L)
  596. ALFA = UM(KP)*HMK / ANUK(KP) / 2.D0
  597. IF (ALFA.GT.3.D0) THEN
  598. AKSI = 1.D0
  599. ELSE
  600. AKSI = ALFA / 3.D0
  601. ENDIF
  602. CCT = AKSI / BM(KP,L)
  603. XMB(KP) = HMK
  604. *
  605. HPK = 2.D0 * UP(KP,L) / BP(KP,L)
  606. ALFA = UP(KP,L)*HPK / ANUK(KP) / 2.D0
  607. IF (ALFA.GT.3.D0) THEN
  608. AKSI = 1.D0
  609. ELSE
  610. AKSI = ALFA / 3.D0
  611. ENDIF
  612. CCP = AKSI / BP(KP,L)
  613. *
  614. CPT=CCP-CCT
  615. IF (CPT.GE.0.D0) then
  616. CC2 = CPT * CC0
  617. ELSE
  618. CC2 = 0.D0
  619. ENDIF
  620. *
  621. TO1(KP,L) = CCT
  622. TO2(KP,L) = CC2
  623. CXT(KP,L) = UMJ(KP,1,L)*UMJ(KP,1,L)*CCT
  624. & + UPI(KP,1,L)*UPI(KP,1,L)*CC2
  625. CYT(KP,L) = UMJ(KP,2,L)*UMJ(KP,2,L)*CCT
  626. & + UPI(KP,2,L)*UPI(KP,2,L)*CC2
  627. CZT(KP,L) = UMJ(KP,3,L)*UMJ(KP,3,L)*CCT
  628. & + UPI(KP,3,L)*UPI(KP,3,L)*CC2
  629.  
  630. C Pas utilise en mars 2019 : commentaire
  631. C CXY(KP,L) = UMJ(KP,1,L)*UMJ(KP,2,L)*CCT
  632. C & + UPI(KP,1,L)*UPI(KP,2,L)*CC2
  633. C CXZ(KP,L) = UMJ(KP,1,L)*UMJ(KP,3,L)*CCT
  634. C & + UPI(KP,1,L)*UPI(KP,3,L)*CC2
  635. C CYZ(KP,L) = UMJ(KP,2,L)*UMJ(KP,3,L)*CCT
  636. C & + UPI(KP,2,L)*UPI(KP,3,L)*CC2
  637.  
  638. 5120 CONTINUE
  639. 5130 CONTINUE
  640. C-------
  641. C SUPG :
  642. C-------
  643. ELSEIF (IDCEN.EQ.3) THEN
  644. SI1= 1.D0
  645. SI2= 1.D0
  646. DO 5150 L=1,NPG
  647. DO 5140 K=KDEB,KFIN
  648. KP = K - KDEB + 1
  649. HMK = 2.D0 * UM(KP) / BM(KP,L)
  650. ALFA = UM(KP)*HMK / ANUK(KP) / 2.D0
  651. IF (ALFA.GT.3.D0) THEN
  652. AKSI = 1.D0
  653. ELSE
  654. AKSI = ALFA / 3.D0
  655. ENDIF
  656. CCT = AKSI / BM(KP,L)
  657. XMB(KP) = HMK
  658. TO1(KP,L) = CCT
  659. TO2(KP,L) = 0.D0
  660. CXT(KP,L) = UMJ(KP,1,L)*UMJ(KP,1,L)*CCT
  661. CYT(KP,L) = UMJ(KP,2,L)*UMJ(KP,2,L)*CCT
  662. CZT(KP,L) = UMJ(KP,3,L)*UMJ(KP,3,L)*CCT
  663.  
  664. C Pas utilise en mars 2019 : commentaire
  665. C CXY(KP,L) = UMJ(KP,1,L)*UMJ(KP,2,L)*CCT
  666. C CXZ(KP,L) = UMJ(KP,1,L)*UMJ(KP,3,L)*CCT
  667. C CYZ(KP,L) = UMJ(KP,2,L)*UMJ(KP,3,L)*CCT
  668. 5140 CONTINUE
  669. 5150 CONTINUE
  670. C-------------------
  671. C Tenseur Visqueux :
  672. C-------------------
  673. ELSEIF (IDCEN.EQ.4) THEN
  674. SI1 =-1.D0
  675. SI2 = 1.D0
  676. DT19 = DTM1 * 0.5D0
  677. DO 5170 L=1,NPG
  678. DO 5160 K=KDEB,KFIN
  679. KP = K - KDEB + 1
  680. TO1(KP,L) = DT19
  681. TO2(KP,L) = 0.D0
  682. CXT(KP,L) = UMJ(KP,1,L)*UMJ(KP,1,L)*DT19
  683. CYT(KP,L) = UMJ(KP,2,L)*UMJ(KP,2,L)*DT19
  684. CZT(KP,L) = UMJ(KP,3,L)*UMJ(KP,3,L)*DT19
  685.  
  686. C Pas utilise en mars 2019 : commentaire
  687. C CXY(KP,L) = UMJ(KP,1,L)*UMJ(KP,2,L)*DT19
  688. C CXZ(KP,L) = UMJ(KP,1,L)*UMJ(KP,3,L)*DT19
  689. C CYZ(KP,L) = UMJ(KP,2,L)*UMJ(KP,3,L)*DT19
  690. 5160 CONTINUE
  691. 5170 CONTINUE
  692. C-----------------------------
  693. C Crank Nicholson généralisé :
  694. C-----------------------------
  695. ELSEIF(IDCEN.EQ.5)THEN
  696. SI1 =-1.D0
  697. SI2 = 1.D0
  698. DT19 = DTM1/6.D0
  699. DO 5190 L=1,NPG
  700. DO 5180 K=KDEB,KFIN
  701. KP = K - KDEB + 1
  702. TO1(KP,L) = DT19
  703. TO2(KP,L) = 0.D0
  704. 5180 CONTINUE
  705. 5190 CONTINUE
  706. ENDIF
  707. C
  708. C---------------------------
  709. C Pas de temps de stabilité
  710. C---------------------------
  711. C
  712. IF (IDCEN.NE.5) THEN
  713. DO 5210 L=1,NPG
  714. DO 5200 K=KDEB,KFIN
  715. KP = K - KDEB + 1
  716. DT0 = DT
  717. DT1 = 2.D0 /
  718. & ( UMJ(KP,1,L)*UMJ(KP,1,L)/(CXT(KP,L)+ANUK(KP))
  719. & + UMJ(KP,2,L)*UMJ(KP,2,L)/(CYT(KP,L)+ANUK(KP))
  720. & + UMJ(KP,3,L)*UMJ(KP,3,L)/(CZT(KP,L)+ANUK(KP)) )
  721.  
  722. DT2 = 0.5D0 /
  723. & ( (CXT(KP,L)+ANUK(KP))*AL2(KP)
  724. & + (CYT(KP,L)+ANUK(KP))*AH2(KP)
  725. & + (CZT(KP,L)+ANUK(KP))*AP2(KP) )
  726.  
  727. IF (DT1.LT.DT) DT=DT1
  728. IF (DT2.LT.DT) DT=DT2
  729. IF (DT.NE.DT0) THEN
  730. DTT1 = DT1
  731. DTT2 = DT2
  732. DIAEL = XMB(KP)
  733. NUEL = K
  734. ENDIF
  735. 5200 CONTINUE
  736. 5210 CONTINUE
  737. END IF
  738. C
  739. C---------------------------------------------------
  740. C Fonction test pour la formulation Petrov-Galerkin
  741. C---------------------------------------------------
  742. C
  743. DO 5220 L=1,NPG
  744. DO 5220 I=1,NP
  745. DO 5220 K=KDEB,KFIN
  746. KP = K - KDEB + 1
  747. WT(KP,I,L)= FN(I,L) + SI1
  748. & * ( TO1(KP,L) * ( UMJ(KP,1,L)*HK(KP,1,I,L)
  749. & + UMJ(KP,2,L)*HK(KP,2,I,L)
  750. & + UMJ(KP,3,L)*HK(KP,3,I,L) )
  751. & + TO2(KP,L) * ( UPI(KP,1,L)*HK(KP,1,I,L)
  752. & + UPI(KP,2,L)*HK(KP,2,I,L)
  753. & + UPI(KP,3,L)*HK(KP,3,I,L) ))
  754. WS(KP,I,L)= FN(I,L) + SI2
  755. & * ( TO1(KP,L) * ( UMJ(KP,1,L)*HK(KP,1,I,L)
  756. & + UMJ(KP,2,L)*HK(KP,2,I,L)
  757. & + UMJ(KP,3,L)*HK(KP,3,I,L))
  758. & + TO2(KP,L) * ( UPI(KP,1,L)*HK(KP,1,I,L)
  759. & + UPI(KP,2,L)*HK(KP,2,I,L)
  760. & + UPI(KP,3,L)*HK(KP,3,I,L) ))
  761. 5220 CONTINUE
  762. ENDIF
  763. END
  764.  
  765.  
  766.  

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