Download kfmm.eso

Back to the list

   1 : C KFMM      SOURCE    CHAT      06/08/24    21:46:41     5529           
   2 :       SUBROUTINE KFMM
   3 : C************************************************************************
   4 : C
   5 : C PROJET            :  CASTEM 2000
   6 : C
   7 : C NOM               :  KFMM
   8 : C
   9 : C DESCRIPTION       :  Subroutine appellée par KONV1
  10 : C
  11 : C                      Modelisation 2D/3D des equations d'Euler
  12 : C 
  13 : C                      Free matrix method: calcul d'un stationaire
  14 : C                      avec un jacobi par point
  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
  20 : C************************************************************************
  21 : C
  22 : C APPELES (Calcul)  :  
  23 : C
  24 : C************************************************************************
  25 : C
  26 : C*** SYNTAXE
  27 : C
  28 : C  Discrétisation en VF "cell-centered" des équations d'Euler pour
  29 : C  un gaz parfait mono-constituent polytropique
  30 : C  Inconnues: densité, quantité de mouvement, énergie totale par
  31 : C  unité de volumes (variables conservatives UN)
  32 : C
  33 : C  A(UN) '*' DUN_L = RES(UN) + B(UN) - B(UN_L)
  34 : C
  35 : C  ou 
  36 : C  
  37 : C  RES(UN) est calculé avec ('KONV' 'VF' 'PERFMONO')
  38 : C  UN_0 = UN
  39 : C  UN_L = UN ° DUN_L
  40 : C  
  41 : C  Ici on calcule A(UN) est B(UN)
  42 : C 
  43 : C  CHAUN = 'KONV' 'VF' 'PMONOFMM' 'AN'  LMOT1 
  44 : C                         MOD1 MCHPO1 MCHPO2 MCHPO3 MCHPO4 FLOT1 
  45 : C                         ('CLIM' LMOT2 MCHPO5);
  46 : C  
  47 : C  CHBUN = 'KONV' 'VF' 'FMM' 'PERMONO' 'BN'  LMOT1 
  48 : C                         MOD1 MCHPO1 MCHPO2 MCHPO3 MCHPO4 
  49 : C                         ('CLIM' LMOT2 MCHPO5);
  50 : C  
  51 : C
  52 : C LMOT1   : Il contient dans l'ordre suivant: le noms de la densité,
  53 : C           de la qdm, de l'énergie totale par unité de volume
  54 : C
  55 : C MOD1    : objet modele de type EULER
  56 : C
  57 : C MCHPO1   : CHPOINT  contenant la masse volumique (en kg/m^3; une 
  58 : C           composante, 'SCAL', SPG =(DOMA MOD1 'CENTRE')).
  59 : C
  60 : C MCHPO2   : CHPOINT  contenant les débits (en  kg/s/m^2; deux 
  61 : C           composantes en 2D, 'UX  ','UY  ', trois composantes
  62 : C           en 3D, 'UX  ','UY  ', 'UZ  ', SPG =(DOMA MOD1 'CENTRE')).
  63 : C     
  64 : C MCHPO3   : CHPOINT  contenant l'énergie totale par unité de volume 
  65 : C        (en J/m^3; une composante, 'SCAL', SPG =(DOMA MOD1 'CENTRE')).
  66 : C
  67 : C MCHPO4   : CHPOINT  contenant le "gamma" du gaz (une composante, 
  68 : C           'SCAL', SPG =(DOMA MOD1 'CENTRE')).
  69 : C
  70 : C LMOT2   : Il contient dans l'ordre suivant: le noms de la densité,
  71 : C           de la vitesse, de la pression.
  72 : C
  73 : C MCHPO5   : CHPOINT  contenant les conditions aux limites 
  74 : C            (composantes en LMOT2).
  75 : C
  76 : C************************************************************************
  77 : C
  78 : C HISTORIQUE (Anomalies et modifications éventuelles)
  79 : C
  80 : C HISTORIQUE : crée le 30/04/02
  81 : C              Janvier 2003: implementation de condition aux limites
  82 : C      
  83 : C************************************************************************
  84 : C
  85 :       IMPLICIT INTEGER(I-N)
  86 : -INC CCOPTIO
  87 : -INC SMLMOTS
  88 : -INC SMCHPOI
  89 :       POINTEUR MLMVIT.MLMOTS
  90 : C
  91 : C**** Variables de COOPTIO
  92 : C
  93 : C      INTEGER IPLLB, IERPER, IERMAX, IERR, INTERR
  94 : C     &        ,IOTER,   IOLEC,  IOIMP,     IOCAR,  IOACQ
  95 : C     &        ,IOPER,   IOSGB,  IOGRA,     IOSAU,  IORES
  96 : C     &        ,IECHO,   IIMPI,  IOSPI
  97 : C     &        ,IDIM
  98 : C     &        ,MCOORD
  99 : C     &        ,IFOMOD, NIFOUR, IFOUR, NSDPGE, IONIVE
 100 : C     &        ,NGMAXY, IZROSF, ISOTYP, IOSCR,LTEXLU
 101 : C     &        ,NORINC,NORVAL,NORIND,NORVAD
 102 : C     &        ,NUCROU, IPSAUV, IFICLE, IPREFI
 103 : C
 104 :       INTEGER ICOEF, IDOMA, IRET, MELEF, MELEC, MELEFL, ICHPSU, INDIC
 105 :      &       , NBCOMP, ICHPDI, IRN, IGN, IRETN, IGAMN, ICHPVO, ILIINC
 106 :      &       , ICHRES, JGN, JGM, INORM, INEFMD, ICOND, MMODEL
 107 :      &       , ICHLIM, MELLIM, ILIINP, NSOUPO
 108 : C
 109 :       REAL*8 DCFL
 110 : C
 111 :       CHARACTER*4 MOT
 112 :       CHARACTER*8 LCOEF(2), TYPE
 113 :       CHARACTER*(40) MESERR
 114 : C      
 115 :       DATA LCOEF/'AN','BN'/
 116 : C
 116 :       CALL LIRMOT(LCOEF,2,ICOEF,1)
 117 :       IF(IERR .NE. 0)GOTO 9999
 118 : C
 119 : C**********************************
 120 : C**** Lecture de l'objet MODELE ***
 121 : C**********************************
 122 : C
 123 :       ICOND = 1
 123 :       CALL QUETYP(TYPE,ICOND,IRET)
 124 : 
 125 :       IF(IRET.EQ.0.AND.TYPE.NE.'MMODEL')THEN
 126 :         WRITE(6,*)' On attend un objet MMODEL'
 127 :         RETURN
 128 :       ENDIF
 128 :       CALL LIROBJ('MMODEL',MMODEL,ICOND,IRET)
 129 :       IF(IERR.NE.0)GOTO 9999
 129 :       CALL LEKMOD(MMODEL,IDOMA,INEFMD)
 130 :       IF(IERR.NE.0)GOTO 9999
 131 : C
 132 : C**** Centre, FACE, FACEL
 133 : C
 133 :       CALL LEKTAB(IDOMA,'CENTRE',MELEC)
 134 :       IF(IERR .NE. 0) GOTO 9999
 135 : C
 135 :       CALL LEKTAB(IDOMA,'FACE',MELEF)
 136 :       IF(IERR .NE. 0) GOTO 9999
 137 : C
 137 :       CALL LEKTAB(IDOMA,'FACEL',MELEFL)
 138 :       IF(IERR .NE. 0) GOTO 9999
 139 : C
 140 : C**** Lecture du CHPOINT contenant les surfaces des faces.
 141 : C
 141 :       CALL LEKTAB(IDOMA,'XXSURFAC',ICHPSU)
 142 :       IF(IERR .NE. 0) GOTO 9999
 143 :       INDIC = 1
 144 :       NBCOMP = 1
 145 :       MOT = 'SCAL'
 145 :       CALL QUEPOI(ICHPSU, MELEF, INDIC, NBCOMP, MOT)
 146 :       IF(IERR .NE. 0) GOTO 9999
 147 : C  
 148 : C**** Lecture du CHPOINT contenant les diametres minimums.
 149 : C
 149 :       CALL LEKTAB(IDOMA,'XXDIEMIN',ICHPDI)
 150 :       IF(IERR .NE. 0) GOTO 9999
 151 :       INDIC = 1
 152 :       NBCOMP = 1
 153 :       MOT = 'SCAL'
 153 :       CALL QUEPOI(ICHPDI, MELEC, INDIC, NBCOMP, MOT)
 154 :       IF(IERR .NE. 0) GOTO 9999
 155 : 
 156 : C
 157 : C**** Lecture du CHPOINT contenant les normales aux faces
 158 : C
 159 :       IF(IDIM .EQ. 2)THEN
 160 : C        Que les normales
 160 :          CALL LEKTAB(IDOMA,'XXNORMAF',INORM)
 161 :          IF(IERR .NE. 0) GOTO 9999
 162 :          JGN = 4
 163 :          JGM = 2
 164 :          SEGINI MLMVIT
 165 :          MLMVIT.MOTS(1) = 'UX  '
 166 :          MLMVIT.MOTS(2) = 'UY  '
 166 :          CALL QUEPO1(INORM, MELEF, MLMVIT)
 167 :          SEGSUP MLMVIT
 168 : C
 169 :       ELSE
 170 : C      Les normales et les tangentes
 171 :          TYPE = ' '
 171 :          CALL ACMO(IDOMA,'MATROT',TYPE,INORM)
 172 :          IF (TYPE .NE. 'CHPOINT ') THEN
 172 :             CALL MATRAN(IDOMA,INORM)
 173 :             IF(IERR .NE. 0) GOTO 9999
 174 :          ENDIF
 175 :          JGN = 4
 176 :          JGM = 9
 177 :          SEGINI MLMVIT
 178 :          MLMVIT.MOTS(1) = 'UX  '
 179 :          MLMVIT.MOTS(2) = 'UY  '
 180 :          MLMVIT.MOTS(3) = 'UZ  '
 181 :          MLMVIT.MOTS(4) = 'RX  '
 182 :          MLMVIT.MOTS(5) = 'RY  '
 183 :          MLMVIT.MOTS(6) = 'RZ  '
 184 :          MLMVIT.MOTS(7) = 'MX  '
 185 :          MLMVIT.MOTS(8) = 'MY  '
 186 :          MLMVIT.MOTS(9) = 'MZ  '
 186 :          CALL QUEPO1(INORM, MELEF, MLMVIT)
 187 :          SEGSUP MLMVIT
 188 :       ENDIF
 189 : C     
 190 : C**** Lecture du CHPOINT contenant les volumes
 191 : C
 191 :       CALL LEKTAB(IDOMA,'XXVOLUM',ICHPVO)
 192 :       IF(IERR .NE. 0) GOTO 9999
 193 :       INDIC = 1
 194 :       NBCOMP = 1
 195 :       MOT = 'SCAL'
 195 :       CALL QUEPOI(ICHPVO, MELEC, INDIC, NBCOMP, MOT)
 196 :       IF(IERR .NE. 0) GOTO 9999
 197 : C
 198 : C********************************
 199 : C**** Fin table domaine *********
 200 : C********************************
 201 : C     
 202 : C**** La list des inconnues
 203 : C
 204 :       TYPE='LISTMOTS'
 204 :       CALL LIROBJ(TYPE,ILIINC,1,IRET)
 205 :       IF(IERR .NE. 0) GOTO 9999
 206 : C
 207 : C**** On va lire les pointeurs des CHPOINTs
 208 : C     Lecture du CHPOINT centre densité
 209 : C
 210 :       TYPE='CHPOINT'
 210 :       CALL  LIROBJ(TYPE,IRN,1,IRET)
 211 :       IF(IERR.NE.0) GOTO 9999
 212 : C
 213 : C**** Controle du CHPOINT
 214 : C
 215 :       INDIC = 1
 216 :       NBCOMP = 1
 217 :       MOT = 'SCAL'
 217 :       CALL QUEPOI(IRN, MELEC, INDIC, NBCOMP, MOT)
 218 :       IF(IERR .NE. 0) GOTO 9999
 219 : C
 220 : C**** Lecture du CHPOINT QDM
 221 : C   
 222 :       TYPE='CHPOINT'
 222 :       CALL  LIROBJ(TYPE,IGN,1,IRET)
 223 :       IF(IERR.NE.0) GOTO 9999
 224 : C
 225 : C**** Control du CHPOINT
 226 : C     
 227 :       INDIC = 1
 228 :       NBCOMP = IDIM
 229 :       JGN = 4
 230 :       JGM = IDIM
 231 :       SEGINI MLMOTS
 232 :       MLMOTS.MOTS(1) = 'UX  '
 233 :       MLMOTS.MOTS(2) = 'UY  '
 234 :       IF(IDIM .EQ. 3) MLMOTS.MOTS(3) = 'UZ  '
 234 :       CALL QUEPO1(IGN, MELEC, MLMOTS)
 235 :       IF(IERR .NE. 0) GOTO 9999
 236 :       SEGSUP MLMOTS
 237 : C
 238 : C**** Lecture du CHPOINT centre energie totale
 239 : C
 240 :       TYPE='CHPOINT'
 240 :       CALL  LIROBJ(TYPE,IRETN,1,IRET)
 241 :       IF(IERR.NE.0) GOTO 9999
 242 : C
 243 : C**** Controle du CHPOINT
 244 : C
 245 :       INDIC = 1
 246 :       NBCOMP = 1
 247 :       MOT = 'SCAL'
 247 :       CALL QUEPOI(IRETN, MELEC, INDIC, NBCOMP, MOT)
 248 :       IF(IERR .NE. 0) GOTO 9999
 249 : C
 250 : C**** Lecture du CHPOINT centre gamma
 251 : C
 252 :       TYPE='CHPOINT'
 252 :       CALL  LIROBJ(TYPE,IGAMN,1,IRET)
 253 :       IF(IERR.NE.0) GOTO 9999
 254 : C
 255 : C**** Controle du CHPOINT
 256 : C
 257 :       INDIC = 1
 258 :       NBCOMP = 1
 259 :       MOT = 'SCAL'
 259 :       CALL QUEPOI(IGAMN, MELEC, INDIC, NBCOMP, MOT)
 260 :       IF(IERR .NE. 0) GOTO 9999
 261 : C
 262 : C**** Lecture de le double de la CFL
 263 : C
 264 :       IF(ICOEF .EQ.1) THEN
 264 :          CALL LIRREE(DCFL,1,IRET)
 265 :          IF(IERR .NE. 0) GOTO 9999
 266 :       ENDIF
 267 : C
 268 : C**** Lecture de conditions aux limites
 269 : C
 270 :       IRET=0
 270 :       CALL LIRCHA(MOT,0,IRET)
 271 :       IF(IERR .NE. 0) GOTO 9999
 272 :       IF(IRET .NE. 0)THEN
 273 :          IF(MOT  .EQ. 'CLIM')THEN
 274 : C     
 275 :             TYPE='LISTMOTS'
 275 :             CALL LIROBJ(TYPE,ILIINP,1,IRET)
 276 :             IF(IERR .NE. 0) GOTO 9999
 277 :             MLMOT1=ILIINP
 278 : C
 279 :             TYPE='CHPOINT'
 279 :             CALL  LIROBJ(TYPE,ICHLIM,1,IRET)
 280 :             IF(IERR.NE.0) GOTO 9999
 281 : C
 282 :             MCHPOI = ICHLIM
 283 :             SEGACT MCHPOI
 284 :             NSOUPO = MCHPOI.IPCHP(/1)
 285 :             IF(NSOUPO .EQ. 0) THEN
 286 :                ICHLIM=0
 287 :                MELLIM=0
 288 :             ELSEIF(NSOUPO .GT. 1)THEN
 289 :                MOTERR(1:8) = 'CHAMPOIN'
 290 : C
 291 : C**************** Message d'erreur standard
 292 : C                 132 2
 293 : C                 On veut un objet %m1:8 élémentaire
 294 : C
 294 :                CALL ERREUR(132)
 295 :                GOTO 9999
 296 :             ELSE
 297 :                MSOUPO=MCHPOI.IPCHP(1)
 298 :                SEGACT MSOUPO
 299 :                MELLIM=MSOUPO.IGEOC
 300 :                SEGDES MSOUPO
 301 :                SEGDES MCHPOI
 301 :                CALL QUEPO1(ICHLIM, MELLIM, MLMOT1)
 302 :                IF(IERR.NE.0) GOTO 9999
 303 :             ENDIF
 304 : C
 305 :          ELSE
 305 :             CALL REFUS
 306 :          ENDIF
 307 :       ELSE
 308 :          ICHLIM=0
 309 :          MELLIM=0
 310 :       ENDIF
 311 : C
 312 : C**** Creation de A(UN) ou de B(UN)
 313 : C
 314 :       IF(ICOEF .EQ. 1)THEN
 315 : C
 316 : C******* Creation de A(UN)
 317 : C
 318 :          TYPE = 'CHPOINT '
 319 :          JGN=4
 320 :          JGM=1
 321 :          SEGINI MLMOTS
 322 :          MLMOTS.MOTS(1)='SCAL'
 322 :          CALL KRCHP1(TYPE, MELEC, ICHRES, MLMOTS)
 323 :          IF(IERR .NE. 0) GOTO 9999
 324 :          SEGSUP MLMOTS
 325 :          IF(IDIM .EQ. 2)THEN
 325 :             CALL KFMM1(IRN,IGN,IRETN,IGAMN,
 326 :      &           ICHPSU,ICHPDI,ICHPVO,INORM,
 327 :      &           MELEC,MELEF,MELEFL,DCFL,
 328 :      &           MELLIM,ICHLIM,
 329 :      &           ICHRES)
 330 :          ELSE
 331 :          ENDIF
 332 :       ELSE
 333 : C
 334 : C******* Creation de  B(UN)
 335 : C
 335 :          CALL KRCHP1(TYPE, MELEC, ICHRES, ILIINC)
 336 :          IF(IERR .NE. 0) GOTO 9999
 337 :          IF(IDIM .EQ. 2)THEN
 337 :             CALL KFMM2(IRN,IGN,IRETN,IGAMN,
 338 :      &           ICHPSU,ICHPVO,INORM,
 339 :      &           MELEC,MELEF,MELEFL,
 340 :      &           MELLIM,ICHLIM,
 341 :      &           ICHRES)
 342 :          ELSE
 343 :          ENDIF
 344 :       ENDIF
 345 :       IF(IERR .NE. 0)GOTO 9999
 346 : C
 347 :       TYPE='CHPOINT '
 347 :       CALL ECROBJ(TYPE,ICHRES)
 348 : C
 349 :  9999 CONTINUE
 350 :       RETURN
 351 :       END
 352 : 
 353 : 
 354 : 
 355 : 
 356 :  
 357 :  
 358 :  
 359 :  
 360 :  
 361 :  
 362 :  
 363 :  
 364 :  

© Cast3M 2003 - All rights reserved.
Disclaimer