Télécharger prmeca.eso

Retour à la liste

Numérotation des lignes :

prmeca
  1. C PRMECA SOURCE OF166741 24/12/13 21:17:19 12097
  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**** Les variables
  103. C
  104. IMPLICIT INTEGER(I-N)
  105. INTEGER NESP
  106. & ,ICEN,IRO,IROVIT,IROET,IROY
  107. & ,IVIT,IPRES,IY,IGAM,IGEOMC
  108. & ,N1,NLCE,I1,ITEMP
  109. C
  110. C**** NESP = Nombre d'especes dans le gaz.
  111. C
  112. REAL*8 EPSI,VALER(2),VAL1,VAL2
  113. & ,YMIN,YMAX
  114. & ,RO,UX,UY,UZ,RETOT,RETHER,CELL
  115. & ,CPTOT,CVTOT,CP,CV
  116. & ,GAMMA,GAMMIN,GAMMAX
  117. & ,P, T
  118. CHARACTER*(8) TYPE
  119. CHARACTER*(40) MESERR(2)
  120. LOGICAL LOGNEG, LOGBOR, LOGAN
  121. C
  122. C**** Valeur minimum di Y et T(°C)
  123. C
  124. C N.B.: il doit etre le meme dans gamma.eso.
  125. C
  126. PARAMETER(EPSI=1.0D-4,
  127. & YMIN=-EPSI,YMAX=1.0D0+EPSI,
  128. & GAMMIN=1.0D0,GAMMAX=3.0D0)
  129. C
  130. C**** Les includes
  131. C
  132. -INC PPARAM
  133. -INC CCOPTIO
  134. -INC SMCHPOI
  135. POINTEUR MPORO.MPOVAL, MPOROV.MPOVAL, MPOROE.MPOVAL,
  136. & MPOROY.MPOVAL, MPOVIT.MPOVAL, MPOTEM.MPOVAL,
  137. & MPOPRE.MPOVAL, MPOY.MPOVAL, MPOGAM.MPOVAL,
  138. & MSOUPY.MSOUPO
  139. -INC SMELEME
  140. -INC SMLREEL
  141. POINTEUR MLRECP.MLREEL, MLRECV.MLREEL
  142. C
  143. C**** Y(NESP)
  144. C
  145. SEGMENT FRAMAS
  146. REAL*8 Y(NESP)
  147. ENDSEGMENT
  148. SEGINI FRAMAS
  149. C
  150. C**** Initialisation des variables pour la gestion des erreurs pas ici,
  151. C mais avant, i.e.
  152. C
  153. C LOGAN = .FALSE.
  154. C LOGNEG = .FALSE.
  155. C LOGBOR = .FALSE.
  156. C MESERR(1) = ' '
  157. C MESERR(2) = ' '
  158. C
  159. C
  160. C**** Activation du MELEME "CENTRE"
  161. C
  162. IPT1 = ICEN
  163. SEGACT IPT1
  164. N1 = IPT1.NUM(/2)
  165. SEGDES IPT1
  166. C
  167. C*** IVIT ressemble CHPOINT IROVIT (DEBIT).
  168. C
  169. MCHPO1 = IROVIT
  170. SEGACT MCHPO1
  171. MSOUP1 = MCHPO1.IPCHP(1)
  172. SEGDES MCHPO1
  173. SEGACT MSOUP1
  174. MPOROV = MSOUP1.IPOVAL
  175. SEGDES MSOUP1
  176. SEGACT MPOROV
  177. C
  178. C**** IVIT
  179. C
  180. SEGINI, MPOVIT = MPOROV
  181. SEGINI, MSOUP2 = MSOUP1
  182. MSOUP2.IPOVAL = MPOVIT
  183. SEGINI, MCHPO2 = MCHPO1
  184. MCHPO2.IPCHP(1)= MSOUP2
  185. SEGDES MSOUP2
  186. SEGDES MCHPO2
  187. IVIT = MCHPO2
  188. C
  189. C**** Creation des CHPOINTs IPRES et IGAM
  190. C
  191. C Ce CHPOINT ressemble à IRO
  192. C Donc on lit IRO
  193. C
  194. MCHPO1 = IRO
  195. SEGACT MCHPO1
  196. MSOUP1 = MCHPO1.IPCHP(1)
  197. SEGDES MCHPO1
  198. SEGACT MSOUP1
  199. MPORO = MSOUP1.IPOVAL
  200. SEGDES MSOUP1
  201. SEGACT MPORO
  202. C
  203. C*** IPRES
  204. C
  205. SEGINI, MPOPRE = MPORO
  206. SEGINI, MSOUP2 = MSOUP1
  207. MSOUP2.IPOVAL = MPOPRE
  208. SEGINI, MCHPO2 = MCHPO1
  209. MCHPO2.IPCHP(1)= MSOUP2
  210. SEGDES MSOUP2
  211. SEGDES MCHPO2
  212. IPRES = MCHPO2
  213. C
  214. C*** ITEMP
  215. C
  216. SEGINI, MPOTEM = MPORO
  217. SEGINI, MSOUP2 = MSOUP1
  218. MSOUP2.IPOVAL = MPOTEM
  219. SEGINI, MCHPO2 = MCHPO1
  220. MCHPO2.IPCHP(1)= MSOUP2
  221. SEGDES MSOUP2
  222. SEGDES MCHPO2
  223. ITEMP = MCHPO2
  224. C
  225. C*** IGAM
  226. C
  227. SEGINI, MPOGAM = MPORO
  228. SEGINI, MSOUP2 = MSOUP1
  229. MSOUP2.IPOVAL = MPOGAM
  230. SEGINI, MCHPO2 = MCHPO1
  231. MCHPO2.IPCHP(1)= MSOUP2
  232. SEGDES MSOUP2
  233. SEGDES MCHPO2
  234. IGAM = MCHPO2
  235. C
  236. C*** IY
  237. C
  238. C Ce CHPOINT ressemble à IROY
  239. C Donc on lit IROY
  240. C
  241. MCHPO1 = IROY
  242. SEGACT MCHPO1
  243. MSOUPY = MCHPO1.IPCHP(1)
  244. SEGDES MCHPO1
  245. SEGACT MSOUPY
  246. MPOROY = MSOUPY.IPOVAL
  247. SEGACT MPOROY
  248. C
  249. SEGINI, MPOY = MPOROY
  250. SEGINI, MSOUP2 = MSOUPY
  251. MSOUP2.IPOVAL = MPOY
  252. SEGINI, MCHPO2 = MCHPO1
  253. MCHPO2.IPCHP(1)= MSOUP2
  254. SEGDES MSOUP2
  255. SEGDES MCHPO2
  256. IY = MCHPO2
  257. C
  258. C**** Lecture des MPOVALs des autres MCHPOIs
  259. C
  260. CALL LICHT(IROET,MPOROE,TYPE,IGEOMC)
  261. C
  262. C**** LICHT active les MPOVALs en *MOD
  263. C
  264. C i.e.
  265. C
  266. C SEGACT MPOROE*MOD
  267. C
  268. C
  269. C**** RICAPITOLATIF
  270. C
  271. C On a activé que les CHPOINTs suivants
  272. C
  273. C MPORO < -- > RO
  274. C MPOROV < -- > DEBITS
  275. C MPOROE < -- > ROET
  276. C MPOROY < -- > ROY
  277. C MPOVIT < -- > IVIT
  278. C MPOPRE < -- > IPRES
  279. C MPOTEM < -- > ITEM
  280. C MPOY < -- > IY
  281. C MPOGAM < -- > IGAM
  282. C
  283. C En plus MSOUPY, le MSOUPO du IROY est activée
  284. C
  285. C
  286. C**** BOUCLE SUR LES CENTRES pour le calcul des MPOVAL
  287. C
  288. DO NLCE = 1, N1
  289. C
  290. C******* Les differents variables a chaque centre
  291. C
  292. RO = MPORO.VPOCHA(NLCE,1)
  293. IF(RO .LE. 0.0D0)THEN
  294. VALER(1) = RO
  295. MESERR(1) = 'RO '
  296. LOGNEG = .TRUE.
  297. C
  298. C********** RO < 0: le programme s'arrete mais apres le calcul des
  299. C CHPOINTs
  300. C
  301. ENDIF
  302. UX = MPOROV.VPOCHA(NLCE,1)/RO
  303. UY = MPOROV.VPOCHA(NLCE,2)/RO
  304. C
  305. C******* VITESSE -> MPOVIT
  306. C
  307. MPOVIT.VPOCHA(NLCE,1) = UX
  308. MPOVIT.VPOCHA(NLCE,2) = UY
  309. CELL = UX * UX + UY * UY
  310. IF(IDIM .EQ. 3)THEN
  311. UZ = MPOROV.VPOCHA(NLCE,3)/RO
  312. MPOVIT.VPOCHA(NLCE,3) = UZ
  313. CELL = CELL + UZ * UZ
  314. ENDIF
  315. CELL = 0.5D0 * RO * CELL
  316. C
  317. C******* RETOT, RETHER
  318. C
  319. RETOT = MPOROE.VPOCHA(NLCE,1)
  320. RETHER = RETOT - CELL
  321. C
  322. C******* Y -> MPOY.
  323. C
  324. C Calcul de GAMMA
  325. C
  326. C IGAM -> MPOGAM
  327. C
  328. C On a utilisé le ponteur par defaut,
  329. C i.e. Y(I1) = FRAMAS.Y(I1)
  330. C
  331. Y(NESP) = 1.0D0
  332. CPTOT = 0.0D0
  333. CVTOT = 0.0D0
  334. C
  335. C******* N.B.: NESP > 1
  336. C
  337. DO I1 = 1, NESP-1
  338. Y(I1) = MPOROY.VPOCHA(NLCE,I1)/RO
  339. MPOY.VPOCHA(NLCE,I1)=Y(I1)
  340. Y(NESP) = Y(NESP) - Y(I1)
  341. IF((Y(I1) .LT. YMIN) .OR. (Y(I1) .GT. YMAX))THEN
  342. MESERR(2) = 'Y '
  343. VALER(2) = Y(I1)
  344. LOGBOR = .TRUE.
  345. VAL1 = YMIN
  346. VAL2 = YMAX
  347. C
  348. C********** Y !\in (YMIN,YMAX) : le programme s'arrete
  349. C mais apres le calcul des CHPOINTs
  350. C
  351. ENDIF
  352. CP = MLRECP.PROG(I1)
  353. CV = MLRECV.PROG(I1)
  354. CPTOT = CPTOT + Y(I1) * CP
  355. CVTOT = CVTOT + Y(I1) * CV
  356. ENDDO
  357. IF((Y(NESP) .LT. YMIN) .OR. (Y(NESP) .GT. YMAX))THEN
  358. MESERR(2) = 'Y '
  359. VALER(2) = Y(NESP)
  360. LOGBOR = .TRUE.
  361. VAL1 = YMIN
  362. VAL2 = YMAX
  363. C
  364. C********** Y !\in (YMIN,YMAX) : le programme s'arrete
  365. C mais apres le calcul des CHPOINTs
  366. C
  367. ENDIF
  368. CP = MLRECP.PROG(NESP)
  369. CV = MLRECV.PROG(NESP)
  370. CPTOT = CPTOT + Y(NESP) * CP
  371. CVTOT = CVTOT + Y(NESP) * CV
  372. GAMMA = CPTOT / CVTOT
  373. IF((GAMMA .LT. GAMMIN) .OR. (GAMMA .GT. GAMMAX))THEN
  374. MESERR(2) = 'GAMMA '
  375. VALER(2) = GAMMA
  376. VAL1 = GAMMIN
  377. VAL2 = GAMMAX
  378. LOGBOR = .TRUE.
  379. C
  380. C********** GAMMA !\in (GAMMIN,GAMMAX) : le programme s'arrete
  381. C mais apres le calcul des CHPOINTs
  382. C
  383. ENDIF
  384. MPOGAM.VPOCHA(NLCE,1) = GAMMA
  385. C
  386. C******* P -> MPOPRE
  387. C T -> MPOTEM
  388. C
  389. P = (GAMMA - 1.0D0)*RETHER
  390. T = RETHER / RO / CVTOT
  391. IF(P .LE. 0.0D0)THEN
  392. VALER(1) = P
  393. MESERR(1) = 'P '
  394. LOGNEG = .TRUE.
  395. C
  396. C********** P < 0: le programme s'arrete mais apres le calcul des
  397. C CHPOINTs
  398. C
  399. ENDIF
  400. MPOPRE.VPOCHA(NLCE,1) = P
  401. MPOTEM.VPOCHA(NLCE,1) = T
  402. ENDDO
  403. C
  404. 9999 CONTINUE
  405. C
  406. SEGDES MPORO
  407. SEGDES MPOROV
  408. SEGDES MPOROE
  409. SEGDES MPOROY
  410. SEGDES MPOVIT
  411. SEGDES MPOPRE
  412. SEGDES MPOY
  413. SEGDES MPOGAM
  414. SEGDES MPOTEM
  415. SEGDES MSOUPY
  416. C
  417. RETURN
  418. END
  419.  
  420.  
  421.  
  422.  
  423.  
  424.  
  425.  
  426.  

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