Télécharger flhu22.eso

Retour à la liste

Numérotation des lignes :

flhu22
  1. C FLHU22 SOURCE CHAT 05/01/13 00:03:42 5004
  2. SUBROUTINE FLHU22(NESP,
  3. & GAMG,ROG,PG,UNG,UTG,UVG,
  4. & GAMD,ROD,PD,UND,UTD,UVD,
  5. & YG,YD,FLU1,FLU2,
  6. & CELLT,
  7. & LOGNC,MESERR,LOGAN)
  8. C************************************************************************
  9. C
  10. C PROJET : CASTEM 2000
  11. C
  12. C NOM : FLHUS2
  13. C
  14. C DESCRIPTION : Formulation Volumes Finis pour les Equations
  15. C d'Euler Multi-Especes relatives à un melange
  16. C de gaz ideals.
  17. C
  18. C Calcul du flux aux interfaces avec la mèthode
  19. C HUS de Coquel - Liou.
  20. C
  21. C Hybridation de van Leer - Hanel "FVS"
  22. C avec Osher "FDS" in "reverse order decomposition."
  23. C
  24. C (voir:
  25. C 1) Beccantini, Paillere,
  26. C "Upwind Flux Splitting Schemes..."
  27. C RAPPORT DMT 97//268
  28. C 2) Coquel, Liou
  29. C "Hybrid Upwind Splitting (HUS) by a Field-by-
  30. C Field Decomposition "
  31. C 1993. NASA TM 106843)
  32. C
  33. C LANGUAGE : FORTRAN 77
  34. C
  35. C AUTEUR : A. BECCANTINI DRN/DMT/SEMT/TTMF
  36. C
  37. C************************************************************************
  38. C
  39. C APPELES
  40. C
  41. C FLHUS1 ------ FLPVLH
  42. C |
  43. C --------- FLMVLH
  44. C |
  45. C --------- RACHUS
  46. C
  47. C
  48. C************************************************************************
  49. C
  50. C**** Entrées:
  51. C
  52. C NESP = nombre d'especes considérées dans les Equations
  53. C d'Euler
  54. C
  55. C GAMG, GAMD = les "gamma" du gaz (gauche et droite)
  56. C
  57. C ROG, ROD = les densités
  58. C
  59. C PG, PD = les pressions
  60. C
  61. C UNG, UND = vitesses normales
  62. C
  63. C UTG, UTD = vitesses tangentielles
  64. C
  65. C YG, YD = tables des fractiones massiques
  66. C
  67. C**** Sorties:
  68. C
  69. C FLU1 = table du flux a l'interface, i.e.
  70. C (rho*un, rho*un*un + p, rho*un*ut, rho*un*ht,
  71. C rho*un*y1, ...)
  72. C
  73. C IFLU2 = table de travaille, utilizé ici mais definie
  74. C avant (pour gagner du temps CPU).
  75. C
  76. C CELLT = condition de stabilité, i.e.
  77. C
  78. C dT/diamax < cellt
  79. C
  80. C LOGNC, MESSER = paramètres qui segnalent des eventuels problèmes
  81. C de convergence
  82. C
  83. C LOGAN = .TRUE. -> anomalie detectée
  84. C
  85. C************************************************************************
  86. C
  87. C HISTORIQUE (Anomalies et modifications éventuelles)
  88. C
  89. C HISTORIQUE : Créé le 6.1.98
  90. C
  91. C************************************************************************
  92. C
  93. C N.B.: Toutes les variables sont DECLAREES
  94. C
  95.  
  96. IMPLICIT INTEGER(I-N)
  97. INTEGER NESP, I1, NMAX, NMAX0
  98. REAL*8 GAMG,ROG,PG
  99. & ,GAMD,ROD,PD
  100. & ,GM1G,AG2,AG,UNG,UTG,UVG,MG,HTG
  101. & ,GM1D,AD2,AD,UND,UTD,UVD,MD,HTD
  102. & ,UTG2,UTD2,UVG2,UVD2
  103. & ,ZERO, ZERO0
  104. & ,DU
  105. & ,COEFFG, COEFFD, UTILG, UTILD
  106. & ,USTAR,RSTARG,RSTARD,PSTAR,CELLG,CELLD
  107. & ,ASTARG,ASTARD,MSTARG,MSTARD,USTAR2,HTSG,HTSD
  108. & ,CELL
  109. & ,AMG,AMD,CELLT0,CELLT
  110. & ,YG(*),YD(*),FLU1(*),FLU2(*)
  111. CHARACTER*(40) MESERR
  112. LOGICAL LOGNC, LARCO, LOGI, LOGAN
  113. C
  114. C**** ZERO = tolerance d'egalite pour REAL*8
  115. C NMAX = numero max d'iterations in RACHUS
  116. C pour calculer l'etats d'intersection
  117. C des invariants de Riemann
  118. C
  119. C LARCO = Logical; si .TRUE. on calcule le flux
  120. C relative aux fractiones massiques avec
  121. C la correction de Larrouturou
  122. C (voir J. Comp. Phys., 95, 1991)
  123. C
  124. PARAMETER(NMAX=1000,ZERO = 1.0D-12,LARCO = .TRUE.)
  125. C
  126. LOGNC = .FALSE.
  127. MESERR = ' '
  128. C
  129. C**** YG, YD, FLU1, FLU2 déjà defini
  130. C
  131. C
  132. C**** Calcul du flux avec le FVS de van Leer-Hanel.
  133. C
  134. C
  135. C**** Onde de "gauche" a "droite"
  136. C
  137. GM1G = GAMG - 1.0D0
  138. AG2 = GAMG * PG/ ROG
  139. AG = SQRT(AG2)
  140. UTG2 = UTG*UTG
  141. UVG2 = UVG*UVG
  142. MG = UNG / AG
  143. HTG = AG2 /GM1G + 0.5D0 * (UNG*UNG + UTG2 + UVG2)
  144. AMG = ABS(MG)
  145. CELLT = (2.0D0*GAMG + (AMG*(3.0D0-GAMG)))/(GAMG+3.0D0)
  146. & /((AMG+1.0D0)*AG)
  147. C
  148. CALL FLPVL2(NESP,GAMG,ROG,MG,AG,UTG,UVG,HTG,YG,FLU1)
  149. C
  150. C
  151. C**** Onde de "droite" a "gauche".
  152. C
  153. GM1D = GAMD - 1.0D0
  154. AD2 = GAMD * PD/ ROD
  155. AD = SQRT(AD2)
  156. UTD2 = UTD*UTD
  157. UVD2 = UVD*UVD
  158. MD = UND / AD
  159. HTD = AD2 / GM1D +0.5D0 * (UND*UND + UTD2 + UVD2)
  160. AMD = ABS(MD)
  161. CELLT0 = (2.0D0*GAMD + (AMD*(3.0D0-GAMD)))/(GAMD+3.0D0)
  162. & /((AMD+1.0D0)*AD)
  163. CELLT = MIN(CELLT,CELLT0)
  164. C
  165. CALL FLMVL2(NESP,GAMD,ROD,MD,AD,UTD,UVD,HTD,YD,FLU2)
  166. C
  167. DO I1 = 1, NESP+5
  168. FLU1(I1) = FLU1(I1) + FLU2(I1)
  169. ENDDO
  170. C
  171. C**** CALCUL des etats gauche et droite sur le champ linearment
  172. C dégénéré en imposant la 'reverse order decomposition'
  173. C d'Osher, i.e. la decomposition d'Osher 'physique'
  174. C
  175. C
  176. C**** Osher reversal composition:
  177. C
  178. C Vide -> Les invariants de Riemann ne se coupent pas
  179. C -> RETURN
  180. C
  181. COEFFG = 2.0D0 / GM1G
  182. COEFFD = 2.0D0 / GM1D
  183. UTILG = UNG + COEFFG * AG
  184. UTILD = UND - COEFFD * AD
  185. DU = UTILG - UTILD
  186. IF(DU .GT. ZERO)THEN
  187. C
  188. C
  189. C******* Calcul des intersections des Invariants de Riemann
  190. C
  191. C******* Protection des PARAMETER NMAX, ZERO
  192. C N.B. Les subroutines pouvent les changer
  193. C
  194. NMAX0 = NMAX
  195. ZERO0 = ZERO
  196. C
  197. CALL RACHUS(NMAX0,ZERO0,
  198. & GAMG,COEFFG,AG,UTILG,PG,
  199. & GAMD,COEFFD,AD,UTILD,PD,
  200. & USTAR,PSTAR,LOGNC,MESERR,LOGAN)
  201. C
  202. C******* Pas de convergence de la mèthode de Newton-Rapson en RACHUS
  203. C
  204. IF(LOGNC) GOTO 9999
  205. C
  206. C******* Calcul des etats a Gauche et a Droite du champ linearment dégénéré
  207. C
  208. CELLG = (PSTAR/PG)**(1.0D0/GAMG)
  209. CELLD = (PSTAR/PD)**(1.0D0/GAMD)
  210. ASTARG=AG*CELLG**(1.0D0/COEFFG)
  211. ASTARD=AD*CELLD**(1.0D0/COEFFD)
  212. RSTARG=ROG*CELLG
  213. RSTARD=ROD*CELLD
  214. MSTARG = USTAR / ASTARG
  215. MSTARD = USTAR / ASTARD
  216. USTAR2 = USTAR*USTAR
  217. HTSG = (ASTARG * ASTARG) / GM1G +0.5D0*(USTAR2+UTG2+UVG2)
  218. HTSD = (ASTARD * ASTARD) / GM1D +0.5D0*(USTAR2+UTD2+UVD2)
  219. C
  220. C******* CFL
  221. C
  222. AMG = ABS(MSTARG)
  223. CELLT0 = (2.0D0*GAMG + (AMG*(3.0D0-GAMG)))/(GAMG+3.0D0)
  224. & /((AMG+1.0D0)*ASTARG)
  225. CELLT = MIN(CELLT,CELLT0)
  226. AMD = ABS(MSTARD)
  227. CELLT0 = (2.0D0*GAMD + (AMD*(3.0D0-GAMD)))/(GAMD+3.0D0)
  228. & /((AMD+1.0D0)*ASTARD)
  229. CELLT = MIN(CELLT,CELLT0)
  230. C
  231. C******* Partie antidiffusive du flux
  232. C
  233. IF(USTAR .GT. 0.0D0)THEN
  234. CALL FLMVL2(NESP,
  235. & GAMD,RSTARD,MSTARD,ASTARD,UTD,UVD,HTSD,YD,FLU2)
  236. C
  237. DO I1 = 1, NESP+5
  238. FLU1(I1) = FLU1(I1) - FLU2(I1)
  239. ENDDO
  240. C
  241. CALL FLMVL2(NESP,
  242. & GAMG,RSTARG,MSTARG,ASTARG,UTG,UVG,HTSG,YG,FLU2)
  243. C
  244. DO I1 = 1, NESP+5
  245. FLU1(I1) = FLU1(I1) + FLU2(I1)
  246. ENDDO
  247. ELSE
  248. CALL FLPVL2(NESP,
  249. & GAMD,RSTARD,MSTARD,ASTARD,UTD,UVD,HTSD,YD,FLU2)
  250. C
  251. DO I1 = 1, NESP+5
  252. FLU1(I1) = FLU1(I1) + FLU2(I1)
  253. ENDDO
  254. C
  255. CALL FLPVL2(NESP,
  256. & GAMG,RSTARG,MSTARG,ASTARG,UTG,UVG,HTSG,YG,FLU2)
  257. C
  258. DO I1 = 1, NESP+5
  259. FLU1(I1) = FLU1(I1) - FLU2(I1)
  260. ENDDO
  261. ENDIF
  262. C
  263. C******* Correction de Larrouturou pour la TVD des fractions massiques.
  264. C pour la vitesse tangentielle
  265. C
  266. C N.B. Pour le solver de Riemann exact cette propriete est
  267. C valide
  268. C Dans le cas de vide ce n'est pas necessaire:
  269. C VanLeer a la TVD des fractions massiques.
  270. C
  271. LOGI = LARCO
  272. IF(LOGI)THEN
  273. CELL = FLU1(1)
  274. IF(CELL .GT. 0.0D0)THEN
  275. FLU1(3) = CELL * UTG
  276. FLU1(4) = CELL * UVG
  277. DO I1 = 1, NESP
  278. FLU1(I1+5) = CELL * YG(I1)
  279. ENDDO
  280. ELSE
  281. FLU1(3) = CELL * UTD
  282. FLU1(4) = CELL * UVD
  283. DO I1 = 1, NESP
  284. FLU1(I1+5) = CELL * YD(I1)
  285. ENDDO
  286. ENDIF
  287. ENDIF
  288. ENDIF
  289. C
  290. 9999 CONTINUE
  291. RETURN
  292. END
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302.  
  303.  

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