Télécharger prmeca.eso

Retour à la liste

Numérotation des lignes :

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

© Cast3M 2003 - Tous droits réservés.
Mentions légales