Download kon14.eso

Back to the list

   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