Télécharger konfl1.eso

Retour à la liste

Numérotation des lignes :

  1. C KONFL1 SOURCE BECC 10/05/05 21:15:13 6674
  2. SUBROUTINE KONFL1(LOGME,INDMET,
  3. & IROF,IVITF,IPF,IGAMF,IFRMAF,
  4. & ICHPSU,ICHPDI,
  5. & MELEMC,MELEMF,MELEFE,MELLIM,
  6. & IUINF,IUPRI,
  7. & ICHFLU,DT,
  8. & LOGNC,LOGAN,MESERR)
  9. C************************************************************************
  10. C
  11. C PROJET : CASTEM 2000
  12. C
  13. C NOM : KONFL1
  14. C
  15. C DESCRIPTION : Voir KON11
  16. C
  17. C Cas deux dimensions, gaz "calorically perfect"
  18. C
  19. C LANGAGE : FORTRAN 77 + ESOPE 2000 (avec estensions CISI)
  20. C
  21. C AUTEUR : A. BECCANTINI, DRN/DMT/SEMT/TTMF
  22. C
  23. C************************************************************************
  24. C
  25. C ENTREES
  26. C
  27. C
  28. C 1) PARAMETRES
  29. C
  30. C LOGME : (LOGICAL); .TRUE. -> MULTI-ESPECES
  31. C .FALSE. -> MONO-ESPECE
  32. C
  33. C INDMET : 1 Godunov
  34. C
  35. C 2 van Leer FVS
  36. C
  37. C 3 van Leer Hanel FVS
  38. C
  39. C 4 HUS (Van Leer FVS + Osher FDS)
  40. C
  41. C 5 HUS (Van Leer - Hanel FVS + Osher FDS)
  42. C
  43. C 6 AUSM+
  44. C
  45. C 7 ROE (GAMMA = 0.5 * (GAMG + GAMD))
  46. C
  47. C 8 SS
  48. C
  49. C 9 AUSM+ Low Mach
  50. C
  51. C 10 Rusanvov
  52. C
  53. C 11 Rusanvov Low Mach
  54. C
  55. C 12 Centrée
  56. C
  57. C 13 RoeLM
  58. C
  59. C 14 HLLC
  60. C
  61. C 15 HLLCLM
  62. C
  63. C 2) Pointeurs des MCHAMLs
  64. C
  65. C IROF : MCHAML sur "FACEL" contenant la masse volumique
  66. C ("gauche" et "droite");
  67. C
  68. C IVITF : MCHAML sur "FACEL" contenant la vitesse dans le repaire
  69. C local (n,t) et les cosinus directeurs des repaire local;
  70. C
  71. C IPF : MCHAML sur "FACEL" contenant la pression;
  72. C
  73. C IGAMF : MCHAML sur "FACEL" contenant le gamma;
  74. C
  75. C IFRAMAF : MCHAML sur "FACEL", contenant les fractions massiques
  76. C si LOGME = .TRUE.;
  77. C LOGME = .FALSE. -> IFRAMAF = 0
  78. C
  79. C
  80. C 3) Pointeurs de CHPOINTs de la table DOMAINE
  81. C
  82. C ICHPSU : CHPOINT "FACE" contenant la surface des faces
  83. C
  84. C ICHPDI : CHPOINT "CENTRE" contenant le diametre minimum
  85. C de chaque element
  86. C
  87. C
  88. C 4) Pointeurs de MELEME
  89. C
  90. C MELEMC : MELEME 'CENTRE' du SPG des CENTRES
  91. C
  92. C MELEMF : MELEME 'FACE' du SPG des FACES
  93. C
  94. C MELEFE : MELEME 'FACEL' du connectivité FACES -> ELEM
  95. C
  96. C MELLIM : MELEME SPG des conditions aux bords
  97. C Sur ces points on ne calcule pas le flux!
  98. C
  99. C 5) Cas Bas MACH
  100. C
  101. C IUINF : CHPOINT, one component, "cut-off velocity"
  102. C 0 if no Bas MACH
  103. C
  104. C IUPRI : CHPOINT, one component, "minimum reference velocity"
  105. C 0 if no BAs Mach
  106. C
  107. C
  108. C SORTIES
  109. C
  110. C ICHFLU : pointeur de CHPOINT "FACE" des flux aux interfaces:
  111. C
  112. C DT : pas de temps pour le respect de la CFL-like condition
  113. C DT < DIAMMIN /2 /max(Lambda_i)
  114. C En maillage regulier cette condition garantie la
  115. C non-interaction des ondes
  116. C
  117. C LOGNC : (LOGICAL): si .TRUE. la methode de Newton-Rapson, utilisée
  118. C dans pour la solution du probleme Riemann exacte ou dans
  119. C l'algorithm HUS, n'a pas bien marchéee; MESERR = 'Goudunov'
  120. C ou 'HUS'.
  121. C
  122. C LOGAN : (LOGICAL): si .TRUE. une anomalie à été detectée
  123. C
  124. C MESERR : pour l'ecriture des messages d'erreurs
  125. C
  126. C************************************************************************
  127. C
  128. C HISTORIQUE (Anomalies et modifications éventuelles)
  129. C
  130. C HISTORIQUE :
  131. C 01/05/2005 par T. KLOCZKO (DEN/DM2S/SFME/LTMF)
  132. C Ajout d'une méthode de décentrement pour les écoulements
  133. C bas-Mach (ROE Low-Mach)
  134. C
  135. C 04/05/2010 par A. BECCANTINI (DEN/DM2S/SFME/LTMF)
  136. C Ajout des méthodes de décentrement HLLC and HLLCLM
  137. C (pour les écoulements bas-Mach).
  138. C
  139. C
  140. C************************************************************************
  141. C
  142. C
  143. C N.B.: On suppose qu'on a déjà controllé RO, P > 0
  144. C GAMMA \in (1,3)
  145. C Y \in (0,1)
  146. C Si non il faut le faire!!!
  147. C
  148. C************************************************************************
  149. C
  150. C
  151. C**** Variables de COOPTIO
  152. C
  153. C INTEGER IPLLB, IERPER, IERMAX, IERR, INTERR
  154. C & ,IOTER, IOLEC, IOIMP, IOCAR, IOACQ
  155. C & ,IOPER, IOSGB, IOGRA, IOSAU, IORES
  156. C & ,IECHO, IIMPI, IOSPI
  157. C & ,IDIM
  158. C & ,MCOORD
  159. C & ,IFOMOD, NIFOUR, IFOUR, NSDPGE, IONIVE
  160. C & ,NGMAXY, IZROSF, ISOTYP, IOSCR,LTEXLU
  161. C & ,NORINC,NORVAL,NORIND,NORVAD
  162. C & ,NUCROU, IPSAUV, IFICLE, IPREFI
  163. C & ,IREFOR, ISAFOR
  164. C
  165. C
  166. IMPLICIT INTEGER(I-N)
  167. INTEGER I1
  168. & ,INDMET
  169. & ,IROF,IVITF,IPF,IGAMF,IFRMAF
  170. & ,ICHPSU,ICHPDI,MELEMC,MELEMF,MELEFE
  171. & ,IUINF,IUPRI
  172. & ,IGEOMC,IGEOMF
  173. & ,ICHFLU
  174. & ,NESP, NFAC
  175. & ,NLCF, NGCEG, NGCED, NLCEG, NLCED
  176. & ,NGCF, NLCF1, SPG1, SPG2, NLFL
  177. REAL*8 DT, UNSDT, CELLT
  178. & , ROG, UNG, UTG, PG, GAMG
  179. & , ROD, UND, UTD, PD, GAMD
  180. & , SURF,CNX, CNY, CTX , CTY
  181. & , CELL, DIAMG, DIAMD, DIAM
  182. & , ASON, LAMBDA
  183. & , V_INF
  184. C
  185. LOGICAL LOGME, LOGNC, LOGAN
  186. CHARACTER*(40) MESERR
  187. CHARACTER*(8) TYPE
  188. C
  189. C**** LES INCLUDES
  190. C
  191. -INC CCOPTIO
  192. -INC SMCHAML
  193. POINTEUR MELVNX.MELVAL, MELVNY.MELVAL,
  194. & MELT1X.MELVAL, MELT1Y.MELVAL
  195. POINTEUR MELVUN.MELVAL, MELVUT.MELVAL
  196. POINTEUR MELRO.MELVAL, MELP.MELVAL,
  197. & MELGAM.MELVAL
  198. -INC SMCHPOI
  199. POINTEUR MPOVSU.MPOVAL, MPOVDI.MPOVAL
  200. & , MPOFLU.MPOVAL
  201. & , MPUINF.MPOVAL, MPUPRI.MPOVAL
  202. POINTEUR MCHAMY.MCHAML
  203. -INC SMELEME
  204. POINTEUR MELLIM.MELEME
  205. -INC SMLMOTS
  206. -INC SMLENTI
  207. POINTEUR MLELIM.MLENTI
  208. C
  209. C**** Les fractiones massiques.
  210. C
  211. SEGMENT FRAMAS
  212. REAL*8 YET(NESP)
  213. ENDSEGMENT
  214. POINTEUR FRAMAG.FRAMAS, FRAMAD.FRAMAS
  215. C
  216. C**** Les flux aux interface dans le repaire (n,t)
  217. C
  218. SEGMENT IFLUX
  219. REAL*8 FLUX(NESP+4)
  220. ENDSEGMENT
  221. POINTEUR IFLU1.IFLUX, IFLU2.IFLUX
  222. C
  223. C**** KRIPAD pour la correspondance global/local des conditions limits
  224. C
  225. CALL KRIPAD(MELLIM,MLELIM)
  226. c SEGACT MELLIM
  227. C
  228. C**** Initialisation des MCHAMLs
  229. C
  230. C**** Masse volumique
  231. C
  232. MCHEL1 = IROF
  233. SEGACT MCHEL1
  234. MCHAM1 = MCHEL1.ICHAML(1)
  235. SEGACT MCHAM1
  236. MELRO = MCHAM1.IELVAL(1)
  237. SEGDES MCHEL1
  238. SEGDES MCHAM1
  239. C
  240. C**** Pression
  241. C
  242. MCHEL1 = IPF
  243. SEGACT MCHEL1
  244. MCHAM1 = MCHEL1.ICHAML(1)
  245. SEGACT MCHAM1
  246. MELP = MCHAM1.IELVAL(1)
  247. SEGDES MCHEL1
  248. SEGDES MCHAM1
  249. C
  250. C**** Gamma
  251. C
  252. MCHEL1 = IGAMF
  253. SEGACT MCHEL1
  254. MCHAM1 = MCHEL1.ICHAML(1)
  255. SEGACT MCHAM1
  256. MELGAM = MCHAM1.IELVAL(1)
  257. SEGDES MCHEL1
  258. SEGDES MCHAM1
  259. C
  260. C**** Vitesse et cosinus directeurs du repere (n,t)
  261. C
  262. MCHEL1 = IVITF
  263. SEGACT MCHEL1
  264. C
  265. C**** La vitesse a comme SPG MELEFE
  266. C Le cosinus directeurs ont comme SPG MELEMF
  267. C
  268. C MCHAM1 -> Cosinus directeurs
  269. C MCHAM2 -> Vitesse
  270. C
  271. SPG1 = MCHEL1.IMACHE(1)
  272. SPG2 = MCHEL1.IMACHE(2)
  273. IF((SPG1 .EQ. MELEMF) .AND. (SPG2 .EQ. MELEFE))THEN
  274. MCHAM1 = MCHEL1.ICHAML(1)
  275. MCHAM2 = MCHEL1.ICHAML(2)
  276. ELSEIF((SPG1 .EQ. MELEFE) .AND. (SPG2 .EQ. MELEMF))THEN
  277. MCHAM1 = MCHEL1.ICHAML(2)
  278. MCHAM2 = MCHEL1.ICHAML(1)
  279. ELSE
  280. LOGAN = .TRUE.
  281. GOTO 9999
  282. ENDIF
  283. SEGACT MCHAM1
  284. MELVNX = MCHAM1.IELVAL(1)
  285. MELVNY = MCHAM1.IELVAL(2)
  286. MELT1X = MCHAM1.IELVAL(3)
  287. MELT1Y = MCHAM1.IELVAL(4)
  288. SEGDES MCHAM1
  289. SEGACT MCHAM2
  290. MELVUN = MCHAM2.IELVAL(1)
  291. MELVUT = MCHAM2.IELVAL(2)
  292. SEGDES MCHAM2
  293. SEGDES MCHEL1
  294. C
  295. C**** Fractions massiques
  296. C
  297. IF(LOGME)THEN
  298. MCHEL1 = IFRMAF
  299. SEGACT MCHEL1
  300. MCHAMY = MCHEL1.ICHAML(1)
  301. SEGACT MCHAMY
  302. C
  303. C******* Numero d'especes dans les equations d'Euler
  304. C
  305. NESP = MCHAMY.IELVAL(/1)
  306. DO I1 = 1, NESP
  307. MELVA1 = MCHAMY.IELVAL(I1)
  308. SEGACT MELVA1
  309. ENDDO
  310. SEGINI FRAMAG
  311. SEGINI FRAMAD
  312. SEGDES MCHEL1
  313. ELSE
  314. C
  315. C******* Definition minimale de YET, necessaire pour transmetre YET aux
  316. C subroutines FORTRAN qui calculent les flux
  317. C
  318. NESP = 1
  319. SEGINI FRAMAG
  320. SEGINI FRAMAD
  321. NESP = 0
  322. ENDIF
  323. C
  324. C**** Initialisation des MELEMEs
  325. C
  326. C 'CENTRE', 'FACEL'
  327. C
  328. IPT2 = MELEFE
  329. SEGACT IPT2
  330. NFAC = IPT2.NUM(/2)
  331. C
  332. C**** KRIPAD pour la correspondance global/local de centre
  333. C
  334. CALL KRIPAD(MELEMC,MLENT1)
  335. C
  336. C**** MLENTI1 a MCORD.XCOORD(/1)/(IDIM+1) elements
  337. C
  338. C Si i est le numero global d'un noeud de ICEN,
  339. C MLENT1.LECT(i) contient sa position, i.e.
  340. C
  341. C I = numero global du noeud centre
  342. C MLENT1.LECT(i) = numero local du noeud centre
  343. C
  344. C MLENT1 déjà activé, i.e.
  345. C
  346. C SEGACT MLENT1
  347. C
  348. C
  349. C**** KRIPAD pour la correspondance global/local de 'FACE'
  350. C
  351. CALL KRIPAD(MELEMF,MLENT2)
  352. C SEGACT MELNT2
  353. C
  354. C**** Initialisation de flux
  355. C
  356. SEGINI IFLU1
  357. SEGINI IFLU2
  358. C
  359. C**** IFLU2 = segment de travail en FLUVLH; c'est plus rapide le definir ici
  360. C
  361. C
  362. C**** CHPOINTs de la table DOMAINE
  363. C
  364. CALL LICHT(ICHPSU,MPOVSU,TYPE,IGEOMF)
  365. CALL LICHT(ICHPDI,MPOVDI,TYPE,IGEOMC)
  366. C
  367. C**** LICHT active les MPOVALs en *MOD
  368. C
  369. C i.e.
  370. C
  371. C SEGACT MPOVSU*MOD
  372. C SEGACT MPOVDI*MOD
  373. C
  374. IF(IGEOMF .NE. MELEMF)THEN
  375. MESERR = 'Il ne faut pas jouer avec la console. '
  376. LOGAN = .TRUE.
  377. GOTO 9999
  378. ENDIF
  379. IF(IGEOMC .NE. MELEMC)THEN
  380. MESERR = 'Il ne faut pas jouer avec la console. '
  381. LOGAN = .TRUE.
  382. GOTO 9999
  383. ENDIF
  384. C
  385. C**** Les FLUX aux face
  386. C
  387. C La densité
  388. C
  389. CALL LICHT(ICHFLU,MPOFLU,TYPE,IGEOMF)
  390. C
  391. C SEGACT MPOFLU*MOD
  392. C
  393. IF(IGEOMC .NE. MELEMC)THEN
  394. MESERR = 'Il ne faut pas jouer avec la console. '
  395. LOGAN = .TRUE.
  396. GOTO 9999
  397. ENDIF
  398. C
  399. C**** Activation des MCHAMLs
  400. C
  401. SEGACT MELRO
  402. SEGACT MELP
  403. SEGACT MELGAM
  404. SEGACT MELVUN
  405. SEGACT MELVUT
  406. SEGACT MELVNX
  407. SEGACT MELVNY
  408. SEGACT MELT1X
  409. SEGACT MELT1Y
  410. C
  411. C**** Bas Mach
  412. C
  413. IF(IUINF .NE. 0)THEN
  414. CALL LICHT(IUPRI,MPUPRI,TYPE,IGEOMC)
  415. CALL LICHT(IUINF,MPUINF,TYPE,IGEOMC)
  416. C SEGACT MPUPRI*MOD
  417. C SEGACT MPUINF*MOD
  418. ELSE
  419. MPUPRI=0
  420. MPUINF=0
  421. ENDIF
  422. C
  423. C**** Initialisation de 1/DT
  424. C
  425. UNSDT = 0.0D0
  426. C
  427. C**** BOUCLE SUR FACEL pour le calcul du FLUX
  428. C
  429. DO NLCF = 1, NFAC
  430. C
  431. C******* NLCF = numero local du centre de facel
  432. C NGCF = numero global du centre de facel
  433. C NLCF1 = numero local du centre de face
  434. C NGCEG = numero global du centre ELT "gauche"
  435. C NLCEG = numero local du centre ELT "gauche"
  436. C NGCED = numero global du centre ELT "droite"
  437. C NLCED = numero local du centre ELT "droite"
  438. C
  439. NGCEG = IPT2.NUM(1,NLCF)
  440. NGCED = IPT2.NUM(3,NLCF)
  441. NGCF = IPT2.NUM(2,NLCF)
  442. NLCF1 = MLENT2.LECT(NGCF)
  443. NLCEG = MLENT1.LECT(NGCEG)
  444. NLCED = MLENT1.LECT(NGCED)
  445. NLFL = MLELIM.LECT(NGCF)
  446. C
  447. C******* NLCF != NLCF1 -> l'auteur (MOI) n'a rien compris.
  448. C
  449. IF(NLCF .NE. NLCF1)THEN
  450. MESERR = 'Il ne faut pas jouer avec la console. '
  451. LOGAN = .TRUE.
  452. GOTO 9999
  453. ENDIF
  454. IF(NLFL .EQ. 0)THEN
  455. C
  456. C******* Recuperation des Etats "gauche" et "droite"
  457. C
  458. ROG = MELRO.VELCHE(1,NLCF)
  459. UNG = MELVUN.VELCHE(1,NLCF)
  460. UTG = MELVUT.VELCHE(1,NLCF)
  461. PG = MELP.VELCHE(1,NLCF)
  462. GAMG = MELGAM.VELCHE(1,NLCF)
  463. C
  464. ROD = MELRO.VELCHE(3,NLCF)
  465. UND = MELVUN.VELCHE(3,NLCF)
  466. UTD = MELVUT.VELCHE(3,NLCF)
  467. PD = MELP.VELCHE(3,NLCF)
  468. GAMD = MELGAM.VELCHE(3,NLCF)
  469. C
  470. CNX = MELVNX.VELCHE(1,NLCF)
  471. CNY = MELVNY.VELCHE(1,NLCF)
  472. CTX = MELT1X.VELCHE(1,NLCF)
  473. CTY = MELT1Y.VELCHE(1,NLCF)
  474. C
  475. C******* Le fractiones massiques
  476. C
  477. IF(LOGME)THEN
  478. DO I1 = 1, NESP
  479. MELVA1 = MCHAMY.IELVAL(I1)
  480. FRAMAG.YET(I1) = MELVA1.VELCHE(1,NLCF)
  481. FRAMAD.YET(I1) = MELVA1.VELCHE(3,NLCF)
  482. ENDDO
  483. ENDIF
  484. C
  485. C******* On a defini (ROg,ROUNg,ROUTg,Pg,(Yg)), (ROd,ROUNd,ROUTd,Pd,(Yd))
  486. C et on a déjà verifié ROg, ROd, Pg, Pd > 0 et 0<Y_i<1
  487. C
  488. C
  489. C******* Calcul du flux aux interfaces
  490. C
  491. IF(INDMET .EQ. 1)THEN
  492. C
  493. C******* GODUNOV
  494. C FLURIE en FORTRAN STANDARD
  495. C CELLT =
  496. C
  497. CALL FLURIE(NESP,
  498. & GAMG,ROG,PG,UNG,UTG,
  499. & GAMD,ROD,PD,UND,UTD,
  500. & FRAMAG.YET,FRAMAD.YET,
  501. & IFLU1.FLUX,
  502. & CELLT,
  503. & LOGNC,LOGAN,MESERR)
  504. C
  505. ELSEIF(INDMET .EQ. 2)THEN
  506. C
  507. C******* Van Leer FVS
  508. C
  509. C N.B: FLUXVL en FORTRAN pure
  510. C FRAMAG.YET = table d'un pointeur -> table
  511. C La meme chose pour FRAMAD.YET, IFLU1.FLUX,
  512. C IFLU2.FLUX
  513. C
  514. CALL FLUXVL(NESP,
  515. & GAMG,ROG,PG,UNG,UTG,
  516. & GAMD,ROD,PD,UND,UTD,
  517. & FRAMAG.YET,FRAMAD.YET,
  518. & IFLU1.FLUX,IFLU2.FLUX,
  519. & CELLT)
  520. ELSEIF(INDMET .EQ. 3)THEN
  521. C
  522. C******* Van Leer - Hanel FVS
  523. C
  524. C N.B: FLUVLH en FORTRAN pure
  525. C FRAMAG.YET = table d'un pointeur -> table
  526. C La meme chose pour FRAMAD.YET, IFLU1.FLUX,
  527. C IFLU2.FLUX
  528. C
  529. CALL FLUVLH(NESP,
  530. & GAMG,ROG,PG,UNG,UTG,
  531. & GAMD,ROD,PD,UND,UTD,
  532. & FRAMAG.YET,FRAMAD.YET,
  533. & IFLU1.FLUX,IFLU2.FLUX,
  534. & CELLT)
  535. ELSEIF(INDMET .EQ. 4)THEN
  536. C
  537. C******* HUS (Van Leer FVS + Osher FDS)
  538. C
  539. CALL FLHUS1(NESP,
  540. & GAMG,ROG,PG,UNG,UTG,
  541. & GAMD,ROD,PD,UND,UTD,
  542. & FRAMAG.YET,FRAMAD.YET,
  543. & IFLU1.FLUX,IFLU2.FLUX,
  544. & CELLT,
  545. & LOGNC,MESERR,LOGAN)
  546. ELSEIF(INDMET .EQ. 5)THEN
  547. C
  548. C******* HUS (Van Leer - Hanel FVS + Osher FDS)
  549. C
  550. CALL FLHUS2(NESP,
  551. & GAMG,ROG,PG,UNG,UTG,
  552. & GAMD,ROD,PD,UND,UTD,
  553. & FRAMAG.YET,FRAMAD.YET,
  554. & IFLU1.FLUX,IFLU2.FLUX,
  555. & CELLT,
  556. & LOGNC,MESERR,LOGAN)
  557. ELSEIF(INDMET .EQ. 6)THEN
  558. C
  559. C******* AUSM+ (Liou)
  560. C
  561. CALL FAUSMP(NESP,
  562. & GAMG,ROG,PG,UNG,UTG,
  563. & GAMD,ROD,PD,UND,UTD,
  564. & FRAMAG.YET,FRAMAD.YET,
  565. & IFLU1.FLUX,
  566. & CELLT)
  567. ELSEIF(INDMET .EQ. 7)THEN
  568. C
  569. C******* Roe Scheme
  570. C
  571. CALL FROEMO(NESP,
  572. & GAMG,ROG,PG,UNG,UTG,
  573. & GAMD,ROD,PD,UND,UTD,
  574. & FRAMAG.YET,FRAMAD.YET,
  575. & IFLU1.FLUX,
  576. & CELLT)
  577. ELSEIF(INDMET .EQ. 8)THEN
  578. C
  579. C******* Choc-Choc
  580. C
  581. CALL FCOLCP(NESP,
  582. & GAMG,ROG,PG,UNG,UTG,
  583. & GAMD,ROD,PD,UND,UTD,
  584. & FRAMAG.YET,FRAMAD.YET,
  585. & IFLU1.FLUX,
  586. & CELLT,
  587. & LOGNC,LOGAN,MESERR)
  588. ELSEIF(INDMET .EQ. 9)THEN
  589. C
  590. C******* AUSM+(P) for low Mach number flows (Edwards and Liou)
  591. C
  592. V_INF=MAX(MPUINF.VPOCHA(NLCEG,1),
  593. & MPUINF.VPOCHA(NLCED,1),
  594. & MPUPRI.VPOCHA(NLCEG,1),
  595. & MPUPRI.VPOCHA(NLCED,1))
  596. CALL FAUSM2(NESP,
  597. & GAMG,ROG,PG,UNG,UTG,
  598. & GAMD,ROD,PD,UND,UTD,
  599. & FRAMAG.YET,FRAMAD.YET,
  600. & V_INF,
  601. & IFLU1.FLUX,
  602. & CELLT)
  603. ELSEIF(INDMET .EQ. 10)THEN
  604. C
  605. C******* Rusanov scheme
  606. C
  607. CALL FRUSAN(NESP,
  608. & GAMG,ROG,PG,UNG,UTG,
  609. & GAMD,ROD,PD,UND,UTD,
  610. & FRAMAG.YET,FRAMAD.YET,
  611. & IFLU1.FLUX,
  612. & CELLT)
  613. ELSEIF(INDMET .EQ. 11)THEN
  614. C
  615. C******* Rusanov scheme for Low-Mach number flows
  616. C
  617. V_INF=MAX(MPUINF.VPOCHA(NLCEG,1),
  618. & MPUINF.VPOCHA(NLCED,1),
  619. & MPUPRI.VPOCHA(NLCEG,1),
  620. & MPUPRI.VPOCHA(NLCED,1))
  621. CALL FRUSBM(NESP,
  622. & GAMG,ROG,PG,UNG,UTG,
  623. & GAMD,ROD,PD,UND,UTD,
  624. & FRAMAG.YET,FRAMAD.YET,
  625. & V_INF,
  626. & IFLU1.FLUX,
  627. & CELLT)
  628. ELSEIF(INDMET .EQ. 12)THEN
  629. C
  630. C******* Centered scheme
  631. C
  632. CALL FVCENT(NESP,
  633. & GAMG,ROG,PG,UNG,UTG,
  634. & GAMD,ROD,PD,UND,UTD,
  635. & FRAMAG.YET,FRAMAD.YET,
  636. & IFLU1.FLUX,
  637. & CELLT)
  638. ELSEIF(INDMET .EQ. 13)THEN
  639. C
  640. C******* Roe-Turkel scheme for Low-Mach number flows
  641. C
  642. V_INF=MAX(MPUINF.VPOCHA(NLCEG,1),
  643. & MPUINF.VPOCHA(NLCED,1),
  644. & MPUPRI.VPOCHA(NLCEG,1),
  645. & MPUPRI.VPOCHA(NLCED,1))
  646. CALL FROEBM(NESP,
  647. & GAMG,ROG,PG,UNG,UTG,
  648. & GAMD,ROD,PD,UND,UTD,
  649. & FRAMAG.YET,FRAMAD.YET,
  650. & V_INF,
  651. & IFLU1.FLUX,
  652. & CELLT)
  653. ELSEIF(INDMET .EQ. 14)THEN
  654. C
  655. C******* HLLC
  656. C
  657. CALL FLHLLC(NESP,
  658. & GAMG,ROG,PG,UNG,UTG,
  659. & GAMD,ROD,PD,UND,UTD,
  660. & FRAMAG.YET,FRAMAD.YET,
  661. & IFLU1.FLUX,
  662. & CELLT)
  663. ELSEIF(INDMET .EQ. 15)THEN
  664. C
  665. C******* HLLC-Turkel scheme for Low-Mach number flows
  666. C
  667. V_INF=MAX(MPUINF.VPOCHA(NLCEG,1),
  668. & MPUINF.VPOCHA(NLCED,1),
  669. & MPUPRI.VPOCHA(NLCEG,1),
  670. & MPUPRI.VPOCHA(NLCED,1))
  671. CALL FHLLCL(NESP,
  672. & GAMG,ROG,PG,UNG,UTG,
  673. & GAMD,ROD,PD,UND,UTD,
  674. & FRAMAG.YET,FRAMAD.YET,
  675. & V_INF,
  676. & IFLU1.FLUX,
  677. & CELLT)
  678. ELSEIF(INDMET .EQ. 16)THEN
  679. C
  680. C******* AUSM+up for Low-Mach number flows
  681. C
  682. V_INF=MAX(MPUINF.VPOCHA(NLCEG,1),
  683. & MPUINF.VPOCHA(NLCED,1),
  684. & MPUPRI.VPOCHA(NLCEG,1),
  685. & MPUPRI.VPOCHA(NLCED,1))
  686. CALL FAU_UP(NESP,
  687. & GAMG,ROG,PG,UNG,UTG,
  688. & GAMD,ROD,PD,UND,UTD,
  689. & FRAMAG.YET,FRAMAD.YET,
  690. & V_INF,
  691. & IFLU1.FLUX,
  692. & CELLT)
  693. ENDIF
  694. C
  695. IF(LOGAN) GOTO 9999
  696. IF(LOGNC) GOTO 9999
  697. C
  698. C******* Ecriture des flux
  699. C
  700. C FLUX(1) = RO Un RO Un
  701. C FLUX(2) = RO Un Un + P -> RO Un Ux + P CNX
  702. C FLUX(3) = RO Un Ut -> RO Un Uy + P CNY
  703. C FLUX(4) = RO Un Ht RO Un Ht
  704. C
  705. SURF = MPOVSU.VPOCHA(NLCF,1)
  706. MPOFLU.VPOCHA(NLCF,1) =
  707. & (IFLU1.FLUX(1) * SURF )
  708. MPOFLU.VPOCHA(NLCF,2) =
  709. & ((IFLU1.FLUX(2)*CNX+IFLU1.FLUX(3)*CTX) * SURF)
  710. MPOFLU.VPOCHA(NLCF,3) =
  711. & ((IFLU1.FLUX(2)*CNY+IFLU1.FLUX(3)*CTY) * SURF)
  712. MPOFLU.VPOCHA(NLCF,4) =
  713. & (IFLU1.FLUX(4) * SURF)
  714. IF(LOGME)THEN
  715. DO I1 = 1, NESP
  716. MPOFLU.VPOCHA(NLCF,4+I1)= IFLU1.FLUX(4+I1)* SURF
  717. ENDDO
  718. ENDIF
  719. C
  720. C******* Calcul du pas du temps (CFL)
  721. C
  722. C
  723. C
  724. C****** a) etat a l'interface
  725. C
  726. C CELLT a la dimension du reciproque d'une vitesse
  727. C
  728. DIAMG = MPOVDI.VPOCHA(NLCEG,1)
  729. DIAMD = MPOVDI.VPOCHA(NLCED,1)
  730. DIAM = MIN(DIAMG,DIAMD)
  731. CELL = 1.0D0/(DIAM*CELLT)
  732. IF(CELL .GT. UNSDT)THEN
  733. UNSDT = CELL
  734. ENDIF
  735. C
  736. C****** b) etat gauche
  737. C
  738. ASON = SQRT(GAMG*PG/ROG)
  739. LAMBDA = ABS(UNG) + ASON
  740. CELL = LAMBDA / DIAM
  741. IF(CELL .GT. UNSDT)THEN
  742. UNSDT = CELL
  743. ENDIF
  744. C
  745. C****** C) etat droite
  746. C
  747. ASON = SQRT(GAMD*PD/ROD)
  748. LAMBDA = ABS(UND) + ASON
  749. CELL = LAMBDA / DIAM
  750. IF(CELL .GT. UNSDT)THEN
  751. UNSDT = CELL
  752. ENDIF
  753. ENDIF
  754. C
  755. C**** Fin boucle sur FACEL
  756. C
  757. ENDDO
  758. C
  759. C**** Pas du temps (condition de non interaction en 1D)
  760. C
  761. DT = 0.5D0 / UNSDT
  762. C
  763. C**** Desactivation des segments et
  764. C on detruit les MCHAMLs
  765. C
  766. C
  767. C**** SEGSUP FRAMAG
  768. C SEGSUP FRAMAD
  769. C
  770. C meme si LOGME = .FALSE.
  771. C
  772. SEGSUP FRAMAG
  773. SEGSUP FRAMAD
  774. C
  775. SEGSUP MLENT1
  776. SEGSUP MLENT2
  777. SEGDES IPT2
  778. C
  779. SEGSUP IFLU1
  780. SEGSUP IFLU2
  781. C
  782. SEGDES MPOVSU
  783. SEGDES MPOVDI
  784. C
  785. SEGDES MPOFLU
  786. C
  787. SEGDES MELRO
  788. SEGDES MELP
  789. SEGDES MELGAM
  790. SEGDES MELVUN
  791. SEGDES MELVUT
  792. SEGDES MELVNX
  793. SEGDES MELVNY
  794. SEGDES MELT1X
  795. SEGDES MELT1Y
  796. C
  797. IF(MPUPRI .NE. 0)THEN
  798. SEGDES MPUPRI
  799. SEGDES MPUINF
  800. ENDIF
  801. C
  802. IF(LOGME) THEN
  803. DO I1 = 1, NESP
  804. MELVA1 = MCHAMY.IELVAL(I1)
  805. SEGDES MELVA1
  806. ENDDO
  807. C
  808. SEGDES MCHAMY
  809. ENDIF
  810. SEGSUP MLELIM
  811. CC
  812. 9999 CONTINUE
  813. C
  814. RETURN
  815. END
  816. C
  817.  
  818.  
  819.  
  820.  
  821.  
  822.  
  823.  
  824.  
  825.  
  826.  
  827.  
  828.  
  829.  
  830.  
  831.  

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