Download konv2f.eso

Back to the list

   1 : C KONV2F    SOURCE    MAGN      09/07/30    21:18:32     6458           
   2 :       SUBROUTINE KONV2F()
   3 : C************************************************************************
   4 : C
   5 : C PROJET            :  CASTEM 2000
   6 : C
   7 : C NOM               :  KONV2F
   8 : C
   9 : C DESCRIPTION       :  Subroutine appellée par KONV1
  10 : C
  11 : C                      Modelling of Two Phase Flow 
  12 : C                      (two fluid model, mixtures of water and air)
  13 : C
  14 : C                      Calcul du residu / jacobien / DELTAT
  15 : C     
  16 : C LANGAGE           :  FORTRAN 77 + ESOPE 2000 (avec estensions CISI)
  17 : C      
  18 : C AUTEUR            :  A. BECCANTINI, DRN/DMT/SEMT/LTMF              
  19 : C                      Modified for two phase flow by
  20 : C                      Jose R. Garcia-Cascales,
  21 : C                      Universidad Politecnica de Cartagena,
  22 : C                      jr.garcia@upct.es
  23 : C************************************************************************
  24 : C
  25 : C APPELES (Calcul)  :  KONFL8 (2D, two fluid flow)
  26 : C                      KONFL9 (3D, two fluid flow)
  27 : C
  28 : C************************************************************************
  29 : C
  30 : C*** SYNTAXE
  31 : C  FV Discretization of the Two Phase Flow system of equations
  32 : C  Unknown: mass flow rate, momentum and total energy per unit volume of
  33 : C      each phase (conservative variables)
  34 : C 
  35 : C
  36 : C  RMAT1 RCHPO1 RFLOT1 = 'KONV' 'VF' 'PERFMONO' MOT1 MOT2
  37 : C                         TABD LMOT1 
  38 : C                         MCHAM1 MCHAM2 MCHAM3 MCHAM4 
  39 : C                         MCHAM5 MCHAM6 MCHAM7 MCHAM8
  40 : C                         (MOT3 CHPO1 CHPO2 CHPO3 CHPO5) ;
  41 : C
  42 : C  ENTREES 
  43 : C
  44 : C
  45 : C  MOT1   : objet de type MOT
  46 : C           Il vaut 'RESI' si on veut calculer le résidu
  47 : C           Il vaut 'FLUX' si on veut calculer le flux
  48 : C
  49 : C  MOT2   : objet de type MOT
  50 : C           Il indique la méthode de décentrement:
  51 : C           'AUSMP1' = AUSM +
  52 : C           'AUSMP2' = Preconditioned AUSM +
  53 : C           'AUSMDV1'= AUSMDV
  54 : C           'AUSMDV2'= Preconditioned AUSMDV
  55 : C
  56 : C LMOT1   : objet de type LISTMOTS
  57 : C           Noms de composantes du résultat (RCHPO1)
  58 : C           Il contient dans l'ordre suivant: le noms de la densité,
  59 : C           de la vitesse, de l'énergie totale par unité de volume
  60 : C
  61 : C TAB1    : la table domaine
  62 : C
  63 : C MCHAM1  : MCHAML containing void fraction
  64 : C           SPG (support géométrique) l'indice 'FACEL' de 
  65 : C           TAB1 (une composante, 'SCAL')
  66 : C
  67 : C MCHAM2  : MCHAML  vapour velocity and director cosines
  68 : C           du repère locale (n,t) dans le repère
  69 : C           global (x,y) (dans le cas 2D 6 composantes:
  70 : C           * 'UN' = vitesse normale  (SPG = TAB1 . 'FACEL')
  71 : C           * 'UT' = vitesse tangentielle  (SPG = 'TAB1 . FACEL')
  72 : C           * 'NX' = n.x (SPG = 'FACE')
  73 : C           * 'NY' = n.y (SPG = 'FACE')
  74 : C           * 'TX' = t.x (SPG = 'FACE')
  75 : C           * 'TY' = t.y (SPG = 'FACE')).
  76 : C MCHAM3  : MCHAML  liquid velocity and director cosines
  77 : C           du repère locale (n,t) dans le repère
  78 : C           global (x,y) (dans le cas 2D 6 composantes:
  79 : C           * 'UN' = vitesse normale  (SPG = TAB1 . 'FACEL')
  80 : C           * 'UT' = vitesse tangentielle  (SPG = 'TAB1 . FACEL')
  81 : C           * 'NX' = n.x (SPG = 'FACE')
  82 : C           * 'NY' = n.y (SPG = 'FACE')
  83 : C           * 'TX' = t.x (SPG = 'FACE')
  84 : C           * 'TY' = t.y (SPG = 'FACE')).
  85 : C
  86 : C MCHAM4  : MCHAML (SPG = TAB1 . 'FACEL') containing pressure
  87 : C           une  seule composante, 'SCAL').
  88 : C
  89 : C MCHAM5  : MCHAML (SPG = TAB1 . 'FACEL') contaning gas/vapour temperature
  90 : C           (une seule composante, 'SCAL').
  91 : C
  92 : C MCHAM6  : MCHAML (SPG = TAB1 . 'FACEL') contaning liquid temperature
  93 : C           (une seule composante, 'SCAL').
  94 : C
  95 : C MCHAM7  : MCHAML (SPG = TAB1 . 'FACEL') contaning gas/vapour density
  96 : C           (une seule composante, 'SCAL').
  97 : C
  98 : C MCHAM8  : MCHAML (SPG = TAB1 . 'FACEL') contaning liquid density
  99 : C           (une seule composante, 'SCAL').
 100 : C
 101 : C RCHPO1  : objet de type CHPOINT (composantes =  LMOT1)
 102 : C           Residu  si MOT2 = 'RESI' (SPG = TAB1 . 'CENTRE')
 103 : C           Flux si MOT2 = 'FLUX'    (SPG = TAB1 . 'FACE') 
 104 : C
 105 : C RFLOT1  : objet de type FLOTTANT
 106 : C           Il est le temps caracteristique associé à l'onde la plus
 107 : C           rapide.
 108 : C
 109 : C Remarque
 110 : C --------
 111 : C
 112 : C RCHPO1 est égal à:
 113 : C * la derivé temporelle des inconnues si l'option 'RESI' est utilisée
 114 : C * la projection du flux convectif sur (TAB1 . 'XXNORMAF') si 
 115 : C   l'option 'FLUX' est utilisée
 116 : C      
 117 : C***********************************************************************
 118 : C
 119 : C************************************************************************
 120 : C
 121 : C HISTORIQUE (Anomalies et modifications éventuelles)
 122 : C
 123 : C HISTORIQUE :
 124 : C      
 125 : C************************************************************************
 126 : C
 127 : -INC CCOPTIO
 128 : -INC SMLMOTS
 129 : -INC SMMATRIK
 130 : -INC SMCHPOI
 131 :       POINTEUR MLMVIT.MLMOTS,MLMOTY.MLMOTS
 132 : C
 133 : C**** Variables de COOPTIO
 134 : C
 135 :       INTEGER IPLLB, IERPER, IERMAX, IERR, INTERR
 136 :      &        ,IOTER,   IOLEC,  IOIMP,     IOCAR,  IOACQ
 137 :      &        ,IOPER,   IOSGB,  IOGRA,     IOSAU,  IORES
 138 :      &        ,IECHO,   IIMPI,  IOSPI
 139 :      &        ,IDIM,    IFICLE, IPREFI 
 140 :      &        ,MCOORD
 141 :      &        ,IFOMOD, NIFOUR, IFOUR, NSDPGE, IONIVE
 142 :      &        ,NGMAXY, IZROSF, ISOTYP, IOSCR,LTEXLU
 143 :      &        ,NORINC,NORVAL,NORIND,NORVAD
 144 :      &        ,NUCROU, IPSAUV
 145 : C
 146 :       INTEGER IDOMA, MELEMC, MELEMF, MELEFE, ICHPSU, ICHPDI , ICHPVO
 147 :      &      , MELTFA, NBMET, INDMET, IRET, NBJAC
 148 :      &      , IAIF, IALPF, IUVF, IULF, IPF, ITVF, ITLF
 149 :      &      , IRVF, IRLF, IFRMAF
 150 :      &      , ILIINC, NC, ICELL
 151 :      &      , INDIC, NBCOMP, IJACO
 152 :      &      , NKID, NKMT, NMATRI, NRIGE         
 153 :      &      , JGM, JGN, INORM, IIMPL
 154 :      &      , ICHFLU, ICHRES
 155 : 
 156 : C
 157 :       PARAMETER (NBMET=4,NBJAC=5)
 158 :       REAL*8 DT
 159 :       CHARACTER*8 LMETO(NBMET), TYPE, LJACO(NBJAC)
 160 :       CHARACTER*4 MOT, LFLUX(2)
 161 :       CHARACTER*(40) MESERR
 162 :       LOGICAL LOGNC, LOGAN, LOGRES
 163 : C**** Depending on if we want to use AUSM+, AUSM+ with "preconditioning",
 164 : C     AUSMDV or AUSMDV with "preconditioning" we have respectively
 165 :       DATA LMETO/'AUSMP1','AUSMP2','AUSMDV1','AUSMDV2'/
 166 : C**** Option not implemented yet
 167 :       DATA LJACO/'VLHJACO1','AUSMJAC1','AUSMLMJ1','VLHJACO2',
 168 :      &           'AUSMJAC2'/
 169 : C**** If we want flux or residual
 170 :       DATA LFLUX/'FLUX','RESI'/
 171 : C
 172 : C**** Initialisation des variables pour la gestion des erreurs.
 173 : C
 174 :       LOGNC  = .FALSE.
 175 :       LOGAN  = .FALSE.
 176 :       MESERR  = '                                        '
 177 : C
 178 : C******* Flux ou residu???
 179 : C
 179 :       CALL LIRMOT(LFLUX,2,ICELL,1)
 180 :       IF(IERR .NE. 0)GOTO 9999
 181 :       IF(ICELL .EQ. 1)THEN
 182 :          LOGRES = .FALSE.
 183 :       ELSEIF(ICELL .EQ. 2)THEN
 184 :          LOGRES = .TRUE.
 185 :       ELSE
 186 : C
 187 : C******** Message d'erreur standard
 188 : C         251 2
 189 : C         Tentative d'utilisation d'une option non implémentée
 190 : C
 190 :          CALL ERREUR(251)
 191 :       ENDIF
 192 : C
 193 : C**** Metode utilisée
 194 : C
 194 :       CALL LIRMOT(LMETO,NBMET,INDMET,1)
 195 :       IF(IERR .NE. 0)GOTO 9999
 196 :       IF(INDMET .EQ. 0)THEN
 197 : C
 198 : C******** Message d'erreur standard
 199 : C         251 2
 200 : C         Tentative d'utilisation d'une option non implémentée
 201 : C
 201 :          CALL ERREUR(251)
 202 :       ENDIF
 203 : C     
 204 : C*******************************
 205 : C**** La table domaine *********
 206 : C*******************************
 207 : C
 207 :       CALL LIROBJ('TABLE',IDOMA,1,IRET)
 208 :       IF(IERR .NE. 0)GOTO 9999
 209 : C
 210 : C**** Centre, FACE, FACEL, ELTFA
 211 : C
 211 :       CALL LEKTAB(IDOMA,'CENTRE',MELEMC)
 212 :       IF(IERR .NE. 0) GOTO 9999
 213 : C
 213 :       CALL LEKTAB(IDOMA,'FACE',MELEMF)
 214 :       IF(IERR .NE. 0) GOTO 9999
 215 : C      
 215 :       CALL LEKTAB(IDOMA,'FACEL',MELEFE)
 216 :       IF(IERR .NE. 0) GOTO 9999
 217 : C
 217 :       CALL LEKTAB(IDOMA,'ELTFA',MELTFA)
 218 :       IF(IERR .NE. 0) GOTO 9999
 219 : C
 220 : C**** Lecture du CHPOINT contenant les surfaces des faces.
 221 : C
 221 :       CALL LEKTAB(IDOMA,'XXSURFAC',ICHPSU)
 222 :       IF(IERR .NE. 0) GOTO 9999
 223 :       INDIC = 1
 224 :       NBCOMP = 1
 225 :       MOT = 'SCAL'
 225 :       CALL QUEPOI(ICHPSU, MELEMF, INDIC, NBCOMP, MOT)
 226 :       IF(IERR .NE. 0) GOTO 9999
 227 : C  
 228 : C**** Lecture du CHPOINT contenant les diametres minimums.
 229 : C
 229 :       CALL LEKTAB(IDOMA,'XXDIEMIN',ICHPDI)
 230 :       IF(IERR .NE. 0) GOTO 9999
 231 :       INDIC = 1
 232 :       NBCOMP = 1
 233 :       MOT = 'SCAL'
 233 :       CALL QUEPOI(ICHPDI, MELEMC, INDIC, NBCOMP, MOT)
 234 :       IF(IERR .NE. 0) GOTO 9999
 235 : 
 236 : C     
 237 : C**** Lecture du CHPOINT contenant les volumes
 238 : C
 238 :       CALL LEKTAB(IDOMA,'XXVOLUM',ICHPVO)
 239 :       IF(IERR .NE. 0) GOTO 9999
 240 :       INDIC = 1
 241 :       NBCOMP = 1
 242 :       MOT = 'SCAL'
 242 :       CALL QUEPOI(ICHPVO, MELEMC, INDIC, NBCOMP, MOT)
 243 :       IF(IERR .NE. 0) GOTO 9999
 244 : C
 245 : C**** Les normales aux faces
 246 : C
 247 :       IF(IDIM .EQ. 2)THEN
 248 : C        Que les normales
 248 :          CALL LEKTAB(IDOMA,'XXNORMAF',INORM)
 249 :          IF(IERR .NE. 0) GOTO 9999
 250 :          JGN = 4
 251 :          JGM = 2
 252 :          SEGINI MLMVIT
 253 :          MLMVIT.MOTS(1) = 'UX  '
 254 :          MLMVIT.MOTS(2) = 'UY  '
 254 :          CALL QUEPO1(INORM, MELEMF, MLMVIT)
 255 :          SEGSUP MLMVIT
 256 :          IF(IERR .NE. 0) GOTO 9999
 257 : C     De momento solo 2D
 258 :       ELSE
 259 : C        Les normales et les tangentes
 260 :          TYPE = ' '
 260 :          CALL ACMO(IDOMA,'MATROT',TYPE,INORM)
 261 :          IF (TYPE .NE. 'CHPOINT ') THEN
 261 :             CALL MATRAN(IDOMA,INORM)
 262 :             IF(IERR .NE. 0) GOTO 9999
 263 :          ENDIF
 264 :          JGN = 4
 265 :          JGM = 9
 266 :          SEGINI MLMVIT
 267 :          MLMVIT.MOTS(1) = 'UX  '
 268 :          MLMVIT.MOTS(2) = 'UY  '
 269 :          MLMVIT.MOTS(3) = 'UZ  '
 270 :          MLMVIT.MOTS(4) = 'RX  '
 271 :          MLMVIT.MOTS(5) = 'RY  '
 272 :          MLMVIT.MOTS(6) = 'RZ  '
 273 :          MLMVIT.MOTS(7) = 'MX  '
 274 :          MLMVIT.MOTS(8) = 'MY  '
 275 :          MLMVIT.MOTS(9) = 'MZ  '
 275 :          CALL QUEPO1(INORM, MELEMF, MLMVIT)
 276 :          SEGSUP MLMVIT
 277 :       ENDIF
 278 : C
 279 : C********************************
 280 : C**** Fin table domaine *********
 281 : C********************************
 282 : C
 283 : C
 284 : C**** On va lire les pointeurs des MCHAMLs
 285 : C     Reading the MCHAML 'FACEL' containig void fraction
 286 : C
 287 :       TYPE='MCHAML  '
 287 :       CALL  LIROBJ(TYPE,IALPF,1,IRET)
 288 :       IF(IERR.NE.0) GOTO 9999
 289 : C
 290 : C**** Reading the MCHAML 'FACEL' containing vapour velocity
 291 : C   
 292 :       TYPE='MCHAML  '
 292 :       CALL  LIROBJ(TYPE,IUVF,1,IRET)
 293 :       IF(IERR .NE. 0) GOTO 9999
 294 : C
 295 : C**** Reading the MCHAML 'FACEL' containing liquid velocity
 296 : C   
 297 :       TYPE='MCHAML  '
 297 :       CALL  LIROBJ(TYPE,IULF,1,IRET)
 298 :       IF(IERR .NE. 0) GOTO 9999
 299 : C
 300 : C**** Reading the MCHAML 'FACEL' containing pressure
 301 : C    
 302 :       TYPE='MCHAML  '
 302 :       CALL  LIROBJ(TYPE,IPF,1,IRET)
 303 :       IF(IERR .NE. 0) GOTO 9999
 304 : C
 305 : C**** Reading the MCHAML 'FACEL' containing vapour temperature
 306 : C
 307 :       TYPE='MCHAML  '
 307 :       CALL  LIROBJ(TYPE,ITVF,1,IRET)
 308 :       IF(IERR .NE. 0) GOTO 9999
 309 : C
 310 : C**** Reading the MCHAML 'FACEL' containing liquid temperature
 311 : C
 312 :       TYPE='MCHAML  '
 312 :       CALL  LIROBJ(TYPE,ITLF,1,IRET)
 313 :       IF(IERR .NE. 0) GOTO 9999
 314 : C
 315 : C**** Reading the MCHAML 'FACEL' containing vapour density
 316 : C
 317 :       TYPE='MCHAML  '
 317 :       CALL  LIROBJ(TYPE,IRVF,1,IRET)
 318 :       IF(IERR .NE. 0) GOTO 9999
 319 : C
 320 : C**** Reading the MCHAML 'FACEL' containing liquid density
 321 : C
 322 :       TYPE='MCHAML  '
 322 :       CALL  LIROBJ(TYPE,IRLF,1,IRET)
 323 :       IF(IERR .NE. 0) GOTO 9999
 324 : 
 325 : C     
 326 : C**** La list des inconnues
 327 : C
 328 :       TYPE='LISTMOTS'
 328 :       CALL LIROBJ(TYPE,ILIINC,1,IRET)
 329 :       IF(IERR .NE. 0) GOTO 9999
 330 :       MLMOTS = ILIINC
 331 :       SEGACT MLMOTS
 332 :       NC = MLMOTS.MOTS(/2)
 333 :       SEGDES MLMOTS
 334 :       IF(IDIM .EQ. 3)THEN
 335 : C*** In 3D we have 10 equations
 336 :          NUMEQ = IDIM + 7
 337 :       ELSE
 338 : C*** In 2D we have 8 equations
 339 :          NUMEQ = IDIM + 6
 340 :       END IF
 341 :       IF(NC .NE. NUMEQ)THEN
 342 :          MOTERR(1:40) = 'LISTINCO = ???'
 343 :          write(*,*) NC 
 344 :          WRITE(IOIMP,*) MOTERR
 345 : C
 346 : C******* Message d'erreur standard
 347 : C        21 2
 348 : C        Données incompatibles
 349 : C
 349 :          CALL ERREUR(21)
 350 :          GOTO 9999
 351 :       ENDIF
 352 : C     
 353 : C**** Implicite ?
 354 : C
 354 :       CALL LIRMOT(LJACO,NBJAC,IIMPL,0)
 355 :       IF(IERR .NE. 0)GOTO 9999
 356 : 
 357 : C For the moment we only have explicit
 358 : C
 359 : C     
 360 :       IF(IIMPL .EQ. 0)THEN
 361 : C
 362 : C******** Objet matrik vide
 363 : C     
 364 :          NRIGE=7
 365 :          NMATRI=0
 366 :          NKID =9
 367 :          NKMT =7
 368 :          SEGINI MATRIK
 369 :          SEGDES MATRIK
 370 :          IJACO = MATRIK
 371 :       ELSE
 372 : C        Tentative d'utilisation d'une option non implémentée
 372 :          CALL ERREUR(251)
 373 :          GOTO 9999
 374 :       ENDIF
 375 : C
 376 : C**** Creation des flux aux interfaces
 377 : C
 378 :       TYPE = 'CHPOINT '
 378 :       CALL KRCHP1(TYPE, MELEMF, ICHFLU, MLMOTS)
 379 : C
 380 : C     
 381 : C**** Calcul des flux et du pas du temps.
 382 : C
 383 :       IF(IDIM .EQ. 2)THEN
 383 :          CALL KONF21(INDMET,
 384 :      &        IALPF,IUVF,IULF,IPF,
 385 :      &        ITVF,ITLF,IRVF,IRLF,
 386 :      &        ICHPSU,ICHPDI,
 387 :      &        MELEMC,MELEMF,MELEFE,
 388 :      &        ICHFLU,
 389 :      &        DT,
 390 :      &        LOGNC,LOGAN,MESERR)
 391 :       ELSEIF(IDIM .EQ. 3)THEN
 391 :          CALL KONF22(INDMET, 
 392 :      &        IALPF,IUVF,IULF,IPF,
 393 :      &        ITVF,ITLF,IRVF,IRLF,
 394 :      &        ICHPSU,ICHPDI,
 395 :      &        MELEMC,MELEMF,MELEFE,
 396 :      &        ICHFLU,DT,
 397 :      &        LOGNC,LOGAN,MESERR)
 398 :       ELSE
 399 : C        Erreur anormale.contactez votre support
 400 : C        Dimension has to be 2 or 3
 400 :          CALL ERREUR(5)
 401 :          GOTO 9999
 402 :       ENDIF
 403 : C
 404 :       IF(LOGAN)THEN
 405 : C
 406 : C******* Anomalie detectée
 407 : C
 408 : C
 409 : C******* Message d'erreur standard
 410 : C        -301 0
 411 : C        %m1:40
 412 : C
 413 :          MOTERR(1:40) =  MESERR(1:40)
 414 :          WRITE(IOIMP,*) MOTERR(1:40)
 415 : C
 416 : C******* Message d'erreur standard
 417 : C        5 3
 418 : C        Erreur anormale.contactez votre support
 419 : C         
 419 :          CALL ERREUR(5)
 420 :          GOTO 9999
 421 :       ENDIF
 422 :       IF(LOGNC)THEN
 423 : C
 424 : C******* Message d'erreur standard
 425 : C        -301 0
 426 : C        %m1:40
 427 : C
 428 :          MOTERR(1:40) =  MESERR(1:40)
 429 :          WRITE(IOIMP,*) MOTERR(1:40)
 430 : C
 431 : C******* Message d'erreur standard
 432 : C        460 2
 433 : C        Pas de convergence dans les itérations internes
 434 : C
 434 :          CALL ERREUR(460)
 435 :          GOTO 9999
 436 :       ENDIF
 437 : C
 438 : C**** Calcul de residu (si LOGRES = .TRUE.)         
 439 : C
 440 : C      LOGRES = .FALSE.
 441 : 
 442 :       IF(LOGRES)THEN
 443 :          TYPE = 'CHPOINT '
 443 :          CALL KRCHP1(TYPE, MELEMC, ICHRES, MLMOTS)
 444 : C
 444 :          CALL KONRE8(MELEMC,MELEMF,MELEFE,ICHPVO,
 445 :      &        ICHFLU, ICHRES,
 446 :      &        LOGAN,MESERR)
 447 :          IF(LOGAN)THEN
 448 : C
 449 : C******* Anomalie detectée
 450 : C
 451 : C
 452 : C******* Message d'erreur standard
 453 : C        -301 0
 454 : C        %m1:40
 455 : C
 456 :             MOTERR(1:40) =  MESERR(1:40)
 457 :             WRITE(IOIMP,*) MOTERR(1:40)
 458 : C
 459 : C******* Message d'erreur standard
 460 : C        5 3
 461 : C        Erreur anormale.contactez votre support
 462 : C         
 462 :             CALL ERREUR(5)
 463 :             GOTO 9999
 464 :          ENDIF         
 465 :       ELSE
 466 :          ICHRES = 0
 467 :       ENDIF
 468 : C
 469 : C**** Ecriture des resultats
 470 : C
 470 :       CALL ECRREE(DT)
 471 :       TYPE = 'CHPOINT '
 471 :       IF(ICHRES .NE. 0) CALL ECROBJ(TYPE,ICHRES)
 471 :       IF(ICHFLU .NE. 0) CALL ECROBJ(TYPE,ICHFLU)
 472 :       TYPE='MATRIK '
 472 : C      CALL ECROBJ(TYPE,IJACO)
 473 :  9999 CONTINUE
 474 :       RETURN
 475 :       END
 476 : 
 477 : 
 478 : 
 479 : 
 480 :  
 481 :  
 482 :  

© Cast3M 2003 - All rights reserved.
Disclaimer