Download konfl3.eso

Back to the list

   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