Télécharger konfl3.eso

Retour à la liste

Numérotation des lignes :

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

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