1 : C KON14 SOURCE CHAT 06/08/24 21:47:53 5529 2 : SUBROUTINE KON14 3 : C************************************************************************ 4 : C 5 : C PROJET : CASTEM 2000 6 : C 7 : C NOM : KON14 8 : C 9 : C DESCRIPTION : Subroutine appellée par KON1 10 : C 11 : C Modelisation 2D/3D des equations d'Euler 12 : C Calcul du jacobien par rapport aux 13 : C variables primitives 14 : C 15 : C LANGAGE : FORTRAN 77 + ESOPE 2000 (avec estensions CISI) 16 : C 17 : C AUTEUR : A. BECCANTINI, DRN/DMT/SEMT/LTMF 18 : C 19 : C************************************************************************ 20 : C 20 : C APPELES (Calcul) : KONJP1 (calcul du jacobien, gaz "calorically 21 : C perfect", monoespece, 2D, VLH) 21 : C KONJP2 (calcul du jacobien, gaz "calorically 22 : C perfect", monoespece, 2D, AUSMplus) 22 : C KONJP3 (calcul du jacobien, gaz "calorically 23 : C perfect", monoespece, 3D, VLH) 23 : C KONJP4 (calcul du jacobien, gaz "calorically 24 : C perfect", monoespece, 3D, AUSMplus) 24 : C KONJP5 (calcul du jacobien, gaz "calorically 25 : C perfect", monoespece, 2D 26 : C AUSMPLM) 27 : C 28 : C************************************************************************ 29 : C 30 : C*** SYNTAXE 31 : C 32 : C Discrétisation en VF "cell-centered" des équations d'Euler pour 33 : C un gaz parfait mono-constituent polytropique 34 : C 35 : C RMAT1 = 'KONV' 'VF' 'PERFMONO' 'JACOPRIM' MOD1 LMOT1 LMOT2 36 : C (MAILIM) MOT3 CHPO1 CHPO2 CHPO3 CHPO4 ; 37 : C 38 : C or (Bas MAch) 39 : C 40 : C RMAT1 = 'KONV' 'VF' 'PERFMONO' 'JACOPRIM' MOD1 LMOT1 LMOT2 41 : C (MAILIM) MOT3 CHPO1 CHPO2 CHPO3 CHPO4 42 : C CHPO5 CHPO6 ; 43 : C 44 : C ENTREES 45 : C 46 : C LMOT1 : objet de type LISTMOTS 47 : C Noms de composantes des variable duales de RMAT1. 48 : C Il contient dans l'ordre suivant: le noms de la densité, 49 : C du momentum, de l'énergie totale par unité de volume 50 : C 51 : C LMOT2 : objet de type LISTMOTS 52 : C Noms de composantes des variable primales de RMAT1. 53 : C Il contient dans l'ordre suivant: le noms de la densité, 54 : C de la vitesse, de la pression. 55 : C 56 : C MOD1 : objet modele de type Navier_Stokes 57 : C 58 : C MOT3 : objet de type MOT 59 : C 'VLH' : jacobien du residu pour la methode VLH 60 : C 'AUSMPLUUS' : jacobien du residu pour la methode AUSM+ 61 : C 'AUSMPLM' : jacobien du residu pour la methode AUSM+ low 62 : C Mach 63 : C 64 : C (MAILIM): MAIILAGE de POI1 ou on ne veut pas calculer le FLUX convective 65 : C 66 : C CHPO1 : CHPOINT contenant la masse volumique 67 : C (SPG =('DOMA' MOD1 'CENTRE'), une seule composante, 68 : C 'SCAL'). 69 : C 70 : C CHPO2 : CHPOINT contenant la vitesse 71 : C (SPG =('DOMA' MOD1 'CENTRE'), deux/trois composantes 72 : C 'UX', 'UY', 'UZ') 73 : C 74 : C CHPO3 : CHPOINT contenant la pression du gaz 75 : C (SPG =('DOMA' MOD1 'CENTRE'), une seule composante, 76 : C 'SCAL'). 77 : C 78 : C CHPO4 : CHPOINT contenant le "gamma" du gaz 79 : C (SPG =('DOMA' MOD1 'CENTRE'), une seule composante, 80 : C 'SCAL'). 81 : C 82 : C CHPO5 : CHPOINT contenant la premiere vitesse de cut-off 83 : C (SPG =('DOMA' MOD1 'CENTRE'), une seule composante, 84 : C 'SCAL'). 85 : C 86 : C CHP06 : CHPOINT contenant la deuxieme vitesse de cut-off 87 : C (SPG =('DOMA' MOD1 'CENTRE'), une seule composante, 88 : C 'SCAL'). 89 : C 90 : C SORTIES 91 : C 92 : C RMAT1 : objet de type MATRIK 93 : C (SPG =('DOMA' MOD1 'CENTRE')) 94 : C 95 : C************************************************************************ 96 : C 97 : C HISTORIQUE (Anomalies et modifications éventuelles) 98 : C 99 : C HISTORIQUE : 100 : C 101 : C************************************************************************ 102 : C 103 : IMPLICIT INTEGER(I-N) 104 : -INC CCOPTIO 105 : -INC SMLMOTS 106 : -INC SMCHPOI 107 : -INC SMELEME 108 : POINTEUR MLMVIT.MLMOTS 109 : C 110 : C**** Variables de COOPTIO 111 : C 112 : C INTEGER IPLLB, IERPER, IERMAX, IERR, INTERR 113 : C & ,IOTER, IOLEC, IOIMP, IOCAR, IOACQ 114 : C & ,IOPER, IOSGB, IOGRA, IOSAU, IORES 115 : C & ,IECHO, IIMPI, IOSPI 116 : C & ,IDIM, IFICLE, IPREFI 117 : C & ,MCOORD 118 : C & ,IFOMOD, NIFOUR, IFOUR, NSDPGE, IONIVE 119 : C & ,NGMAXY, IZROSF, ISOTYP, IOSCR,LTEXLU 120 : C & ,NORINC,NORVAL,NORIND,NORVAD 121 : C & ,NUCROU, IPSAUV 122 : C 123 : INTEGER NBJAC, IRET, INDIC, NBCOMP, NESP, JGN, JGM 124 : & ,IDOMA, MELEMC, MELEMF, MELEFE, MELTFA, ICHPSU, ICHPDI 125 : & ,ICHPVO, INORM, INEFMD, ICOND 126 : & ,IJACO, ILIINC, ILIINP, NC, IFLIM, MELLIM, ICACCA 127 : & ,IIMPL, IRN, IVN, IPN, IGAMN, IUINF, IUPRI 128 : C 129 : PARAMETER (NBJAC=3) 130 : CHARACTER*8 TYPE, LJACO(NBJAC) 131 : CHARACTER*4 MOT 132 : CHARACTER*(40) MESERR 133 : DATA LJACO/'VLH ','AUSMPLUS','AUSMPLM '/ 134 : C 135 : C********************************** 136 : C**** Lecture de l'objet MODELE *** 137 : C********************************** 138 : C 139 : ICOND = 1 139 : CALL QUETYP(TYPE,ICOND,IRET) 140 : 141 : IF(IRET.EQ.0.AND.TYPE.NE.'MMODEL')THEN 142 : WRITE(6,*)' On attend un objet MMODEL' 143 : RETURN 144 : ENDIF 144 : CALL LIROBJ('MMODEL',MMODEL,ICOND,IRET) 145 : IF(IERR.NE.0)GOTO 9999 145 : CALL LEKMOD(MMODEL,IDOMA,INEFMD) 146 : IF(IERR.NE.0)GOTO 9999 147 : C 148 : C**** Centre, FACE, FACEL, ELTFA 149 : C 149 : CALL LEKTAB(IDOMA,'CENTRE',MELEMC) 150 : IF(IERR .NE. 0) GOTO 9999 151 : C 151 : CALL LEKTAB(IDOMA,'FACE',MELEMF) 152 : IF(IERR .NE. 0) GOTO 9999 153 : C 153 : CALL LEKTAB(IDOMA,'FACEL',MELEFE) 154 : IF(IERR .NE. 0) GOTO 9999 155 : C 155 : CALL LEKTAB(IDOMA,'ELTFA',MELTFA) 156 : IF(IERR .NE. 0) GOTO 9999 157 : C 158 : C**** Lecture du CHPOINT contenant les surfaces des faces. 159 : C 159 : CALL LEKTAB(IDOMA,'XXSURFAC',ICHPSU) 160 : IF(IERR .NE. 0) GOTO 9999 161 : INDIC = 1 162 : NBCOMP = 1 163 : MOT = 'SCAL' 163 : CALL QUEPOI(ICHPSU, MELEMF, INDIC, NBCOMP, MOT) 164 : IF(IERR .NE. 0) GOTO 9999 165 : C 166 : C**** Lecture du CHPOINT contenant les diametres minimums. 167 : C 167 : CALL LEKTAB(IDOMA,'XXDIEMIN',ICHPDI) 168 : IF(IERR .NE. 0) GOTO 9999 169 : INDIC = 1 170 : NBCOMP = 1 171 : MOT = 'SCAL' 171 : CALL QUEPOI(ICHPDI, MELEMC, INDIC, NBCOMP, MOT) 172 : IF(IERR .NE. 0) GOTO 9999 173 : C 174 : C**** Lecture du CHPOINT contenant les volumes 175 : C 175 : CALL LEKTAB(IDOMA,'XXVOLUM',ICHPVO) 176 : IF(IERR .NE. 0) GOTO 9999 177 : INDIC = 1 178 : NBCOMP = 1 179 : MOT = 'SCAL' 179 : CALL QUEPOI(ICHPVO, MELEMC, INDIC, NBCOMP, MOT) 180 : IF(IERR .NE. 0) GOTO 9999 181 : C 182 : C**** Les normales aux faces 183 : C 184 : IF(IDIM .EQ. 2)THEN 185 : C Que les normales 185 : CALL LEKTAB(IDOMA,'XXNORMAF',INORM) 186 : IF(IERR .NE. 0) GOTO 9999 187 : JGN = 4 188 : JGM = 2 189 : SEGINI MLMVIT 190 : MLMVIT.MOTS(1) = 'UX ' 191 : MLMVIT.MOTS(2) = 'UY ' 191 : CALL QUEPO1(INORM, MELEMF, MLMVIT) 192 : SEGSUP MLMVIT 193 : IF(IERR .NE. 0) GOTO 9999 194 : ELSE 195 : C Les normales et les tangentes 196 : TYPE = ' ' 196 : CALL ACMO(IDOMA,'MATROT',TYPE,INORM) 197 : IF (TYPE .NE. 'CHPOINT ') THEN 197 : CALL MATRAN(IDOMA,INORM) 198 : IF(IERR .NE. 0) GOTO 9999 199 : ENDIF 200 : JGN = 4 201 : JGM = 9 202 : SEGINI MLMVIT 203 : MLMVIT.MOTS(1) = 'UX ' 204 : MLMVIT.MOTS(2) = 'UY ' 205 : MLMVIT.MOTS(3) = 'UZ ' 206 : MLMVIT.MOTS(4) = 'RX ' 207 : MLMVIT.MOTS(5) = 'RY ' 208 : MLMVIT.MOTS(6) = 'RZ ' 209 : MLMVIT.MOTS(7) = 'MX ' 210 : MLMVIT.MOTS(8) = 'MY ' 211 : MLMVIT.MOTS(9) = 'MZ ' 211 : CALL QUEPO1(INORM, MELEMF, MLMVIT) 212 : SEGSUP MLMVIT 213 : ENDIF 214 : C 215 : C******************************** 216 : C**** Fin table domaine ********* 217 : C******************************** 218 : C 219 : NESP=0 220 : C 221 : C**** La list des inconnues duales (variables conservatives) 222 : C 223 : TYPE='LISTMOTS' 223 : CALL LIROBJ(TYPE,ILIINC,1,IRET) 224 : IF(IERR .NE. 0) GOTO 9999 225 : MLMOTS = ILIINC 226 : SEGACT MLMOTS 227 : NC = MLMOTS.MOTS(/2) 228 : SEGDES MLMOTS 229 : IF(NC .NE. (IDIM+2+NESP))THEN 230 : MOTERR(1:40) = 'LISTINCO = ???' 231 : WRITE(IOIMP,*) MOTERR 232 : C 233 : C******* Message d'erreur standard 234 : C 21 2 235 : C Données incompatibles 236 : C 236 : CALL ERREUR(21) 237 : GOTO 9999 238 : ENDIF 239 : C 240 : C**** La list des inconnues primales (variables primitives) 241 : C 242 : TYPE='LISTMOTS' 242 : CALL LIROBJ(TYPE,ILIINP,1,IRET) 243 : IF(IERR .NE. 0) GOTO 9999 244 : MLMOTS = ILIINP 245 : SEGACT MLMOTS 246 : NC = MLMOTS.MOTS(/2) 247 : SEGDES MLMOTS 248 : IF(NC .NE. (IDIM+2+NESP))THEN 249 : MOTERR(1:40) = 'LISTINCO = ???' 250 : WRITE(IOIMP,*) MOTERR 251 : C 252 : C******* Message d'erreur standard 253 : C 21 2 254 : C Données incompatibles 255 : C 255 : CALL ERREUR(21) 256 : GOTO 9999 257 : ENDIF 258 : C 259 : C**** Boundary condition 260 : C 261 : IRET=0 262 : TYPE='MAILLAGE' 262 : CALL LIROBJ(TYPE,IFLIM,0,IRET) 263 : IF(IERR.NE.0)GOTO 9999 264 : IF(IRET .EQ. 0)THEN 265 : MELLIM = 0 266 : ELSE 267 : MELEME=IFLIM 268 : SEGACT MELEME 269 : ICACCA=MELEME.NUM(/2) 270 : IF(ICACCA .EQ. 0)THEN 271 : MELLIM = 0 272 : ELSE 273 : MELLIM = IFLIM 274 : ENDIF 275 : SEGDES MELEME 276 : ENDIF 277 : C 278 : C**** Type of Jacobian 279 : C 279 : CALL LIRMOT(LJACO,NBJAC,IIMPL,1) 280 : IF(IERR .NE. 0)GOTO 9999 281 : 282 : C 283 : C******* La densité au centre 284 : C 285 : TYPE = 'CHPOINT ' 285 : CALL LIROBJ(TYPE,IRN,1,IRET) 286 : IF(IERR .NE. 0) GOTO 9999 287 : C 288 : C**** Control du CHPOINT: QUEPOI 289 : C 290 : C INDIC = 1 -> on impose le pointeur du support geometrique (ICEN) 291 : C N.B. Le CHPOINT peut changer de structure pour 292 : C avoir SPG = ICEN!!!! 293 : C INDIC = 0 -> on ne fait que verifier le support geometrique 294 : C (ICEN). Si le SPG sont differents INDIC = -4 en sortie 295 : C 296 : C NBCOMP > 0 -> numero des composantes 297 : C 298 : C MOT = ' ' obligatoire s'on connais pas les noms des composantes 299 : C 300 : INDIC = 1 301 : NBCOMP = 1 302 : MOT = 'SCAL' 302 : CALL QUEPOI(IRN, MELEMC, INDIC, NBCOMP, MOT) 303 : IF(IERR .NE. 0) GOTO 9999 304 : C 305 : C******* La vitesse au centre 306 : C 307 : TYPE = 'CHPOINT ' 307 : CALL LIROBJ(TYPE,IVN,1,IRET) 308 : IF(IERR .NE. 0) GOTO 9999 309 : JGN = 4 310 : JGM = IDIM 311 : SEGINI MLMVIT 312 : MLMVIT.MOTS(1) = 'UX ' 313 : MLMVIT.MOTS(2) = 'UY ' 314 : IF(IDIM .EQ. 3) MLMVIT.MOTS(3) = 'UZ ' 314 : CALL QUEPO1(IVN, MELEMC, MLMVIT) 315 : SEGSUP MLMVIT 316 : IF(IERR .NE. 0) GOTO 9999 317 : C 318 : C******* La pression au centre 319 : C 320 : TYPE = 'CHPOINT ' 320 : CALL LIROBJ(TYPE,IPN,1,IRET) 321 : IF(IERR .NE. 0) GOTO 9999 322 : INDIC = 1 323 : NBCOMP = 1 324 : MOT = 'SCAL' 324 : CALL QUEPOI(IPN, MELEMC, INDIC, NBCOMP, MOT) 325 : IF(IERR .NE. 0) GOTO 9999 326 : C 327 : C******* Gamma au centre 328 : C 329 : TYPE = 'CHPOINT ' 329 : CALL LIROBJ(TYPE,IGAMN,1,IRET) 330 : IF(IERR .NE. 0) GOTO 9999 331 : INDIC = 1 332 : NBCOMP = 1 333 : MOT = 'SCAL' 333 : CALL QUEPOI(IGAMN, MELEMC, INDIC, NBCOMP, MOT) 334 : IF(IERR .NE. 0) GOTO 9999 335 : C 336 : C**** Bas Mach 337 : C 338 : IF(IIMPL .EQ. 3)THEN 339 : TYPE = 'CHPOINT ' 340 : C 341 : C******* Cut off 1 342 : C 342 : CALL LIROBJ(TYPE,IUINF,1,IRET) 343 : IF(IERR .NE. 0) GOTO 9999 344 : INDIC = 1 345 : NBCOMP = 1 346 : MOT = 'SCAL' 346 : CALL QUEPOI(IUINF, MELEMC, INDIC, NBCOMP, MOT) 347 : IF(IERR .NE. 0) GOTO 9999 348 : C 349 : C******* Cut off 2 350 : C 351 : TYPE = 'CHPOINT ' 351 : CALL LIROBJ(TYPE,IUPRI,1,IRET) 352 : IF(IERR .NE. 0) GOTO 9999 353 : INDIC = 1 354 : NBCOMP = 1 355 : MOT = 'SCAL' 355 : CALL QUEPOI(IUPRI, MELEMC, INDIC, NBCOMP, MOT) 356 : IF(IERR .NE. 0) GOTO 9999 357 : C 358 : ELSE 359 : IUINF=0 360 : IUPRI=0 361 : ENDIF 362 : C 363 : C******* Calcul du jacobien 364 : C 365 : IF(IIMPL .EQ. 1)THEN 366 : C 367 : C********** VLH 368 : C 369 : IF(IDIM .EQ. 2)THEN 369 : CALL KONJP1(ILIINC,ILIINP,IRN,IVN,IPN,IGAMN,INORM 370 : $ ,ICHPVO,ICHPSU, MELEMC, MELEFE, MELLIM, IJACO) 371 : IF(IERR .NE. 0) GOTO 9999 372 : ELSE 372 : CALL KONJP3(ILIINC,ILIINP,IRN,IVN,IPN,IGAMN,INORM 373 : $ ,ICHPVO,ICHPSU, MELEMC, MELEFE, MELLIM, IJACO) 374 : IF(IERR .NE. 0) GOTO 9999 375 : ENDIF 376 : ELSEIF(IIMPL .EQ. 2)THEN 377 : C 378 : C********** AUSM+ 379 : C 380 : IF(IDIM .EQ. 2)THEN 380 : CALL KONJP2(ILIINC,ILIINP,IRN,IVN,IPN,IGAMN,INORM 381 : $ ,ICHPVO,ICHPSU, MELEMC, MELEFE, MELLIM, IJACO) 382 : IF(IERR .NE. 0) GOTO 9999 383 : ELSE 383 : CALL KONJP4(ILIINC,ILIINP,IRN,IVN,IPN,IGAMN,INORM 384 : $ ,ICHPVO,ICHPSU, MELEMC, MELEFE, MELLIM, IJACO) 385 : IF(IERR .NE. 0) GOTO 9999 386 : ENDIF 387 : ELSEIF(IIMPL .EQ. 3)THEN 388 : C 389 : C********** AUSM+LM 390 : C 391 : IF(IDIM .EQ. 2)THEN 391 : CALL KONJP5(ILIINC,ILIINP,IRN,IVN,IPN,IGAMN,INORM, 392 : $ ICHPVO,ICHPSU, IUINF, IUPRI, MELEMC, MELEFE, 393 : $ MELLIM, IJACO) 394 : IF(IERR .NE. 0) GOTO 9999 395 : ELSE 395 : CALL ERREUR(251) 396 : ENDIF 397 : ELSE 398 : C Tentative d'utilisation d'une option non implémentée 398 : CALL ERREUR(251) 399 : GOTO 9999 400 : ENDIF 401 : C 402 : C**** Ecriture des resultats 403 : C 404 : TYPE='MATRIK ' 404 : CALL ECROBJ(TYPE,IJACO) 405 : 9999 CONTINUE 406 : RETURN 407 : END 408 : 409 : 410 : 411 : 412 :
© Cast3M 2003 - All rights reserved.
Disclaimer