Télécharger konfl1.eso

Retour à la liste

Numérotation des lignes :

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

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