Download prmeca.eso

Back to the list

   1 : C PRMECA    SOURCE    CHAT      05/01/13    02:28:52     5004           
   2 :       SUBROUTINE PRMECA(NESP,
   3 :      &            ICEN,IRO,IROVIT,IROET,IROY,MLRECP,MLRECV,
   4 :      &            IVIT,IPRES,ITEMP,IY,IGAM,
   5 :      &            LOGAN,LOGNEG,LOGBOR,MESERR,
   6 :      &            VALER, VAL1,VAL2)
   7 : C      
   8 : C************************************************************************
   9 : C
  10 : C PROJET            :  CASTEM 2000
  11 : C
  12 : C NOM               :  PRMECA
  13 : C
  14 : C DESCRIPTION       :  VOIR PRIMME
  15 : C
  15 : C                      Melange des gaz "calorically perfect".
  16 : C      
  17 : C                      Calcul de la vitesse, de la pression, de la
  18 : C                      temperature, des fractions massiques, de "gamma"
  19 : C     
  20 : C LANGAGE           :  FORTRAN 77 + ESOPE 2000 (avec extensions CISI)
  21 : C      
  22 : C AUTEUR            :  A. BECCANTINI, DRN/DMT/SEMT/TTMF                        
  23 : C
  24 : C************************************************************************
  25 : C
  26 : C APPELES           : LICHT, ACCTAB
  27 : C
  28 : C************************************************************************
  29 : C
  30 : C ENTREES  : NESP    : nombre d'especes dans le melange.
  31 : C
  32 : C            ICEN    : MELEME contenant les centres des ELTs
  33 : C
  34 : C            IRO     : CHPOINT  contenant la masse volumique.
  35 : C
  36 : C            IROVIT  : CHPOINT contenant les dèbits
  37 : C                     ( NDIM  composantes);
  38 : C     
  39 : C            IROET   : CHPOINT  contenat l'énergie totale per
  40 : C                      unité de volume (RHO Et);
  41 : C
  42 : C            IROY    : CHPOINT  contenant la masse de
  43 : C                      differentes especes;
  44 : C
  45 : C            MLRECP  : LREEL contenant les CP des differentes especes
  46 : C
  47 : C            MLRECV  : LREEL contenant les CV des differentes especes
  48 : C
  49 : C SORTIES  :
  50 : C
  51 : C            IVIT    : CHPOINT  contenant la vitesse
  52 : C     
  53 : C            IPRES   : CHPOINT  contenant la pression du gaz;
  54 : C      
  55 : C            ITEMP   : CHPOINT  contenant la temperature du
  56 : C                      gaz;
  57 : C
  58 : C            IY      : CHPOINT  contenant les fractions
  59 : C                      massiques du gaz;
  60 : C      
  61 : C            IGAM    : CHPOINT  contenant les "gamma" du gaz;
  62 : C
  63 : C            LOGAN   : anomalie detectée
  64 : C      
  65 : C            LOGNEG  : (LOGICAL): si .TRUE. une pression ou une densité
  66 : C                      negative a été detectée -> le programme s'arrete
  67 : C                      et on peut visualiser le champe de pression et de
  68 : C                      volume (sa valeur stockée en MESERR(1) et
  69 : C                      VALER(1))
  70 : C
  71 : C            LOGBOR  : (LOGICAL)
  72 : C                      si .TRUE. la fraction massique a ete
  73 : C                      detecté  dehor YMIN et YMAX
  74 : C                      (sa valeur stockée en MESERR(2) et  VALER(2)
  75 : C                      ,VAL1,VAL2)
  76 : C                      ou
  77 : C                      la pression a été detectée  dehor PMIN et PMAX
  78 : C                      (sa valeur stockée en MESERR(2) et
  79 : C                      VALER(2),VAL1,VAL2)
  80 : C      
  81 : C                      ou
  82 : C                      gamma a été detecté dehor GAMMIN et GAMMAX
  83 : C                      (sa valeur stockée en MESERR(2) et
  84 : C                      VALER(2),VAL1,VAL2)
  85 : C      
  86 : C      
  87 : C            MESERR(2),
  88 : C            VALER(2),
  89 : C            VAL1,
  90 : C            VAL2    : pour message d'erreur
  91 : C
  92 : C     
  93 : C************************************************************************
  94 : C
  95 : C HISTORIQUE (Anomalies et modifications éventuelles)
  96 : C
  97 : C HISTORIQUE :  Créée le 12.1.98.
  98 : C 
  99 : C************************************************************************
 100 : C
 101 : C
 102 : C**** Variables de COOPTIO
 103 : C
 104 : C      INTEGER IPLLB, IERPER, IERMAX, IERR, INTERR
 105 : C     &        ,IOTER,   IOLEC,  IOIMP,     IOCAR,  IOACQ
 106 : C     &        ,IOPER,   IOSGB,  IOGRA,     IOSAU,  IORES
 107 : C     &        ,IECHO,   IIMPI,  IOSPI
 108 : C     &        ,IDIM
 109 : C     &        ,MCOORD      
 110 : C     &        ,IFOMOD, NIFOUR, IFOUR, NSDPGE, IONIVE
 111 : C     &        ,NGMAXY, IZROSF, ISOTYP, IOSCR,LTEXLU
 112 : C     &        ,NORINC,NORVAL,NORIND,NORVAD
 113 : C     &        ,NUCROU, IPSAUV
 114 : C
 115 : C**** Les variables
 116 : C      
 117 :       IMPLICIT INTEGER(I-N)
 118 :       INTEGER NESP
 119 :      &       ,ICEN,IRO,IROVIT,IROET,IROY
 120 :      &       ,IVIT,IPRES,IY,IGAM,IGEOMC
 121 :      &       ,N1,NLCE,I1,ITEMP
 122 : C
 123 : C**** NESP = Nombre d'especes dans le gaz.
 124 : C
 125 :       REAL*8   EPSI,VALER(2),VAL1,VAL2
 126 :      &        ,YMIN,YMAX
 127 :      &        ,RO,UX,UY,UZ,RETOT,RETHER,CELL
 128 :      &        ,CPTOT,CVTOT,CP,CV
 129 :      &        ,GAMMA,GAMMIN,GAMMAX
 130 :      &        ,P, T
 131 :       CHARACTER*(8) TYPE
 132 :       CHARACTER*(40) MESERR(2)
 133 :       LOGICAL LOGNEG, LOGBOR, LOGAN
 134 : C
 135 : C**** Valeur minimum di Y et T(°C)
 136 : C      
 137 : C     N.B.: il doit etre le meme dans gamma.eso.
 138 : C
 139 :       PARAMETER(EPSI=1.0D-4,
 140 :      &          YMIN=-EPSI,YMAX=1.0D0+EPSI,
 141 :      &          GAMMIN=1.0D0,GAMMAX=3.0D0)
 142 : C     
 143 : C**** Les includes
 144 : C
 145 : -INC CCOPTIO
 146 : -INC SMCHPOI
 147 :       POINTEUR MPORO.MPOVAL,  MPOROV.MPOVAL, MPOROE.MPOVAL,
 148 :      &         MPOROY.MPOVAL, MPOVIT.MPOVAL, MPOTEM.MPOVAL,
 149 :      &         MPOPRE.MPOVAL, MPOY.MPOVAL,   MPOGAM.MPOVAL,
 150 :      &         MSOUPY.MSOUPO
 151 : -INC SMELEME
 152 : -INC SMLREEL
 153 :       POINTEUR MLRECP.MLREEL, MLRECV.MLREEL
 154 : C     
 155 : C**** Y(NESP)
 156 : C
 157 :       SEGMENT FRAMAS
 158 :          REAL*8 Y(NESP)
 159 :       ENDSEGMENT
 160 :       SEGINI FRAMAS
 161 : C
 162 : C**** Initialisation des variables pour la gestion des erreurs pas ici,
 163 : C     mais avant, i.e.
 164 : C
 165 : C      LOGAN   = .FALSE.      
 166 : C      LOGNEG  = .FALSE.
 167 : C      LOGBOR  = .FALSE.
 168 : C      MESERR(1)  = '                                        '      
 169 : C      MESERR(2)  = '                                        '      
 170 : C
 171 : C     
 172 : C**** Activation du MELEME "CENTRE"
 173 : C
 174 :       IPT1 = ICEN
 175 :       SEGACT IPT1
 176 :       N1 = IPT1.NUM(/2)
 177 :       SEGDES IPT1
 178 : C
 179 : C***  IVIT ressemble CHPOINT IROVIT (DEBIT).
 180 : C
 181 :       MCHPO1 = IROVIT
 182 :       SEGACT MCHPO1
 183 :       MSOUP1 = MCHPO1.IPCHP(1)
 184 :       SEGDES MCHPO1
 185 :       SEGACT MSOUP1
 186 :       MPOROV = MSOUP1.IPOVAL
 187 :       SEGDES MSOUP1
 188 :       SEGACT MPOROV
 189 : C
 190 : C**** IVIT
 191 : C
 192 :       SEGINI, MPOVIT = MPOROV
 193 :       SEGINI, MSOUP2 = MSOUP1
 194 :       MSOUP2.IPOVAL = MPOVIT
 195 :       SEGINI, MCHPO2 = MCHPO1
 196 :       MCHPO2.IPCHP(1)= MSOUP2
 197 :       SEGDES MSOUP2
 198 :       SEGDES MCHPO2
 199 :       IVIT = MCHPO2
 200 : C
 201 : C**** Creation des CHPOINTs IPRES et IGAM
 202 : C    
 203 : C     Ce CHPOINT ressemble à IRO
 204 : C     Donc on lit IRO
 205 : C     
 206 :       MCHPO1 = IRO
 207 :       SEGACT MCHPO1
 208 :       MSOUP1 = MCHPO1.IPCHP(1)
 209 :       SEGDES MCHPO1
 210 :       SEGACT MSOUP1
 211 :       MPORO = MSOUP1.IPOVAL
 212 :       SEGDES MSOUP1
 213 :       SEGACT MPORO
 214 : C
 215 : C***  IPRES
 216 : C
 217 :       SEGINI, MPOPRE = MPORO
 218 :       SEGINI, MSOUP2 = MSOUP1
 219 :       MSOUP2.IPOVAL = MPOPRE
 220 :       SEGINI, MCHPO2 = MCHPO1
 221 :       MCHPO2.IPCHP(1)= MSOUP2
 222 :       SEGDES MSOUP2
 223 :       SEGDES MCHPO2
 224 :       IPRES = MCHPO2
 225 : C
 226 : C***  ITEMP
 227 : C
 228 :       SEGINI, MPOTEM = MPORO
 229 :       SEGINI, MSOUP2 = MSOUP1
 230 :       MSOUP2.IPOVAL = MPOTEM
 231 :       SEGINI, MCHPO2 = MCHPO1
 232 :       MCHPO2.IPCHP(1)= MSOUP2
 233 :       SEGDES MSOUP2
 234 :       SEGDES MCHPO2
 235 :       ITEMP = MCHPO2
 236 : C
 237 : C***  IGAM
 238 : C
 239 :       SEGINI, MPOGAM = MPORO
 240 :       SEGINI, MSOUP2 = MSOUP1
 241 :       MSOUP2.IPOVAL = MPOGAM
 242 :       SEGINI, MCHPO2 = MCHPO1
 243 :       MCHPO2.IPCHP(1)= MSOUP2
 244 :       SEGDES MSOUP2
 245 :       SEGDES MCHPO2
 246 :       IGAM = MCHPO2
 247 : C
 248 : C***  IY
 249 : C
 250 : C     Ce CHPOINT ressemble à IROY
 251 : C     Donc on lit IROY
 252 : C     
 253 :       MCHPO1 = IROY
 254 :       SEGACT MCHPO1
 255 :       MSOUPY = MCHPO1.IPCHP(1)
 256 :       SEGDES MCHPO1
 257 :       SEGACT MSOUPY
 258 :       MPOROY = MSOUPY.IPOVAL
 259 :       SEGACT MPOROY
 260 : C      
 261 :       SEGINI, MPOY = MPOROY
 262 :       SEGINI, MSOUP2 = MSOUPY
 263 :       MSOUP2.IPOVAL = MPOY
 264 :       SEGINI, MCHPO2 = MCHPO1
 265 :       MCHPO2.IPCHP(1)= MSOUP2
 266 :       SEGDES MSOUP2
 267 :       SEGDES MCHPO2
 268 :       IY = MCHPO2
 269 : C
 270 : C**** Lecture des MPOVALs  des autres MCHPOIs
 271 : C
 271 :       CALL LICHT(IROET,MPOROE,TYPE,IGEOMC)
 272 : C
 273 : C**** LICHT active les MPOVALs en *MOD
 274 : C
 275 : C     i.e.
 276 : C
 277 : C     SEGACT MPOROE*MOD
 278 : C
 279 : C
 280 : C**** RICAPITOLATIF
 281 : C
 282 : C     On a activé que les CHPOINTs suivants
 283 : C
 284 : C     MPORO  < -- > RO
 285 : C     MPOROV < -- > DEBITS
 286 : C     MPOROE < -- > ROET
 287 : C     MPOROY < -- > ROY
 288 : C     MPOVIT < -- > IVIT      
 289 : C     MPOPRE < -- > IPRES
 290 : C     MPOTEM < -- > ITEM
 291 : C     MPOY   < -- > IY
 292 : C     MPOGAM < -- > IGAM
 293 : C
 294 : C     En plus MSOUPY, le MSOUPO du IROY est activée      
 295 : C      
 296 : C
 297 : C**** BOUCLE SUR LES CENTRES pour le calcul des MPOVAL
 298 : C
 299 :       DO NLCE = 1, N1
 300 : C
 301 : C******* Les differents variables a chaque centre
 302 : C        
 303 :          RO   = MPORO.VPOCHA(NLCE,1)
 304 :          IF(RO .LE. 0.0D0)THEN
 305 :             VALER(1) = RO
 306 :             MESERR(1) = 'RO                                      '
 307 :             LOGNEG = .TRUE.
 308 : C
 309 : C********** RO < 0: le programme s'arrete mais apres le calcul des
 310 : C                   CHPOINTs            
 311 : C            
 312 :          ENDIF
 313 :          UX = MPOROV.VPOCHA(NLCE,1)/RO
 314 :          UY = MPOROV.VPOCHA(NLCE,2)/RO
 315 : C
 316 : C******* VITESSE  ->  MPOVIT
 317 : C        
 318 :          MPOVIT.VPOCHA(NLCE,1) = UX
 319 :          MPOVIT.VPOCHA(NLCE,2) = UY
 320 :          CELL = UX * UX + UY * UY
 321 :          IF(IDIM .EQ. 3)THEN
 322 :             UZ = MPOROV.VPOCHA(NLCE,3)/RO
 323 :             MPOVIT.VPOCHA(NLCE,3) = UZ
 324 :             CELL = CELL + UZ * UZ
 325 :          ENDIF
 326 :          CELL = 0.5D0 * RO * CELL
 327 : C
 328 : C******* RETOT, RETHER
 329 : C         
 330 :          RETOT = MPOROE.VPOCHA(NLCE,1)
 331 :          RETHER = RETOT - CELL
 332 : C
 333 : C******* Y -> MPOY.
 334 : C         
 335 : C        Calcul de GAMMA
 336 : C         
 337 : C        IGAM -> MPOGAM                 
 338 : C
 339 : C        On a utilisé le ponteur par defaut,
 340 : C        i.e. Y(I1) = FRAMAS.Y(I1)
 341 : C         
 342 :          Y(NESP) = 1.0D0
 343 :          CPTOT = 0.0D0
 344 :          CVTOT = 0.0D0
 345 : C
 346 : C******* N.B.: NESP > 1
 347 : C         
 348 :          DO I1 = 1, NESP-1
 349 :             Y(I1) = MPOROY.VPOCHA(NLCE,I1)/RO
 350 :             MPOY.VPOCHA(NLCE,I1)=Y(I1)
 351 :             Y(NESP) = Y(NESP) - Y(I1)
 352 :             IF((Y(I1) .LT. YMIN) .OR. (Y(I1) .GT. YMAX))THEN
 353 :                MESERR(2) = 'Y                                      '
 354 :                VALER(2)  = Y(I1)
 355 :                LOGBOR = .TRUE.
 356 :                VAL1 = YMIN
 357 :                VAL2 = YMAX
 358 : C
 359 : C********** Y  !\in (YMIN,YMAX) : le programme s'arrete
 360 : C           mais apres le calcul des  CHPOINTs            
 361 : C            
 362 :             ENDIF
 363 :             CP = MLRECP.PROG(I1)
 364 :             CV = MLRECV.PROG(I1)
 365 :             CPTOT = CPTOT + Y(I1) * CP
 366 :             CVTOT = CVTOT + Y(I1) * CV
 367 :          ENDDO
 368 :          IF((Y(NESP) .LT. YMIN) .OR. (Y(NESP) .GT. YMAX))THEN
 369 :             MESERR(2) = 'Y                                       '  
 370 :             VALER(2)  = Y(NESP)
 371 :             LOGBOR = .TRUE.
 372 :             VAL1 = YMIN
 373 :             VAL2 = YMAX
 374 : C
 375 : C********** Y !\in (YMIN,YMAX) : le programme s'arrete
 376 : C           mais apres le calcul des  CHPOINTs            
 377 : C            
 378 :          ENDIF
 379 :          CP = MLRECP.PROG(NESP)
 380 :          CV = MLRECV.PROG(NESP)
 381 :          CPTOT = CPTOT + Y(NESP) * CP
 382 :          CVTOT = CVTOT + Y(NESP) * CV
 383 :          GAMMA = CPTOT / CVTOT        
 384 :          IF((GAMMA .LT. GAMMIN) .OR. (GAMMA .GT. GAMMAX))THEN
 385 :             MESERR(2) = 'GAMMA                                   '
 386 :             VALER(2)  = GAMMA
 387 :             VAL1 = GAMMIN
 388 :             VAL2 = GAMMAX
 389 :             LOGBOR = .TRUE.
 390 : C
 391 : C********** GAMMA !\in (GAMMIN,GAMMAX) : le programme s'arrete
 392 : C           mais apres le calcul des  CHPOINTs            
 393 : C            
 394 :          ENDIF
 395 :          MPOGAM.VPOCHA(NLCE,1) = GAMMA
 396 : C
 397 : C******* P -> MPOPRE
 398 : C        T -> MPOTEM         
 399 : C
 400 :          P = (GAMMA - 1.0D0)*RETHER
 401 :          T = RETHER / RO / CVTOT
 402 :          IF(P .LE. 0.0D0)THEN
 403 :             VALER(1) = P
 404 :             MESERR(1) = 'P                                      '
 405 :             LOGNEG = .TRUE.
 406 : C
 407 : C********** P < 0: le programme s'arrete mais apres le calcul des
 408 : C                   CHPOINTs            
 409 : C            
 410 :          ENDIF
 411 :          MPOPRE.VPOCHA(NLCE,1) = P
 412 :          MPOTEM.VPOCHA(NLCE,1) = T
 413 :       ENDDO
 414 : C      
 415 :  9999 CONTINUE
 416 : C
 417 :       SEGDES MPORO
 418 :       SEGDES MPOROV
 419 :       SEGDES MPOROE
 420 :       SEGDES MPOROY
 421 :       SEGDES MPOVIT
 422 :       SEGDES MPOPRE
 423 :       SEGDES MPOY
 424 :       SEGDES MPOGAM
 425 :       SEGDES MPOTEM
 426 :       SEGDES MSOUPY
 427 : C
 428 :       RETURN
 429 :       END
 430 : 
 431 :  
 432 :  
 433 :  
 434 :  

© Cast3M 2003 - All rights reserved.
Disclaimer