Télécharger prmeca.eso

Retour à la liste

Numérotation des lignes :

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

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