Télécharger primi2.eso

Retour à la liste

Numérotation des lignes :

primi2
  1. C PRIMI2 SOURCE OF166741 24/12/13 21:17:16 12097
  2. SUBROUTINE PRIMI2(NESP,NORDP1,NSCA,PROPHY,
  3. & ICEN,IRO,IROVIT,IROET,IROY,IROSCA,LOGTEM,IT,
  4. & IVIT,IPRES,ITEMP,IY,ISCA,IGAM,
  5. & LOGAN,LOGNEG,LOGBOR,LOGIPG,LOGNC,MESERR,
  6. & VALER,VAL1,VAL2)
  7. C
  8. C************************************************************************
  9. C
  10. C PROJET : CASTEM 2000
  11. C
  12. C NOM : PRIMI2
  13. C
  14. C DESCRIPTION : VOIR PRIMI1
  15. C
  16. C Melange des gaz "thermally 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 NORDP1 : ordre des polynoms du cv_i + 1
  34. C
  35. C NSCA : nombre scalaires passif splittés
  36. C
  37. C PROPHY : pointeur sur un segment qui contient les
  38. C proprietes du melange
  39. C
  40. C ICEN : MELEME contenant les centres des ELTs
  41. C
  42. C IRO : CHPOINT contenant la masse volumique.
  43. C
  44. C IROVIT : CHPOINT contenant les dèbits
  45. C ( NDIM composantes);
  46. C
  47. C IROET : CHPOINT contenat l'énergie totale per
  48. C unité de volume (RHO Et);
  49. C
  50. C IROY : CHPOINT contenant la masse de
  51. C differentes especes;
  52. C
  53. C IROSCA : CHPOINT contenant les scalaires passifs splittes
  54. C fois la masse;
  55. C
  56. C LOGTEM : si .TRUE., la temperature de premier tentative
  57. C pour Newton-Rapson est donne;
  58. C
  59. C IT : pointeur sur ls CHPOINT de la temperature de
  60. C premier tentative;
  61. C
  62. C SORTIES :
  63. C
  64. C IVIT : CHPOINT contenant la vitesse
  65. C
  66. C IPRES : CHPOINT contenant la pression du gaz;
  67. C
  68. C ITEMP : CHPOINT contenant la temperature du
  69. C gaz;
  70. C
  71. C IY : CHPOINT contenant les fractions
  72. C massiques du gaz;
  73. C
  74. C ISCA : CHPOINT contenant les scalaires passifs splittes;
  75. C
  76. C IGAM : CHPOINT contenant les "gamma" du gaz;
  77. C
  78. C LOGAN : anomalie detectée
  79. C
  80. C LOGNEG : (LOGICAL): si .TRUE. une densité ou un temperature
  81. C negative a été detectée -> le programme s'arrete
  82. C et on peut visualiser le champe de densite ou de
  83. C temperature (sa valeur stockée en MESERR(1) et
  84. C VALER(1))
  85. C
  86. C LOGBOR : (LOGICAL)
  87. C si .TRUE. la fraction massique a ete
  88. C detecté dehor YMIN et YMAX
  89. C (sa valeur stockée en MESERR(2) et VALER(2)
  90. C ,VAL1,VAL2)
  91. C ou
  92. C gamma a été detecté dehor GAMMIN et GAMMAX
  93. C (sa valeur stockée en MESERR(2) et
  94. C VALER(2),VAL1,VAL2)
  95. C
  96. C LOGIPG : si .TRUE., cv(T) < 0
  97. C
  98. C LOGNC : si .TRUE., Newton Rapson pour le calcul de T
  99. C n'a pas converge
  100. C
  101. C MESERR(2),
  102. C VALER(2),
  103. C VAL1,
  104. C VAL2 : pour message d'erreur
  105. C
  106. C
  107. C************************************************************************
  108. C
  109. C HISTORIQUE (Anomalies et modifications éventuelles)
  110. C
  111. C HISTORIQUE : Créée le 16.12.98.
  112. C
  113. C************************************************************************
  114. C
  115. C**** Les variables
  116. C
  117. IMPLICIT INTEGER(I-N)
  118. INTEGER NESP,NORDP1,NSCA
  119. & ,ICEN,IRO,IROVIT,IROET,IROY,IROSCA
  120. & ,IVIT,IPRES,IY,ISCA,IGAM,IGEOMC
  121. & ,N1,NLCE,I1,ITEMP,IT,I2
  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,ETHER,CELL
  128. & ,RTOT,CVTOT,T0
  129. & ,GAMMA,GAMMIN,GAMMAX
  130. & ,T
  131. CHARACTER*(8) TYPE
  132. CHARACTER*(40) MESERR(2)
  133. LOGICAL LOGNEG, LOGBOR, LOGAN, LOGNC, LOGIPG, LOGTEM
  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.  
  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, MPOTET.MPOVAL, MPOROS.MPOVAL,
  153. & MPOSCA.MPOVAL, MSOUPS.MSOUPO
  154. -INC SMELEME
  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**** Segment du propriete du gaz
  164. C
  165. SEGMENT PROPHY
  166. REAL*8 ACV(NORD+1,NESP), R(NESP), HOK(NESP)
  167. ENDSEGMENT
  168. C
  169. C**** Initialisation des variables pour la gestion des erreurs pas ici,
  170. C mais avant
  171. C
  172. SEGMENT SUMCV
  173. REAL*8 ACVTOT(NORDP1)
  174. ENDSEGMENT
  175. SEGINI SUMCV
  176. C
  177. C**** Activation du MELEME "CENTRE"
  178. C
  179. IPT1 = ICEN
  180. SEGACT IPT1
  181. N1 = IPT1.NUM(/2)
  182. SEGDES IPT1
  183. C
  184. C*** IVIT ressemble CHPOINT IROVIT (DEBIT).
  185. C
  186. MCHPO1 = IROVIT
  187. SEGACT MCHPO1
  188. MSOUP1 = MCHPO1.IPCHP(1)
  189. SEGDES MCHPO1
  190. SEGACT MSOUP1
  191. MPOROV = MSOUP1.IPOVAL
  192. SEGDES MSOUP1
  193. SEGACT MPOROV
  194. C
  195. C**** IVIT
  196. C
  197. SEGINI, MPOVIT = MPOROV
  198. SEGINI, MSOUP2 = MSOUP1
  199. MSOUP2.IPOVAL = MPOVIT
  200. SEGINI, MCHPO2 = MCHPO1
  201. MCHPO2.IPCHP(1)= MSOUP2
  202. SEGDES MSOUP2
  203. SEGDES MCHPO2
  204. IVIT = MCHPO2
  205. C
  206. C**** Creation des CHPOINTs IPRES et IGAM
  207. C
  208. C Ce CHPOINT ressemble à IRO
  209. C Donc on lit IRO
  210. C
  211. MCHPO1 = IRO
  212. SEGACT MCHPO1
  213. MSOUP1 = MCHPO1.IPCHP(1)
  214. SEGDES MCHPO1
  215. SEGACT MSOUP1
  216. MPORO = MSOUP1.IPOVAL
  217. SEGDES MSOUP1
  218. SEGACT MPORO
  219. C
  220. C*** IPRES
  221. C
  222. SEGINI, MPOPRE = MPORO
  223. SEGINI, MSOUP2 = MSOUP1
  224. MSOUP2.IPOVAL = MPOPRE
  225. SEGINI, MCHPO2 = MCHPO1
  226. MCHPO2.IPCHP(1)= MSOUP2
  227. SEGDES MSOUP2
  228. SEGDES MCHPO2
  229. IPRES = MCHPO2
  230. C
  231. C*** ITEMP
  232. C
  233. SEGINI, MPOTEM = MPORO
  234. SEGINI, MSOUP2 = MSOUP1
  235. MSOUP2.IPOVAL = MPOTEM
  236. SEGINI, MCHPO2 = MCHPO1
  237. MCHPO2.IPCHP(1)= MSOUP2
  238. SEGDES MSOUP2
  239. SEGDES MCHPO2
  240. ITEMP = MCHPO2
  241. C
  242. C*** IGAM
  243. C
  244. SEGINI, MPOGAM = MPORO
  245. SEGINI, MSOUP2 = MSOUP1
  246. MSOUP2.IPOVAL = MPOGAM
  247. SEGINI, MCHPO2 = MCHPO1
  248. MCHPO2.IPCHP(1)= MSOUP2
  249. SEGDES MSOUP2
  250. SEGDES MCHPO2
  251. IGAM = MCHPO2
  252. IF(IROY .GT. 0)THEN
  253. C
  254. C*** IY
  255. C
  256. C Ce CHPOINT ressemble à IROY
  257. C Donc on lit IROY
  258. C
  259. MCHPO1 = IROY
  260. SEGACT MCHPO1
  261. MSOUPY = MCHPO1.IPCHP(1)
  262. SEGDES MCHPO1
  263. SEGACT MSOUPY
  264. MPOROY = MSOUPY.IPOVAL
  265. SEGACT MPOROY
  266. C
  267. SEGINI, MPOY = MPOROY
  268. SEGINI, MSOUP2 = MSOUPY
  269. MSOUP2.IPOVAL = MPOY
  270. SEGINI, MCHPO2 = MCHPO1
  271. MCHPO2.IPCHP(1)= MSOUP2
  272. SEGDES MSOUP2
  273. SEGDES MCHPO2
  274. SEGDES MSOUPY
  275. IY = MCHPO2
  276. ELSE
  277. IY=0
  278. ENDIF
  279. C
  280. C*** ISCA
  281. C
  282. C Ce CHPOINT ressemble à IROSCA
  283. C Donc on lit IROSCA
  284. C
  285. IF(IROSCA .GT. 0)THEN
  286. MCHPO1 = IROSCA
  287. SEGACT MCHPO1
  288. MSOUPS = MCHPO1.IPCHP(1)
  289. SEGDES MCHPO1
  290. SEGACT MSOUPS
  291. MPOROS = MSOUPS.IPOVAL
  292. SEGACT MPOROS
  293. C
  294. SEGINI, MPOSCA = MPOROS
  295. SEGINI, MSOUP2 = MSOUPS
  296. MSOUP2.IPOVAL = MPOSCA
  297. SEGINI, MCHPO2 = MCHPO1
  298. MCHPO2.IPCHP(1)= MSOUP2
  299. SEGDES MSOUP2
  300. SEGDES MCHPO2
  301. SEGDES MSOUPS
  302. ISCA = MCHPO2
  303. ELSE
  304. ISCA = 0
  305. ENDIF
  306. C
  307. C**** Lecture des MPOVALs des autres MCHPOIs
  308. C
  309. CALL LICHT(IROET,MPOROE,TYPE,IGEOMC)
  310. C
  311. C**** LICHT active les MPOVALs en *MOD
  312. C
  313. C i.e.
  314. C
  315. C SEGACT MPOROE*MOD
  316. C
  317. C
  318. C**** Temperature de premier tentative
  319. C
  320. IF(LOGTEM)THEN
  321. CALL LICHT(IT,MPOTET,TYPE,IGEOMC)
  322. ELSE
  323. SEGINI, MPOTET = MPOROE
  324. DO I1=1,N1
  325. MPOTET.VPOCHA(I1,1) = 600
  326. ENDDO
  327. ENDIF
  328. C
  329. C**** RICAPITOLATIF
  330. C
  331. C On a activé que les CHPOINTs suivants
  332. C
  333. C MPORO < -- > RO
  334. C MPOROV < -- > DEBITS
  335. C MPOROE < -- > ROET
  336. C MPOROY < -- > ROY (si NESP >1)
  337. C MPOROS < -- > ROS (si NSCA >1)
  338. C MPOVIT < -- > IVIT
  339. C MPOPRE < -- > IPRES
  340. C MPOTEM < -- > ITEM
  341. C MPOY < -- > IY (si NESP > 1)
  342. C MPOSCA < -- > ISCA (si NSCA > 1)
  343. C MPOGAM < -- > IGAM
  344. C MPOTET < -- > Temperature de premier tentative
  345. C
  346. C C
  347. C
  348. C**** BOUCLE SUR LES CENTRES pour le calcul des MPOVAL
  349. C
  350. DO NLCE = 1, N1
  351. C
  352. C******* Les differents variables a chaque centre
  353. C
  354. RO = MPORO.VPOCHA(NLCE,1)
  355. IF(RO .LE. 0.0D0)THEN
  356. VALER(1) = RO
  357. MESERR(1) = 'RO '
  358. LOGNEG = .TRUE.
  359. C
  360. C********** RO < 0: le programme s'arrete mais apres le calcul des
  361. C CHPOINTs
  362. C
  363. ENDIF
  364. UX = MPOROV.VPOCHA(NLCE,1)/RO
  365. UY = MPOROV.VPOCHA(NLCE,2)/RO
  366. C
  367. C******* VITESSE -> MPOVIT
  368. C
  369. MPOVIT.VPOCHA(NLCE,1) = UX
  370. MPOVIT.VPOCHA(NLCE,2) = UY
  371. CELL = UX * UX + UY * UY
  372. IF(IDIM .EQ. 3)THEN
  373. UZ = MPOROV.VPOCHA(NLCE,3)/RO
  374. MPOVIT.VPOCHA(NLCE,3) = UZ
  375. CELL = CELL + UZ * UZ
  376. ENDIF
  377. CELL = 0.5D0 * RO * CELL
  378. C
  379. C******* RETOT, ETHER
  380. C
  381. RETOT = MPOROE.VPOCHA(NLCE,1)
  382. ETHER = RETOT - CELL
  383. ETHER = ETHER / RO
  384. C
  385. C******* Y
  386. C
  387. C On a utilisé le ponteur par defaut,
  388. C i.e. Y(I1) = FRAMAS.Y(I1)
  389. C
  390. C
  391. Y(NESP) = 1.0D0
  392. C
  393. C******* SUMCV.ACVTOT a ZERO
  394. C
  395. DO I1 = 1, NORDP1
  396. SUMCV.ACVTOT(I1) = 0.0D0
  397. ENDDO
  398. C
  399. C******* N.B.: NESP => 1
  400. C
  401. RTOT = 0.0D0
  402. IF(NESP .GT. 1)THEN
  403. DO I1 = 1, NESP-1
  404. Y(I1) = MPOROY.VPOCHA(NLCE,I1)/RO
  405. MPOY.VPOCHA(NLCE,I1)=Y(I1)
  406. Y(NESP) = Y(NESP) - Y(I1)
  407. IF((Y(I1) .LT. YMIN) .OR. (Y(I1) .GT. YMAX))THEN
  408. MESERR(2) = 'Y '
  409. VALER(2) = Y(I1)
  410. LOGBOR = .TRUE.
  411. VAL1 = YMIN
  412. VAL2 = YMAX
  413. C
  414. C************* Y !\in (YMIN,YMAX) : le programme s'arrete
  415. C mais apres le calcul des CHPOINTs
  416. C
  417. ENDIF
  418. DO I2 = 1, NORDP1
  419. SUMCV.ACVTOT(I2) = SUMCV.ACVTOT(I2) +
  420. & (Y(I1) * PROPHY.ACV(I2,I1))
  421. ENDDO
  422. RTOT = RTOT + Y(I1) * PROPHY.R(I1)
  423. ENDDO
  424. IF((Y(NESP) .LT. YMIN) .OR. (Y(NESP) .GT. YMAX))THEN
  425. MESERR(2) = 'Y '
  426. VALER(2) = Y(NESP)
  427. LOGBOR = .TRUE.
  428. VAL1 = YMIN
  429. VAL2 = YMAX
  430. C
  431. C********** Y !\in (YMIN,YMAX) : le programme s'arrete
  432. C mais apres le calcul des CHPOINTs
  433. C
  434. ENDIF
  435. ENDIF
  436. DO I2 = 1, NORDP1
  437. SUMCV.ACVTOT(I2) = SUMCV.ACVTOT(I2)
  438. & + (Y(NESP) * PROPHY.ACV(I2,NESP))
  439. ENDDO
  440. RTOT = RTOT + Y(NESP) * PROPHY.R(NESP)
  441. IF(RTOT .LE. 0.0D0)THEN
  442. LOGIPG = .TRUE.
  443. ENDIF
  444. C
  445. C******* Calcul de la temperature et de la pression
  446. C
  447. T0 = MPOTET.VPOCHA(NLCE,1)
  448. CALL PRITEM(NORDP1,SUMCV.ACVTOT,ETHER,T0,T,LOGNC,LOGIPG)
  449. MPOTEM.VPOCHA(NLCE,1) = T
  450. MPOPRE.VPOCHA(NLCE,1) = RTOT * T * RO
  451. IF(T .LE. 0.0D0)THEN
  452. VALER(1) = T
  453. MESERR(1) = 'T '
  454. LOGNEG = .TRUE.
  455. C
  456. C********** T < 0: le programme s'arrete mais apres le calcul des
  457. C CHPOINTs
  458. C
  459. ENDIF
  460.  
  461. C
  462. C******* Calcul du GAMMA
  463. C
  464. C Le CV
  465. C
  466. CVTOT = SUMCV.ACVTOT(1)
  467. T0 = 1.0D0
  468. DO I1 = 2, NORDP1
  469. T0 = T0 * T
  470. CELL = SUMCV.ACVTOT(I1) * T0
  471. CVTOT = CVTOT + CELL
  472. ENDDO
  473. GAMMA = (CVTOT + RTOT) / CVTOT
  474. IF((GAMMA .LT. GAMMIN) .OR. (GAMMA .GT. GAMMAX))THEN
  475. MESERR(2) = 'GAMMA '
  476. VALER(2) = GAMMA
  477. VAL1 = GAMMIN
  478. VAL2 = GAMMAX
  479. LOGBOR = .TRUE.
  480. C
  481. C********** GAMMA !\in (GAMMIN,GAMMAX) : le programme s'arrete
  482. C mais apres le calcul des CHPOINTs
  483. C
  484. ENDIF
  485. MPOGAM.VPOCHA(NLCE,1) = GAMMA
  486. C
  487. C******* Calcul du vecteur de scalaire
  488. C
  489. DO I1 = 1, NSCA, 1
  490. MPOSCA.VPOCHA(NLCE,I1) = MPOROS.VPOCHA(NLCE,I1) / RO
  491. ENDDO
  492. C
  493. C**** Fin boucle sur les points
  494. C
  495. ENDDO
  496. C
  497. 9999 CONTINUE
  498. C
  499. SEGDES MPORO
  500. SEGDES MPOROV
  501. SEGDES MPOROE
  502. IF(NESP .GT. 1)THEN
  503. SEGDES MPOROY
  504. SEGDES MPOY
  505. ENDIF
  506. IF(NSCA .GE. 1)THEN
  507. SEGDES MPOROS
  508. SEGDES MPOSCA
  509. ENDIF
  510. SEGDES MPOVIT
  511. SEGDES MPOPRE
  512. SEGDES MPOGAM
  513. SEGDES MPOTEM
  514. IF(LOGTEM)THEN
  515. SEGDES MPOTET
  516. ELSE
  517. SEGSUP MPOTET
  518. ENDIF
  519. SEGSUP FRAMAS
  520. SEGSUP SUMCV
  521. C
  522. RETURN
  523. END
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.  

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