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