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