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