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