Télécharger konfl1.eso

Retour à la liste

Numérotation des lignes :

konfl1
  1. C KONFL1 SOURCE OF166741 24/12/13 21:16:23 12097
  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. IMPLICIT INTEGER(I-N)
  151. INTEGER I1
  152. & ,INDMET
  153. & ,IROF,IVITF,IPF,IGAMF,IFRMAF
  154. & ,ICHPSU,ICHPDI,MELEMC,MELEMF,MELEFE
  155. & ,IUINF,IUPRI
  156. & ,IGEOMC,IGEOMF
  157. & ,ICHFLU
  158. & ,NESP, NFAC
  159. & ,NLCF, NGCEG, NGCED, NLCEG, NLCED
  160. & ,NGCF, NLCF1, SPG1, SPG2, NLFL
  161. REAL*8 DT, UNSDT, CELLT
  162. & , ROG, UNG, UTG, PG, GAMG
  163. & , ROD, UND, UTD, PD, GAMD
  164. & , SURF,CNX, CNY, CTX , CTY
  165. & , CELL, DIAMG, DIAMD, DIAM
  166. & , ASON, LAMBDA
  167. & , V_INF
  168. C
  169. LOGICAL LOGME, LOGNC, LOGAN
  170. CHARACTER*(40) MESERR
  171. CHARACTER*(8) TYPE
  172. C
  173. C**** LES INCLUDES
  174. C
  175.  
  176. -INC PPARAM
  177. -INC CCOPTIO
  178. -INC SMCHAML
  179. POINTEUR MELVNX.MELVAL, MELVNY.MELVAL,
  180. & MELT1X.MELVAL, MELT1Y.MELVAL
  181. POINTEUR MELVUN.MELVAL, MELVUT.MELVAL
  182. POINTEUR MELRO.MELVAL, MELP.MELVAL,
  183. & MELGAM.MELVAL
  184. -INC SMCHPOI
  185. POINTEUR MPOVSU.MPOVAL, MPOVDI.MPOVAL
  186. & , MPOFLU.MPOVAL
  187. & , MPUINF.MPOVAL, MPUPRI.MPOVAL
  188. POINTEUR MCHAMY.MCHAML
  189. -INC SMELEME
  190. POINTEUR MELLIM.MELEME
  191. -INC SMLMOTS
  192. -INC SMLENTI
  193. POINTEUR MLELIM.MLENTI
  194. C
  195. C**** Les fractiones massiques.
  196. C
  197. SEGMENT FRAMAS
  198. REAL*8 YET(NESP)
  199. ENDSEGMENT
  200. POINTEUR FRAMAG.FRAMAS, FRAMAD.FRAMAS
  201. C
  202. C**** Les flux aux interface dans le repaire (n,t)
  203. C
  204. SEGMENT IFLUX
  205. REAL*8 FLUX(NESP+4)
  206. ENDSEGMENT
  207. POINTEUR IFLU1.IFLUX, IFLU2.IFLUX
  208. C
  209. C**** KRIPAD pour la correspondance global/local des conditions limits
  210. C
  211. CALL KRIPAD(MELLIM,MLELIM)
  212. c SEGACT MELLIM
  213. C
  214. C**** Initialisation des MCHAMLs
  215. C
  216. C**** Masse volumique
  217. C
  218. MCHEL1 = IROF
  219. SEGACT MCHEL1
  220. MCHAM1 = MCHEL1.ICHAML(1)
  221. SEGACT MCHAM1
  222. MELRO = MCHAM1.IELVAL(1)
  223. SEGDES MCHEL1
  224. SEGDES MCHAM1
  225. C
  226. C**** Pression
  227. C
  228. MCHEL1 = IPF
  229. SEGACT MCHEL1
  230. MCHAM1 = MCHEL1.ICHAML(1)
  231. SEGACT MCHAM1
  232. MELP = MCHAM1.IELVAL(1)
  233. SEGDES MCHEL1
  234. SEGDES MCHAM1
  235. C
  236. C**** Gamma
  237. C
  238. MCHEL1 = IGAMF
  239. SEGACT MCHEL1
  240. MCHAM1 = MCHEL1.ICHAML(1)
  241. SEGACT MCHAM1
  242. MELGAM = MCHAM1.IELVAL(1)
  243. SEGDES MCHEL1
  244. SEGDES MCHAM1
  245. C
  246. C**** Vitesse et cosinus directeurs du repere (n,t)
  247. C
  248. MCHEL1 = IVITF
  249. SEGACT MCHEL1
  250. C
  251. C**** La vitesse a comme SPG MELEFE
  252. C Le cosinus directeurs ont comme SPG MELEMF
  253. C
  254. C MCHAM1 -> Cosinus directeurs
  255. C MCHAM2 -> Vitesse
  256. C
  257. SPG1 = MCHEL1.IMACHE(1)
  258. SPG2 = MCHEL1.IMACHE(2)
  259. IF((SPG1 .EQ. MELEMF) .AND. (SPG2 .EQ. MELEFE))THEN
  260. MCHAM1 = MCHEL1.ICHAML(1)
  261. MCHAM2 = MCHEL1.ICHAML(2)
  262. ELSEIF((SPG1 .EQ. MELEFE) .AND. (SPG2 .EQ. MELEMF))THEN
  263. MCHAM1 = MCHEL1.ICHAML(2)
  264. MCHAM2 = MCHEL1.ICHAML(1)
  265. ELSE
  266. LOGAN = .TRUE.
  267. GOTO 9999
  268. ENDIF
  269. SEGACT MCHAM1
  270. MELVNX = MCHAM1.IELVAL(1)
  271. MELVNY = MCHAM1.IELVAL(2)
  272. MELT1X = MCHAM1.IELVAL(3)
  273. MELT1Y = MCHAM1.IELVAL(4)
  274. SEGDES MCHAM1
  275. SEGACT MCHAM2
  276. MELVUN = MCHAM2.IELVAL(1)
  277. MELVUT = MCHAM2.IELVAL(2)
  278. SEGDES MCHAM2
  279. SEGDES MCHEL1
  280. C
  281. C**** Fractions massiques
  282. C
  283. IF(LOGME)THEN
  284. MCHEL1 = IFRMAF
  285. SEGACT MCHEL1
  286. MCHAMY = MCHEL1.ICHAML(1)
  287. SEGACT MCHAMY
  288. C
  289. C******* Numero d'especes dans les equations d'Euler
  290. C
  291. NESP = MCHAMY.IELVAL(/1)
  292. DO I1 = 1, NESP
  293. MELVA1 = MCHAMY.IELVAL(I1)
  294. SEGACT MELVA1
  295. ENDDO
  296. SEGINI FRAMAG
  297. SEGINI FRAMAD
  298. SEGDES MCHEL1
  299. ELSE
  300. C
  301. C******* Definition minimale de YET, necessaire pour transmetre YET aux
  302. C subroutines FORTRAN qui calculent les flux
  303. C
  304. NESP = 1
  305. SEGINI FRAMAG
  306. SEGINI FRAMAD
  307. NESP = 0
  308. ENDIF
  309. C
  310. C**** Initialisation des MELEMEs
  311. C
  312. C 'CENTRE', 'FACEL'
  313. C
  314. IPT2 = MELEFE
  315. SEGACT IPT2
  316. NFAC = IPT2.NUM(/2)
  317. C
  318. C**** KRIPAD pour la correspondance global/local de centre
  319. C
  320. CALL KRIPAD(MELEMC,MLENT1)
  321. C
  322. C**** MLENTI1 a MCORD.XCOORD(/1)/(IDIM+1) elements
  323. C
  324. C Si i est le numero global d'un noeud de ICEN,
  325. C MLENT1.LECT(i) contient sa position, i.e.
  326. C
  327. C I = numero global du noeud centre
  328. C MLENT1.LECT(i) = numero local du noeud centre
  329. C
  330. C MLENT1 déjà activé, i.e.
  331. C
  332. C SEGACT MLENT1
  333. C
  334. C
  335. C**** KRIPAD pour la correspondance global/local de 'FACE'
  336. C
  337. CALL KRIPAD(MELEMF,MLENT2)
  338. C SEGACT MELNT2
  339. C
  340. C**** Initialisation de flux
  341. C
  342. SEGINI IFLU1
  343. SEGINI IFLU2
  344. C
  345. C**** IFLU2 = segment de travail en FLUVLH; c'est plus rapide le definir ici
  346. C
  347. C
  348. C**** CHPOINTs de la table DOMAINE
  349. C
  350. CALL LICHT(ICHPSU,MPOVSU,TYPE,IGEOMF)
  351. CALL LICHT(ICHPDI,MPOVDI,TYPE,IGEOMC)
  352. C
  353. C**** LICHT active les MPOVALs en *MOD
  354. C
  355. C i.e.
  356. C
  357. C SEGACT MPOVSU*MOD
  358. C SEGACT MPOVDI*MOD
  359. C
  360. IF(IGEOMF .NE. MELEMF)THEN
  361. MESERR = 'Il ne faut pas jouer avec la console. '
  362. LOGAN = .TRUE.
  363. GOTO 9999
  364. ENDIF
  365. IF(IGEOMC .NE. MELEMC)THEN
  366. MESERR = 'Il ne faut pas jouer avec la console. '
  367. LOGAN = .TRUE.
  368. GOTO 9999
  369. ENDIF
  370. C
  371. C**** Les FLUX aux face
  372. C
  373. C La densité
  374. C
  375. CALL LICHT(ICHFLU,MPOFLU,TYPE,IGEOMF)
  376. C
  377. C SEGACT MPOFLU*MOD
  378. C
  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**** Activation des MCHAMLs
  386. C
  387. SEGACT MELRO
  388. SEGACT MELP
  389. SEGACT MELGAM
  390. SEGACT MELVUN
  391. SEGACT MELVUT
  392. SEGACT MELVNX
  393. SEGACT MELVNY
  394. SEGACT MELT1X
  395. SEGACT MELT1Y
  396. C
  397. C**** Bas Mach
  398. C
  399. IF(IUINF .NE. 0)THEN
  400. CALL LICHT(IUPRI,MPUPRI,TYPE,IGEOMC)
  401. CALL LICHT(IUINF,MPUINF,TYPE,IGEOMC)
  402. C SEGACT MPUPRI*MOD
  403. C SEGACT MPUINF*MOD
  404. ELSE
  405. MPUPRI=0
  406. MPUINF=0
  407. ENDIF
  408. C
  409. C**** Initialisation de 1/DT
  410. C
  411. UNSDT = 0.0D0
  412. C
  413. C**** BOUCLE SUR FACEL pour le calcul du FLUX
  414. C
  415. DO NLCF = 1, NFAC
  416. C
  417. C******* NLCF = numero local du centre de facel
  418. C NGCF = numero global du centre de facel
  419. C NLCF1 = numero local du centre de face
  420. C NGCEG = numero global du centre ELT "gauche"
  421. C NLCEG = numero local du centre ELT "gauche"
  422. C NGCED = numero global du centre ELT "droite"
  423. C NLCED = numero local du centre ELT "droite"
  424. C
  425. NGCEG = IPT2.NUM(1,NLCF)
  426. NGCED = IPT2.NUM(3,NLCF)
  427. NGCF = IPT2.NUM(2,NLCF)
  428. NLCF1 = MLENT2.LECT(NGCF)
  429. NLCEG = MLENT1.LECT(NGCEG)
  430. NLCED = MLENT1.LECT(NGCED)
  431. NLFL = MLELIM.LECT(NGCF)
  432. C
  433. C******* NLCF != NLCF1 -> l'auteur (MOI) n'a rien compris.
  434. C
  435. IF(NLCF .NE. NLCF1)THEN
  436. MESERR = 'Il ne faut pas jouer avec la console. '
  437. LOGAN = .TRUE.
  438. GOTO 9999
  439. ENDIF
  440. IF(NLFL .EQ. 0)THEN
  441. C
  442. C******* Recuperation des Etats "gauche" et "droite"
  443. C
  444. ROG = MELRO.VELCHE(1,NLCF)
  445. UNG = MELVUN.VELCHE(1,NLCF)
  446. UTG = MELVUT.VELCHE(1,NLCF)
  447. PG = MELP.VELCHE(1,NLCF)
  448. GAMG = MELGAM.VELCHE(1,NLCF)
  449. C
  450. ROD = MELRO.VELCHE(3,NLCF)
  451. UND = MELVUN.VELCHE(3,NLCF)
  452. UTD = MELVUT.VELCHE(3,NLCF)
  453. PD = MELP.VELCHE(3,NLCF)
  454. GAMD = MELGAM.VELCHE(3,NLCF)
  455. C
  456. CNX = MELVNX.VELCHE(1,NLCF)
  457. CNY = MELVNY.VELCHE(1,NLCF)
  458. CTX = MELT1X.VELCHE(1,NLCF)
  459. CTY = MELT1Y.VELCHE(1,NLCF)
  460. C
  461. C******* Le fractiones massiques
  462. C
  463. IF(LOGME)THEN
  464. DO I1 = 1, NESP
  465. MELVA1 = MCHAMY.IELVAL(I1)
  466. FRAMAG.YET(I1) = MELVA1.VELCHE(1,NLCF)
  467. FRAMAD.YET(I1) = MELVA1.VELCHE(3,NLCF)
  468. ENDDO
  469. ENDIF
  470. C
  471. C******* On a defini (ROg,ROUNg,ROUTg,Pg,(Yg)), (ROd,ROUNd,ROUTd,Pd,(Yd))
  472. C et on a déjà verifié ROg, ROd, Pg, Pd > 0 et 0<Y_i<1
  473. C
  474. C
  475. C******* Calcul du flux aux interfaces
  476. C
  477. IF(INDMET .EQ. 1)THEN
  478. C
  479. C******* GODUNOV
  480. C FLURIE en FORTRAN STANDARD
  481. C CELLT =
  482. C
  483. CALL FLURIE(NESP,
  484. & GAMG,ROG,PG,UNG,UTG,
  485. & GAMD,ROD,PD,UND,UTD,
  486. & FRAMAG.YET,FRAMAD.YET,
  487. & IFLU1.FLUX,
  488. & CELLT,
  489. & LOGNC,LOGAN,MESERR)
  490. C
  491. ELSEIF(INDMET .EQ. 2)THEN
  492. C
  493. C******* Van Leer FVS
  494. C
  495. C N.B: FLUXVL en FORTRAN pure
  496. C FRAMAG.YET = table d'un pointeur -> table
  497. C La meme chose pour FRAMAD.YET, IFLU1.FLUX,
  498. C IFLU2.FLUX
  499. C
  500. CALL FLUXVL(NESP,
  501. & GAMG,ROG,PG,UNG,UTG,
  502. & GAMD,ROD,PD,UND,UTD,
  503. & FRAMAG.YET,FRAMAD.YET,
  504. & IFLU1.FLUX,IFLU2.FLUX,
  505. & CELLT)
  506. ELSEIF(INDMET .EQ. 3)THEN
  507. C
  508. C******* Van Leer - Hanel FVS
  509. C
  510. C N.B: FLUVLH en FORTRAN pure
  511. C FRAMAG.YET = table d'un pointeur -> table
  512. C La meme chose pour FRAMAD.YET, IFLU1.FLUX,
  513. C IFLU2.FLUX
  514. C
  515. CALL FLUVLH(NESP,
  516. & GAMG,ROG,PG,UNG,UTG,
  517. & GAMD,ROD,PD,UND,UTD,
  518. & FRAMAG.YET,FRAMAD.YET,
  519. & IFLU1.FLUX,IFLU2.FLUX,
  520. & CELLT)
  521. ELSEIF(INDMET .EQ. 4)THEN
  522. C
  523. C******* HUS (Van Leer FVS + Osher FDS)
  524. C
  525. CALL FLHUS1(NESP,
  526. & GAMG,ROG,PG,UNG,UTG,
  527. & GAMD,ROD,PD,UND,UTD,
  528. & FRAMAG.YET,FRAMAD.YET,
  529. & IFLU1.FLUX,IFLU2.FLUX,
  530. & CELLT,
  531. & LOGNC,MESERR,LOGAN)
  532. ELSEIF(INDMET .EQ. 5)THEN
  533. C
  534. C******* HUS (Van Leer - Hanel FVS + Osher FDS)
  535. C
  536. CALL FLHUS2(NESP,
  537. & GAMG,ROG,PG,UNG,UTG,
  538. & GAMD,ROD,PD,UND,UTD,
  539. & FRAMAG.YET,FRAMAD.YET,
  540. & IFLU1.FLUX,IFLU2.FLUX,
  541. & CELLT,
  542. & LOGNC,MESERR,LOGAN)
  543. ELSEIF(INDMET .EQ. 6)THEN
  544. C
  545. C******* AUSM+ (Liou)
  546. C
  547. CALL FAUSMP(NESP,
  548. & GAMG,ROG,PG,UNG,UTG,
  549. & GAMD,ROD,PD,UND,UTD,
  550. & FRAMAG.YET,FRAMAD.YET,
  551. & IFLU1.FLUX,
  552. & CELLT)
  553. ELSEIF(INDMET .EQ. 7)THEN
  554. C
  555. C******* Roe Scheme
  556. C
  557. CALL FROEMO(NESP,
  558. & GAMG,ROG,PG,UNG,UTG,
  559. & GAMD,ROD,PD,UND,UTD,
  560. & FRAMAG.YET,FRAMAD.YET,
  561. & IFLU1.FLUX,
  562. & CELLT)
  563. ELSEIF(INDMET .EQ. 8)THEN
  564. C
  565. C******* Choc-Choc
  566. C
  567. CALL FCOLCP(NESP,
  568. & GAMG,ROG,PG,UNG,UTG,
  569. & GAMD,ROD,PD,UND,UTD,
  570. & FRAMAG.YET,FRAMAD.YET,
  571. & IFLU1.FLUX,
  572. & CELLT,
  573. & LOGNC,LOGAN,MESERR)
  574. ELSEIF(INDMET .EQ. 9)THEN
  575. C
  576. C******* AUSM+(P) for low Mach number flows (Edwards and Liou)
  577. C
  578. V_INF=MAX(MPUINF.VPOCHA(NLCEG,1),
  579. & MPUINF.VPOCHA(NLCED,1),
  580. & MPUPRI.VPOCHA(NLCEG,1),
  581. & MPUPRI.VPOCHA(NLCED,1))
  582. CALL FAUSM2(NESP,
  583. & GAMG,ROG,PG,UNG,UTG,
  584. & GAMD,ROD,PD,UND,UTD,
  585. & FRAMAG.YET,FRAMAD.YET,
  586. & V_INF,
  587. & IFLU1.FLUX,
  588. & CELLT)
  589. ELSEIF(INDMET .EQ. 10)THEN
  590. C
  591. C******* Rusanov scheme
  592. C
  593. CALL FRUSAN(NESP,
  594. & GAMG,ROG,PG,UNG,UTG,
  595. & GAMD,ROD,PD,UND,UTD,
  596. & FRAMAG.YET,FRAMAD.YET,
  597. & IFLU1.FLUX,
  598. & CELLT)
  599. ELSEIF(INDMET .EQ. 11)THEN
  600. C
  601. C******* Rusanov scheme for Low-Mach number flows
  602. C
  603. V_INF=MAX(MPUINF.VPOCHA(NLCEG,1),
  604. & MPUINF.VPOCHA(NLCED,1),
  605. & MPUPRI.VPOCHA(NLCEG,1),
  606. & MPUPRI.VPOCHA(NLCED,1))
  607. CALL FRUSBM(NESP,
  608. & GAMG,ROG,PG,UNG,UTG,
  609. & GAMD,ROD,PD,UND,UTD,
  610. & FRAMAG.YET,FRAMAD.YET,
  611. & V_INF,
  612. & IFLU1.FLUX,
  613. & CELLT)
  614. ELSEIF(INDMET .EQ. 12)THEN
  615. C
  616. C******* Centered scheme
  617. C
  618. CALL FVCENT(NESP,
  619. & GAMG,ROG,PG,UNG,UTG,
  620. & GAMD,ROD,PD,UND,UTD,
  621. & FRAMAG.YET,FRAMAD.YET,
  622. & IFLU1.FLUX,
  623. & CELLT)
  624. ELSEIF(INDMET .EQ. 13)THEN
  625. C
  626. C******* Roe-Turkel scheme for Low-Mach number flows
  627. C
  628. V_INF=MAX(MPUINF.VPOCHA(NLCEG,1),
  629. & MPUINF.VPOCHA(NLCED,1),
  630. & MPUPRI.VPOCHA(NLCEG,1),
  631. & MPUPRI.VPOCHA(NLCED,1))
  632. CALL FROEBM(NESP,
  633. & GAMG,ROG,PG,UNG,UTG,
  634. & GAMD,ROD,PD,UND,UTD,
  635. & FRAMAG.YET,FRAMAD.YET,
  636. & V_INF,
  637. & IFLU1.FLUX,
  638. & CELLT)
  639. ELSEIF(INDMET .EQ. 14)THEN
  640. C
  641. C******* HLLC
  642. C
  643. CALL FLHLLC(NESP,
  644. & GAMG,ROG,PG,UNG,UTG,
  645. & GAMD,ROD,PD,UND,UTD,
  646. & FRAMAG.YET,FRAMAD.YET,
  647. & IFLU1.FLUX,
  648. & CELLT)
  649. ELSEIF(INDMET .EQ. 15)THEN
  650. C
  651. C******* HLLC-Turkel scheme for Low-Mach number flows
  652. C
  653. V_INF=MAX(MPUINF.VPOCHA(NLCEG,1),
  654. & MPUINF.VPOCHA(NLCED,1),
  655. & MPUPRI.VPOCHA(NLCEG,1),
  656. & MPUPRI.VPOCHA(NLCED,1))
  657. CALL FHLLCL(NESP,
  658. & GAMG,ROG,PG,UNG,UTG,
  659. & GAMD,ROD,PD,UND,UTD,
  660. & FRAMAG.YET,FRAMAD.YET,
  661. & V_INF,
  662. & IFLU1.FLUX,
  663. & CELLT)
  664. ELSEIF(INDMET .EQ. 16)THEN
  665. C
  666. C******* AUSM+up for Low-Mach number flows
  667. C
  668. V_INF=MAX(MPUINF.VPOCHA(NLCEG,1),
  669. & MPUINF.VPOCHA(NLCED,1),
  670. & MPUPRI.VPOCHA(NLCEG,1),
  671. & MPUPRI.VPOCHA(NLCED,1))
  672. CALL FAU_UP(NESP,
  673. & GAMG,ROG,PG,UNG,UTG,
  674. & GAMD,ROD,PD,UND,UTD,
  675. & FRAMAG.YET,FRAMAD.YET,
  676. & V_INF,
  677. & IFLU1.FLUX,
  678. & CELLT)
  679. ENDIF
  680. C
  681. IF(LOGAN) GOTO 9999
  682. IF(LOGNC) GOTO 9999
  683. C
  684. C******* Ecriture des flux
  685. C
  686. C FLUX(1) = RO Un RO Un
  687. C FLUX(2) = RO Un Un + P -> RO Un Ux + P CNX
  688. C FLUX(3) = RO Un Ut -> RO Un Uy + P CNY
  689. C FLUX(4) = RO Un Ht RO Un Ht
  690. C
  691. SURF = MPOVSU.VPOCHA(NLCF,1)
  692. MPOFLU.VPOCHA(NLCF,1) =
  693. & (IFLU1.FLUX(1) * SURF )
  694. MPOFLU.VPOCHA(NLCF,2) =
  695. & ((IFLU1.FLUX(2)*CNX+IFLU1.FLUX(3)*CTX) * SURF)
  696. MPOFLU.VPOCHA(NLCF,3) =
  697. & ((IFLU1.FLUX(2)*CNY+IFLU1.FLUX(3)*CTY) * SURF)
  698. MPOFLU.VPOCHA(NLCF,4) =
  699. & (IFLU1.FLUX(4) * SURF)
  700. IF(LOGME)THEN
  701. DO I1 = 1, NESP
  702. MPOFLU.VPOCHA(NLCF,4+I1)= IFLU1.FLUX(4+I1)* SURF
  703. ENDDO
  704. ENDIF
  705. C
  706. C******* Calcul du pas du temps (CFL)
  707. C
  708. C
  709. C
  710. C****** a) etat a l'interface
  711. C
  712. C CELLT a la dimension du reciproque d'une vitesse
  713. C
  714. DIAMG = MPOVDI.VPOCHA(NLCEG,1)
  715. DIAMD = MPOVDI.VPOCHA(NLCED,1)
  716. DIAM = MIN(DIAMG,DIAMD)
  717. CELL = 1.0D0/(DIAM*CELLT)
  718. IF(CELL .GT. UNSDT)THEN
  719. UNSDT = CELL
  720. ENDIF
  721. C
  722. C****** b) etat gauche
  723. C
  724. ASON = SQRT(GAMG*PG/ROG)
  725. LAMBDA = ABS(UNG) + ASON
  726. CELL = LAMBDA / DIAM
  727. IF(CELL .GT. UNSDT)THEN
  728. UNSDT = CELL
  729. ENDIF
  730. C
  731. C****** C) etat droite
  732. C
  733. ASON = SQRT(GAMD*PD/ROD)
  734. LAMBDA = ABS(UND) + ASON
  735. CELL = LAMBDA / DIAM
  736. IF(CELL .GT. UNSDT)THEN
  737. UNSDT = CELL
  738. ENDIF
  739. ENDIF
  740. C
  741. C**** Fin boucle sur FACEL
  742. C
  743. ENDDO
  744. C
  745. C**** Pas du temps (condition de non interaction en 1D)
  746. C
  747. DT = 0.5D0 / UNSDT
  748. C
  749. C**** Desactivation des segments et
  750. C on detruit les MCHAMLs
  751. C
  752. C
  753. C**** SEGSUP FRAMAG
  754. C SEGSUP FRAMAD
  755. C
  756. C meme si LOGME = .FALSE.
  757. C
  758. SEGSUP FRAMAG
  759. SEGSUP FRAMAD
  760. C
  761. SEGSUP MLENT1
  762. SEGSUP MLENT2
  763. SEGDES IPT2
  764. C
  765. SEGSUP IFLU1
  766. SEGSUP IFLU2
  767. C
  768. SEGDES MPOVSU
  769. SEGDES MPOVDI
  770. C
  771. SEGDES MPOFLU
  772. C
  773. SEGDES MELRO
  774. SEGDES MELP
  775. SEGDES MELGAM
  776. SEGDES MELVUN
  777. SEGDES MELVUT
  778. SEGDES MELVNX
  779. SEGDES MELVNY
  780. SEGDES MELT1X
  781. SEGDES MELT1Y
  782. C
  783. IF(MPUPRI .NE. 0)THEN
  784. SEGDES MPUPRI
  785. SEGDES MPUINF
  786. ENDIF
  787. C
  788. IF(LOGME) THEN
  789. DO I1 = 1, NESP
  790. MELVA1 = MCHAMY.IELVAL(I1)
  791. SEGDES MELVA1
  792. ENDDO
  793. C
  794. SEGDES MCHAMY
  795. ENDIF
  796. SEGSUP MLELIM
  797. CC
  798. 9999 CONTINUE
  799. C
  800. RETURN
  801. END
  802. C
  803.  
  804.  
  805.  
  806.  
  807.  
  808.  
  809.  
  810.  
  811.  
  812.  
  813.  
  814.  
  815.  
  816.  
  817.  
  818.  
  819.  

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