Download pride1.eso

Back to the list

   1 : C PRIDE1    SOURCE    BECC      10/06/23    21:15:01     6691           
   2 :       SUBROUTINE PRIDE1(NESP,NORD,TMAX,RUNIV,PROPHY,
   3 :      &     MLRCHE,MLRMFR,
   4 :      &     ICEN,IALP1,IALP2,IARN1,IARN2,IAGN1,IAGN2,IARET1,IARET2,
   5 :      &     ITG1,ITG2,
   6 :      &     IRN1,IRN2,
   7 :      &     IVN1,IVN2,IPN1,IPN2,ITN1,ITN2,
   8 :      &     EPS,
   9 :      &     LOGAN,LOGIPG,LOGNEG,LOGBOR,LOGNC,
  10 :      &     VALER,VAL1,VAL2)
  11 : C      
  12 : C************************************************************************
  13 : C
  14 : C PROJET            :  CASTEM 2000
  15 : C
  16 : C NOM               :  PRIDE1
  17 : C
  18 : C DESCRIPTION       :  VOIR PRIDEM
  19 : C
  20 : C                      Melange des gaz "reactive thermally perfect".
  21 : C      
  22 : C                      Calcul de la vitesse, de la pression, de la
  23 : C                      temperature
  24 : C     
  25 : C LANGAGE           :  FORTRAN 77 + ESOPE 2000 (avec extensions CISI)
  26 : C      
  27 : C AUTEUR            :  A. BECCANTINI, DEN/DM2S/SFME/TTMF
  28 : C
  29 : C************************************************************************
  30 : C
  31 : C APPELES de calcul :  CONTHE
  32 : C
  33 : C************************************************************************
  34 : C
  35 : C ENTREES  : NESP    : nombre d'especes dans le melange.
  36 : C
  37 : C            NORD    : ordre des polynoms du cv_i
  38 : C
  39 : C            TMAX    : maximum temperature for cv expansion
  40 : C           
  41 : C            RUNIV   : universal constant for gases
  42 : C
  43 : C            PROPHY  : thermodynamic properties for the gases
  44 : C
  45 : C            MLRCHE  : LISTREEL with the coefS involved in the chemical 
  46 : C                      reaction
  47 : C
  48 : C            MLRMFR  : LISTREEL with the mass fractions before or after
  49 : C                      the chemical reaction
  50 : C
  51 : C            ICEN    : MELEME of the mesh
  52 : C
  53 : C            IALP1, IALP2, IARN1, IARN2, IAGN1, IAGN2, IARET1, IARET2, 
  54 : C            ITG1, ITG2 : pointeurs of the input CHAMPOINs
  55 : C
  56 : C            IRN1, IRN2, IVN1, IVN2, IPN1, IPN2, ITN1, ITN2:
  57 : C            pointeurs of the input CHAMPOINs
  58 : C
  59 : C SORTIES  :
  60 : C
  61 : C            LOGAN   : anomalie detectée
  62 : C      
  63 : C            LOGNEG  : (LOGICAL): si .TRUE. une densité ou  un temperature
  64 : C                      negative a été detectée -> le programme s'arrete
  65 : C                      et on peut visualiser le champe de densite ou de 
  66 : C                      temperature (sa valeur stockée en MESERR(1) et
  67 : C                      VALER(1))
  68 : C
  69 : C            LOGBOR  : (LOGICAL)
  70 : C                      si .TRUE. la fraction massique a ete
  71 : C                      detecté  dehor YMIN et YMAX
  72 : C                      (sa valeur stockée en MESERR(2) et  VALER(2)
  73 : C                      ,VAL1,VAL2)
  74 : C            
  75 : C            LOGIPG  : si .TRUE., cv(T) < 0
  76 : C
  77 : C            LOGNC   : si .TRUE., Newton Rapson pour le calcul de T
  78 : C                      n'a pas converge
  79 : C      
  80 : C            MESERR(2),
  81 : C            VALER(2),
  82 : C            VAL1,
  83 : C            VAL2    : pour message d'erreur
  84 : C
  85 : C     
  86 : C************************************************************************
  87 : C
  88 : C HISTORIQUE (Anomalies et modifications éventuelles)
  89 : C
  90 : C HISTORIQUE :  Crée le 06.11.09.
  91 : C 
  92 : C************************************************************************
  93 : C
  94 : C
  95 : C**** Variables de COOPTIO
  96 : C
  97 : C      INTEGER IPLLB, IERPER, IERMAX, IERR, INTERR
  98 : C     &        ,IOTER,   IOLEC,  IOIMP,     IOCAR,  IOACQ
  99 : C     &        ,IOPER,   IOSGB,  IOGRA,     IOSAU,  IORES
 100 : C     &        ,IECHO,   IIMPI,  IOSPI
 101 : C     &        ,IDIM
 102 : C     &        ,MCOORD      
 103 : C     &        ,IFOMOD, NIFOUR, IFOUR, NSDPGE, IONIVE
 104 : C     &        ,NGMAXY, IZROSF, ISOTYP, IOSCR,LTEXLU
 105 : C     &        ,NORINC,NORVAL,NORIND,NORVAD
 106 : C     &        ,NUCROU, IPSAUV
 107 : C
 108 : C**** Les variables
 109 : C      
 110 :       IMPLICIT INTEGER(I-N)
 111 :       INTEGER NESP,NORD
 112 :      &       ,ICEN,IALP1,IALP2,IARN1,IARN2,IAGN1,IAGN2,IARET1,IARET2
 113 :      &       ,ITG1,ITG2
 114 :      &       ,IRN1, IRN2, IVN1, IVN2, IPN1, IPN2, ITN1, ITN2
 115 :      &       ,N1,NLCE,IESP,IGEOMC
 116 : C
 117 : C**** NESP = Nombre d'especes dans le gaz.
 118 : C
 119 :       REAL*8   RUNIV, TMAX, EPSI, VALER(2), VAL1, VAL2
 120 :      &        , YMIN, YMAX
 121 :      &        , EPS
 122 :      &        , UX, UY, UZ, RO, ALPHA, T, P
 123 :      &        , YNESPI, YNESPF
 124 :      &        , ACOE1, YINI, YFIN, DYCO, UVEC(5), TGUESS
 125 :       CHARACTER*(8) TYPE
 126 :       CHARACTER*(40) MESERR(2)
 127 :       LOGICAL LOGNEG, LOGBOR, LOGAN, LOGNC, LOGIPG
 128 : C
 129 : C**** Valeur minimum di Y
 130 : C      
 131 : C     N.B.: il doit etre le meme dans gamma.eso.
 132 : C
 133 :       PARAMETER(EPSI=1.0D-4,
 134 :      &          YMIN=-EPSI,YMAX=1.0D0+EPSI)
 135 : C     
 136 : C**** Les includes
 137 : C
 138 : -INC CCOPTIO
 139 : -INC SMCHPOI
 140 :       POINTEUR MPALP1.MPOVAL, MPALP2.MPOVAL,  
 141 :      &     MPARO1.MPOVAL, MPARO2.MPOVAL,  
 142 :      &     MPAGN1.MPOVAL, MPAGN2.MPOVAL,  
 143 :      &     MPARE1.MPOVAL, MPARE2.MPOVAL,  
 144 :      &     MPOTG1.MPOVAL, MPOTG2.MPOVAL,  
 145 :      &     MPOVN1.MPOVAL, MPOVN2.MPOVAL,  
 146 :      &     MPOPN1.MPOVAL, MPOPN2.MPOVAL,  
 147 :      &     MPORN1.MPOVAL, MPORN2.MPOVAL,  
 148 :      &     MPOTN1.MPOVAL, MPOTN2.MPOVAL
 149 : -INC SMLREEL
 150 :       POINTEUR MLRCHE.MLREEL, MLRMFR.MLREEL,
 151 :      &     MLRYIN.MLREEL, MLRYFI.MLREEL
 152 : -INC SMELEME
 153 : C
 154 : C**** Segment du propriete du gaz
 155 : C
 156 :       SEGMENT PROPHY
 157 :          REAL*8 ACV(NORD+1,NESP), W(NESP), H0K(NESP)
 158 :       ENDSEGMENT
 159 :       SEGACT PROPHY
 160 : C
 161 : C**** Initialisation des variables pour la gestion des erreurs pas ici,
 162 : C     mais avant
 163 : C
 164 :       SEGMENT SUMCV
 165 :          REAL*8 ACVTOT(NORD+1)
 166 :       ENDSEGMENT
 167 :       SEGINI SUMCV
 168 : C
 169 : C**** Activation du MELEME "CENTRE"
 170 : C
 171 :       IPT1 = ICEN
 172 :       SEGACT IPT1
 173 :       N1 = IPT1.NUM(/2)
 174 :       SEGDES IPT1
 175 : C
 176 : C**** Lecture des MPOVALs
 177 : C
 177 :       CALL LICHT(IALP1, MPALP1,TYPE,IGEOMC)
 177 :       CALL LICHT(IARN1, MPARO1,TYPE,IGEOMC)
 177 :       CALL LICHT(IAGN1, MPAGN1,TYPE,IGEOMC)
 177 :       CALL LICHT(IARET1,MPARE1,TYPE,IGEOMC)
 177 :       CALL LICHT(ITG1,  MPOTG1,TYPE,IGEOMC)
 177 :       CALL LICHT(IVN1,  MPOVN1,TYPE,IGEOMC)
 177 :       CALL LICHT(IPN1,  MPOPN1,TYPE,IGEOMC)
 177 :       CALL LICHT(IRN1,  MPORN1,TYPE,IGEOMC)
 177 :       CALL LICHT(ITN1,  MPOTN1,TYPE,IGEOMC)
 178 : C
 178 :       CALL LICHT(IALP2,MPALP2,TYPE,IGEOMC)
 178 :       CALL LICHT(IARN2,MPARO2,TYPE,IGEOMC)
 178 :       CALL LICHT(IAGN2,MPAGN2,TYPE,IGEOMC)
 178 :       CALL LICHT(IARET2,MPARE2,TYPE,IGEOMC)
 178 :       CALL LICHT(ITG2,MPOTG2,TYPE,IGEOMC)
 178 :       CALL LICHT(IVN2,MPOVN2,TYPE,IGEOMC)
 178 :       CALL LICHT(IPN2,MPOPN2,TYPE,IGEOMC)
 178 :       CALL LICHT(IRN2,MPORN2,TYPE,IGEOMC)
 178 :       CALL LICHT(ITN2,MPOTN2,TYPE,IGEOMC)
 179 : C
 180 : C**** LICHT active les MPOVALs en *MOD
 181 : C
 182 : C     i.e.
 183 : C
 184 : C     SEGACT 
 185 : C
 186 : C
 187 : C**** Computation of the mass fractions
 188 : C
 189 :       SEGACT MLRMFR 
 190 :       SEGACT MLRCHE
 191 :       SEGINI, MLRYIN = MLRMFR
 192 :       SEGINI, MLRYFI = MLRMFR
 193 :       YNESPI = 1.0D0
 194 :       YNESPF = 1.0D0
 195 :       ACOE1 = MLRCHE.PROG(1)
 196 :       IF (ACOE1 .LE. 0.0D0)THEN
 197 :          WRITE(IOIMP,*) 'TAB1 . CHEMCOEF = ???                   '
 198 :          WRITE(IOIMP,*) 'First coefficient <= 0                  '
 198 :          CALL ERREUR(21)
 199 :          GOTO 9999
 200 :       ENDIF
 201 :       YINI   = MLRMFR.PROG(1)
 202 :       YFIN   = MLRMFR.PROG(2)
 203 :       YNESPF = YNESPF - YFIN
 204 :       YNESPI = YNESPI - YINI
 205 :       MLRYIN.PROG(1) = YINI
 206 :       MLRYFI.PROG(1) = YFIN
 207 :       DYCO = (YINI - YFIN) / (ACOE1 *  PROPHY.W(1))
 208 :       IF((YINI .LT. YMIN) .OR. (YINI .GT. YMAX))THEN
 209 :          MESERR(2) = 'YINI                                    '
 210 :          VALER(2)  = YINI
 211 :          LOGBOR = .TRUE.
 212 :          VAL1 = YMIN
 213 :          VAL2 = YMAX
 214 :       ENDIF
 215 :       IF((YFIN .LT. YMIN) .OR. (YFIN .GT. YMAX))THEN
 216 :          MESERR(2) = 'YFIN                                    '
 217 :          VALER(2)  = YFIN
 218 :          LOGBOR = .TRUE.
 219 :          VAL1 = YMIN
 220 :          VAL2 = YMAX
 221 :       ENDIF
 222 :       DO IESP = 2 , (NESP - 1), 1
 223 :          ACOE1 = MLRCHE.PROG(IESP)
 224 :          IF (ACOE1 .GT. 0.0D0) THEN
 225 :             YFIN   = MLRMFR.PROG(IESP + 1)
 226 :             YINI = YFIN + (DYCO * (ACOE1 * PROPHY.W(IESP)))
 227 :          ELSE
 228 :             YINI = MLRMFR.PROG(IESP + 1)
 229 :             YFIN = YINI - (DYCO * (ACOE1 * PROPHY.W(IESP)))
 230 :          ENDIF
 231 :          MLRYFI.PROG(IESP) = YFIN
 232 :          MLRYIN.PROG(IESP) = YINI
 233 :          YNESPF = YNESPF - YFIN
 234 :          YNESPI = YNESPI - YINI
 235 :          IF((YINI .LT. YMIN) .OR. (YINI .GT. YMAX))THEN
 236 :             MESERR(2) = 'YINI                                    '
 237 :             VALER(2)  = YINI
 238 :             LOGBOR = .TRUE.
 239 :             VAL1 = YMIN
 240 :             VAL2 = YMAX
 241 :          ENDIF
 242 :          IF((YFIN .LT. YMIN) .OR. (YFIN .GT. YMAX))THEN
 243 :             MESERR(2) = 'YFIN                                    '
 244 :             VALER(2)  = YFIN
 245 :             LOGBOR = .TRUE.
 246 :             VAL1 = YMIN
 247 :             VAL2 = YMAX
 248 :          ENDIF
 249 :       ENDDO
 250 :       IF((YNESPI .LT. YMIN) .OR. (YNESPI .GT. YMAX))THEN
 251 :          MESERR(2) = 'YNESPI                                  '
 252 :          VALER(2)  = YNESPI
 253 :          LOGBOR = .TRUE.
 254 :          VAL1 = YMIN
 255 :          VAL2 = YMAX
 256 :       ENDIF
 257 :       IF((YNESPF .LT. YMIN) .OR. (YNESPF .GT. YMAX))THEN
 258 :          MESERR(2) = 'YFIN                                    '
 259 :          VALER(2)  = YFIN
 260 :          LOGBOR = .TRUE.
 261 :          VAL1 = YMIN
 262 :          VAL2 = YMAX
 263 :       ENDIF
 264 :       MLRYFI.PROG(NESP) = YNESPF
 265 :       MLRYIN.PROG(NESP) = YNESPI
 266 : C
 267 : c      write(*,*) 'Initial mass fractions'
 268 : c      do iesp = 1 , nesp
 269 : c         write(*,*) iesp, mlryin.prog(iesp)
 270 : c      enddo
 271 : c      write(*,*) 'Final mass fractions'
 272 : c      do iesp = 1 , nesp
 273 : c         write(*,*) mlryfi.prog(iesp)
 274 : c      enddo
 275 : c
 276 : C
 277 : C**** BOUCLE SUR LES CENTRES pour le calcul des MPOVAL
 278 : C
 279 :       DO NLCE = 1, N1
 280 : C
 281 : C******* Les differents variables a chaque centre
 282 : C        
 283 :          ALPHA = MPALP1.VPOCHA(NLCE,1)
 284 :          IF (ALPHA .GT. EPS) THEN
 285 :             RO = MPARO1.VPOCHA(NLCE,1) / ALPHA
 286 :             UVEC(1)   = RO
 287 :             IF(RO .LE. 0.0D0)THEN
 288 :                VALER(1) = RO
 289 :                MESERR(1) = 'RO                                      '
 290 :                LOGNEG = .TRUE.
 291 :                GOTO 9999
 292 :             ENDIF
 293 :             UVEC(2) = MPAGN1.VPOCHA(NLCE,1) / ALPHA
 294 :             UVEC(3) = MPAGN1.VPOCHA(NLCE,2) / ALPHA
 295 :             IF (IDIM .EQ. 3) THEN
 296 :                UVEC(4) = MPAGN1.VPOCHA(NLCE,3) / ALPHA
 297 :             ELSE
 298 :                UVEC(4) = 0.0D0
 299 :             ENDIF
 300 :             UVEC(5) = MPARE1.VPOCHA(NLCE,1) / ALPHA
 301 :             TGUESS = MPOTG1.VPOCHA(NLCE,1)
 301 :             CALL CONTHE(NESP, NORD, PROPHY.ACV, PROPHY.W, PROPHY.H0K, 
 302 :      &           RUNIV, TMAX, UVEC, MLRYIN.PROG,
 303 :      &           TGUESS,
 304 :      &           SUMCV.ACVTOT,
 305 :      &           UX, UY, UZ, P, T,
 306 :      &           LOGIPG, LOGNC, LOGNEG, VALER, MESERR)
 307 :             IF (LOGNC .OR. LOGNEG)THEN
 308 :                GOTO 9999
 309 :             ENDIF
 310 :             MPOVN1.VPOCHA(NLCE,1) = UX
 311 :             MPOVN1.VPOCHA(NLCE,2) = UY
 312 :             IF (IDIM .EQ. 3) THEN
 313 :                MPOVN1.VPOCHA(NLCE,3) = UZ
 314 :             ENDIF
 315 :             MPOTN1.VPOCHA(NLCE,1) = T
 316 :             MPOPN1.VPOCHA(NLCE,1) = P
 317 :             MPORN1.VPOCHA(NLCE,1) = RO
 318 :          ENDIF
 319 : C
 320 :          ALPHA = MPALP2.VPOCHA(NLCE,1)
 321 :          IF (ALPHA .GT. EPS) THEN
 322 :             RO = MPARO2.VPOCHA(NLCE,1) / ALPHA
 323 :             UVEC(1)   = RO
 324 :             IF(RO .LE. 0.0D0)THEN
 325 :                VALER(1) = RO
 326 :                MESERR(1) = 'RO                                      '
 327 :                LOGNEG = .TRUE.
 328 :                GOTO 9999
 329 :             ENDIF
 330 :             UVEC(2) = MPAGN2.VPOCHA(NLCE,1) / ALPHA
 331 :             UVEC(3) = MPAGN2.VPOCHA(NLCE,2) / ALPHA
 332 :             IF (IDIM .EQ. 3) THEN
 333 :                UVEC(4) = MPAGN2.VPOCHA(NLCE,3) / ALPHA
 334 :             ELSE
 335 :                UVEC(4) = 0.0D0
 336 :             ENDIF
 337 :             UVEC(5) = MPARE2.VPOCHA(NLCE,1) / ALPHA
 338 :             TGUESS = MPOTG2.VPOCHA(NLCE,1)
 338 :             CALL CONTHE(NESP, NORD, PROPHY.ACV, PROPHY.W, PROPHY.H0K, 
 339 :      &           RUNIV, TMAX, UVEC, MLRYFI.PROG,
 340 :      &           TGUESS,
 341 :      &           SUMCV.ACVTOT,
 342 :      &           UX, UY, UZ, P, T,
 343 :      &           LOGIPG, LOGNC, LOGNEG, VALER, MESERR)
 344 :             IF (LOGNC .OR. LOGNEG)THEN
 345 :                GOTO 9999
 346 :             ENDIF
 347 :             MPOVN2.VPOCHA(NLCE,1) = UX
 348 :             MPOVN2.VPOCHA(NLCE,2) = UY
 349 :             IF (IDIM .EQ. 3) THEN
 350 :                MPOVN2.VPOCHA(NLCE,3) = UZ
 351 :             ENDIF
 352 :             MPOTN2.VPOCHA(NLCE,1) = T
 353 :             MPOPN2.VPOCHA(NLCE,1) = P
 354 :             MPORN2.VPOCHA(NLCE,1) = RO
 355 :          ENDIF
 356 : C
 357 : C**** Fin boucle sur les points
 358 : C
 359 :       ENDDO
 360 : C      
 361 :  9999 CONTINUE
 362 : C
 363 :       SEGDES MPALP1
 364 :       SEGDES MPARO1
 365 :       SEGDES MPAGN1
 366 :       SEGDES MPARE1
 367 :       SEGDES MPOTG1
 368 :       SEGDES MPOVN1
 369 :       SEGDES MPOPN1
 370 :       SEGDES MPORN1
 371 :       SEGDES MPOTN1
 372 :       SEGDES MPALP2
 373 :       SEGDES MPARO2
 374 :       SEGDES MPAGN2
 375 :       SEGDES MPARE2
 376 :       SEGDES MPOTG2
 377 :       SEGDES MPOVN2
 378 :       SEGDES MPOPN2
 379 :       SEGDES MPORN2
 380 :       SEGDES MPOTN2
 381 : C
 382 :       SEGDES PROPHY
 383 : C
 384 :       SEGDES MLRMFR 
 385 :       SEGDES MLRCHE
 386 : C
 387 :       SEGSUP MLRYIN
 388 :       SEGSUP MLRYFI
 389 :       SEGSUP SUMCV
 390 : C
 391 :       RETURN
 392 :       END
 393 : 
 394 :  
 395 :  
 396 :  
 397 :  
 398 :  
 399 :  
 400 :  

© Cast3M 2003 - All rights reserved.
Disclaimer