Télécharger primi2.eso

Retour à la liste

Numérotation des lignes :

  1. C PRIMI2 SOURCE CHAT 05/01/13 02:27:10 5004
  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
  116. C**** Variables de COOPTIO
  117. C
  118. C INTEGER IPLLB, IERPER, IERMAX, IERR, INTERR
  119. C & ,IOTER, IOLEC, IOIMP, IOCAR, IOACQ
  120. C & ,IOPER, IOSGB, IOGRA, IOSAU, IORES
  121. C & ,IECHO, IIMPI, IOSPI
  122. C & ,IDIM
  123. C & ,MCOORD
  124. C & ,IFOMOD, NIFOUR, IFOUR, NSDPGE, IONIVE
  125. C & ,NGMAXY, IZROSF, ISOTYP, IOSCR,LTEXLU
  126. C & ,NORINC,NORVAL,NORIND,NORVAD
  127. C & ,NUCROU, IPSAUV
  128. C
  129. C**** Les variables
  130. C
  131. IMPLICIT INTEGER(I-N)
  132. INTEGER NESP,NORDP1,NSCA
  133. & ,ICEN,IRO,IROVIT,IROET,IROY,IROSCA
  134. & ,IVIT,IPRES,IY,ISCA,IGAM,IGEOMC
  135. & ,N1,NLCE,I1,ITEMP,IT,I2
  136. C
  137. C**** NESP = Nombre d'especes dans le gaz.
  138. C
  139. REAL*8 EPSI,VALER(2),VAL1,VAL2
  140. & ,YMIN,YMAX
  141. & ,RO,UX,UY,UZ,RETOT,ETHER,CELL
  142. & ,RTOT,CVTOT,T0
  143. & ,GAMMA,GAMMIN,GAMMAX
  144. & ,T
  145. CHARACTER*(8) TYPE
  146. CHARACTER*(40) MESERR(2)
  147. LOGICAL LOGNEG, LOGBOR, LOGAN, LOGNC, LOGIPG, LOGTEM
  148. C
  149. C**** Valeur minimum di Y et T(°C)
  150. C
  151. C N.B.: il doit etre le meme dans gamma.eso.
  152. C
  153. PARAMETER(EPSI=1.0D-4,
  154. & YMIN=-EPSI,YMAX=1.0D0+EPSI,
  155. & GAMMIN=1.0D0,GAMMAX=3.0D0)
  156. C
  157. C**** Les includes
  158. C
  159.  
  160. -INC PPARAM
  161. -INC CCOPTIO
  162. -INC SMCHPOI
  163. POINTEUR MPORO.MPOVAL, MPOROV.MPOVAL, MPOROE.MPOVAL,
  164. & MPOROY.MPOVAL, MPOVIT.MPOVAL, MPOTEM.MPOVAL,
  165. & MPOPRE.MPOVAL, MPOY.MPOVAL, MPOGAM.MPOVAL,
  166. & MSOUPY.MSOUPO, MPOTET.MPOVAL, MPOROS.MPOVAL,
  167. & MPOSCA.MPOVAL, MSOUPS.MSOUPO
  168. -INC SMELEME
  169. C
  170. C**** Y(NESP)
  171. C
  172. SEGMENT FRAMAS
  173. REAL*8 Y(NESP)
  174. ENDSEGMENT
  175. SEGINI FRAMAS
  176. C
  177. C**** Segment du propriete du gaz
  178. C
  179. SEGMENT PROPHY
  180. REAL*8 ACV(NORD+1,NESP), R(NESP), HOK(NESP)
  181. ENDSEGMENT
  182. C
  183. C**** Initialisation des variables pour la gestion des erreurs pas ici,
  184. C mais avant
  185. C
  186. SEGMENT SUMCV
  187. REAL*8 ACVTOT(NORDP1)
  188. ENDSEGMENT
  189. SEGINI SUMCV
  190. C
  191. C**** Activation du MELEME "CENTRE"
  192. C
  193. IPT1 = ICEN
  194. SEGACT IPT1
  195. N1 = IPT1.NUM(/2)
  196. SEGDES IPT1
  197. C
  198. C*** IVIT ressemble CHPOINT IROVIT (DEBIT).
  199. C
  200. MCHPO1 = IROVIT
  201. SEGACT MCHPO1
  202. MSOUP1 = MCHPO1.IPCHP(1)
  203. SEGDES MCHPO1
  204. SEGACT MSOUP1
  205. MPOROV = MSOUP1.IPOVAL
  206. SEGDES MSOUP1
  207. SEGACT MPOROV
  208. C
  209. C**** IVIT
  210. C
  211. SEGINI, MPOVIT = MPOROV
  212. SEGINI, MSOUP2 = MSOUP1
  213. MSOUP2.IPOVAL = MPOVIT
  214. SEGINI, MCHPO2 = MCHPO1
  215. MCHPO2.IPCHP(1)= MSOUP2
  216. SEGDES MSOUP2
  217. SEGDES MCHPO2
  218. IVIT = MCHPO2
  219. C
  220. C**** Creation des CHPOINTs IPRES et IGAM
  221. C
  222. C Ce CHPOINT ressemble à IRO
  223. C Donc on lit IRO
  224. C
  225. MCHPO1 = IRO
  226. SEGACT MCHPO1
  227. MSOUP1 = MCHPO1.IPCHP(1)
  228. SEGDES MCHPO1
  229. SEGACT MSOUP1
  230. MPORO = MSOUP1.IPOVAL
  231. SEGDES MSOUP1
  232. SEGACT MPORO
  233. C
  234. C*** IPRES
  235. C
  236. SEGINI, MPOPRE = MPORO
  237. SEGINI, MSOUP2 = MSOUP1
  238. MSOUP2.IPOVAL = MPOPRE
  239. SEGINI, MCHPO2 = MCHPO1
  240. MCHPO2.IPCHP(1)= MSOUP2
  241. SEGDES MSOUP2
  242. SEGDES MCHPO2
  243. IPRES = MCHPO2
  244. C
  245. C*** ITEMP
  246. C
  247. SEGINI, MPOTEM = MPORO
  248. SEGINI, MSOUP2 = MSOUP1
  249. MSOUP2.IPOVAL = MPOTEM
  250. SEGINI, MCHPO2 = MCHPO1
  251. MCHPO2.IPCHP(1)= MSOUP2
  252. SEGDES MSOUP2
  253. SEGDES MCHPO2
  254. ITEMP = MCHPO2
  255. C
  256. C*** IGAM
  257. C
  258. SEGINI, MPOGAM = MPORO
  259. SEGINI, MSOUP2 = MSOUP1
  260. MSOUP2.IPOVAL = MPOGAM
  261. SEGINI, MCHPO2 = MCHPO1
  262. MCHPO2.IPCHP(1)= MSOUP2
  263. SEGDES MSOUP2
  264. SEGDES MCHPO2
  265. IGAM = MCHPO2
  266. IF(IROY .GT. 0)THEN
  267. C
  268. C*** IY
  269. C
  270. C Ce CHPOINT ressemble à IROY
  271. C Donc on lit IROY
  272. C
  273. MCHPO1 = IROY
  274. SEGACT MCHPO1
  275. MSOUPY = MCHPO1.IPCHP(1)
  276. SEGDES MCHPO1
  277. SEGACT MSOUPY
  278. MPOROY = MSOUPY.IPOVAL
  279. SEGACT MPOROY
  280. C
  281. SEGINI, MPOY = MPOROY
  282. SEGINI, MSOUP2 = MSOUPY
  283. MSOUP2.IPOVAL = MPOY
  284. SEGINI, MCHPO2 = MCHPO1
  285. MCHPO2.IPCHP(1)= MSOUP2
  286. SEGDES MSOUP2
  287. SEGDES MCHPO2
  288. SEGDES MSOUPY
  289. IY = MCHPO2
  290. ELSE
  291. IY=0
  292. ENDIF
  293. C
  294. C*** ISCA
  295. C
  296. C Ce CHPOINT ressemble à IROSCA
  297. C Donc on lit IROSCA
  298. C
  299. IF(IROSCA .GT. 0)THEN
  300. MCHPO1 = IROSCA
  301. SEGACT MCHPO1
  302. MSOUPS = MCHPO1.IPCHP(1)
  303. SEGDES MCHPO1
  304. SEGACT MSOUPS
  305. MPOROS = MSOUPS.IPOVAL
  306. SEGACT MPOROS
  307. C
  308. SEGINI, MPOSCA = MPOROS
  309. SEGINI, MSOUP2 = MSOUPS
  310. MSOUP2.IPOVAL = MPOSCA
  311. SEGINI, MCHPO2 = MCHPO1
  312. MCHPO2.IPCHP(1)= MSOUP2
  313. SEGDES MSOUP2
  314. SEGDES MCHPO2
  315. SEGDES MSOUPS
  316. ISCA = MCHPO2
  317. ELSE
  318. ISCA = 0
  319. ENDIF
  320. C
  321. C**** Lecture des MPOVALs des autres MCHPOIs
  322. C
  323. CALL LICHT(IROET,MPOROE,TYPE,IGEOMC)
  324. C
  325. C**** LICHT active les MPOVALs en *MOD
  326. C
  327. C i.e.
  328. C
  329. C SEGACT MPOROE*MOD
  330. C
  331. C
  332. C**** Temperature de premier tentative
  333. C
  334. IF(LOGTEM)THEN
  335. CALL LICHT(IT,MPOTET,TYPE,IGEOMC)
  336. ELSE
  337. SEGINI, MPOTET = MPOROE
  338. DO I1=1,N1
  339. MPOTET.VPOCHA(I1,1) = 600
  340. ENDDO
  341. ENDIF
  342. C
  343. C**** RICAPITOLATIF
  344. C
  345. C On a activé que les CHPOINTs suivants
  346. C
  347. C MPORO < -- > RO
  348. C MPOROV < -- > DEBITS
  349. C MPOROE < -- > ROET
  350. C MPOROY < -- > ROY (si NESP >1)
  351. C MPOROS < -- > ROS (si NSCA >1)
  352. C MPOVIT < -- > IVIT
  353. C MPOPRE < -- > IPRES
  354. C MPOTEM < -- > ITEM
  355. C MPOY < -- > IY (si NESP > 1)
  356. C MPOSCA < -- > ISCA (si NSCA > 1)
  357. C MPOGAM < -- > IGAM
  358. C MPOTET < -- > Temperature de premier tentative
  359. C
  360. C C
  361. C
  362. C**** BOUCLE SUR LES CENTRES pour le calcul des MPOVAL
  363. C
  364. DO NLCE = 1, N1
  365. C
  366. C******* Les differents variables a chaque centre
  367. C
  368. RO = MPORO.VPOCHA(NLCE,1)
  369. IF(RO .LE. 0.0D0)THEN
  370. VALER(1) = RO
  371. MESERR(1) = 'RO '
  372. LOGNEG = .TRUE.
  373. C
  374. C********** RO < 0: le programme s'arrete mais apres le calcul des
  375. C CHPOINTs
  376. C
  377. ENDIF
  378. UX = MPOROV.VPOCHA(NLCE,1)/RO
  379. UY = MPOROV.VPOCHA(NLCE,2)/RO
  380. C
  381. C******* VITESSE -> MPOVIT
  382. C
  383. MPOVIT.VPOCHA(NLCE,1) = UX
  384. MPOVIT.VPOCHA(NLCE,2) = UY
  385. CELL = UX * UX + UY * UY
  386. IF(IDIM .EQ. 3)THEN
  387. UZ = MPOROV.VPOCHA(NLCE,3)/RO
  388. MPOVIT.VPOCHA(NLCE,3) = UZ
  389. CELL = CELL + UZ * UZ
  390. ENDIF
  391. CELL = 0.5D0 * RO * CELL
  392. C
  393. C******* RETOT, ETHER
  394. C
  395. RETOT = MPOROE.VPOCHA(NLCE,1)
  396. ETHER = RETOT - CELL
  397. ETHER = ETHER / RO
  398. C
  399. C******* Y
  400. C
  401. C On a utilisé le ponteur par defaut,
  402. C i.e. Y(I1) = FRAMAS.Y(I1)
  403. C
  404. C
  405. Y(NESP) = 1.0D0
  406. C
  407. C******* SUMCV.ACVTOT a ZERO
  408. C
  409. DO I1 = 1, NORDP1
  410. SUMCV.ACVTOT(I1) = 0.0D0
  411. ENDDO
  412. C
  413. C******* N.B.: NESP => 1
  414. C
  415. RTOT = 0.0D0
  416. IF(NESP .GT. 1)THEN
  417. DO I1 = 1, NESP-1
  418. Y(I1) = MPOROY.VPOCHA(NLCE,I1)/RO
  419. MPOY.VPOCHA(NLCE,I1)=Y(I1)
  420. Y(NESP) = Y(NESP) - Y(I1)
  421. IF((Y(I1) .LT. YMIN) .OR. (Y(I1) .GT. YMAX))THEN
  422. MESERR(2) = 'Y '
  423. VALER(2) = Y(I1)
  424. LOGBOR = .TRUE.
  425. VAL1 = YMIN
  426. VAL2 = YMAX
  427. C
  428. C************* Y !\in (YMIN,YMAX) : le programme s'arrete
  429. C mais apres le calcul des CHPOINTs
  430. C
  431. ENDIF
  432. DO I2 = 1, NORDP1
  433. SUMCV.ACVTOT(I2) = SUMCV.ACVTOT(I2) +
  434. & (Y(I1) * PROPHY.ACV(I2,I1))
  435. ENDDO
  436. RTOT = RTOT + Y(I1) * PROPHY.R(I1)
  437. ENDDO
  438. IF((Y(NESP) .LT. YMIN) .OR. (Y(NESP) .GT. YMAX))THEN
  439. MESERR(2) = 'Y '
  440. VALER(2) = Y(NESP)
  441. LOGBOR = .TRUE.
  442. VAL1 = YMIN
  443. VAL2 = YMAX
  444. C
  445. C********** Y !\in (YMIN,YMAX) : le programme s'arrete
  446. C mais apres le calcul des CHPOINTs
  447. C
  448. ENDIF
  449. ENDIF
  450. DO I2 = 1, NORDP1
  451. SUMCV.ACVTOT(I2) = SUMCV.ACVTOT(I2)
  452. & + (Y(NESP) * PROPHY.ACV(I2,NESP))
  453. ENDDO
  454. RTOT = RTOT + Y(NESP) * PROPHY.R(NESP)
  455. IF(RTOT .LE. 0.0D0)THEN
  456. LOGIPG = .TRUE.
  457. ENDIF
  458. C
  459. C******* Calcul de la temperature et de la pression
  460. C
  461. T0 = MPOTET.VPOCHA(NLCE,1)
  462. CALL PRITEM(NORDP1,SUMCV.ACVTOT,ETHER,T0,T,LOGNC,LOGIPG)
  463. MPOTEM.VPOCHA(NLCE,1) = T
  464. MPOPRE.VPOCHA(NLCE,1) = RTOT * T * RO
  465. IF(T .LE. 0.0D0)THEN
  466. VALER(1) = T
  467. MESERR(1) = 'T '
  468. LOGNEG = .TRUE.
  469. C
  470. C********** T < 0: le programme s'arrete mais apres le calcul des
  471. C CHPOINTs
  472. C
  473. ENDIF
  474.  
  475. C
  476. C******* Calcul du GAMMA
  477. C
  478. C Le CV
  479. C
  480. CVTOT = SUMCV.ACVTOT(1)
  481. T0 = 1.0D0
  482. DO I1 = 2, NORDP1
  483. T0 = T0 * T
  484. CELL = SUMCV.ACVTOT(I1) * T0
  485. CVTOT = CVTOT + CELL
  486. ENDDO
  487. GAMMA = (CVTOT + RTOT) / CVTOT
  488. IF((GAMMA .LT. GAMMIN) .OR. (GAMMA .GT. GAMMAX))THEN
  489. MESERR(2) = 'GAMMA '
  490. VALER(2) = GAMMA
  491. VAL1 = GAMMIN
  492. VAL2 = GAMMAX
  493. LOGBOR = .TRUE.
  494. C
  495. C********** GAMMA !\in (GAMMIN,GAMMAX) : le programme s'arrete
  496. C mais apres le calcul des CHPOINTs
  497. C
  498. ENDIF
  499. MPOGAM.VPOCHA(NLCE,1) = GAMMA
  500. C
  501. C******* Calcul du vecteur de scalaire
  502. C
  503. DO I1 = 1, NSCA, 1
  504. MPOSCA.VPOCHA(NLCE,I1) = MPOROS.VPOCHA(NLCE,I1) / RO
  505. ENDDO
  506. C
  507. C**** Fin boucle sur les points
  508. C
  509. ENDDO
  510. C
  511. 9999 CONTINUE
  512. C
  513. SEGDES MPORO
  514. SEGDES MPOROV
  515. SEGDES MPOROE
  516. IF(NESP .GT. 1)THEN
  517. SEGDES MPOROY
  518. SEGDES MPOY
  519. ENDIF
  520. IF(NSCA .GE. 1)THEN
  521. SEGDES MPOROS
  522. SEGDES MPOSCA
  523. ENDIF
  524. SEGDES MPOVIT
  525. SEGDES MPOPRE
  526. SEGDES MPOGAM
  527. SEGDES MPOTEM
  528. IF(LOGTEM)THEN
  529. SEGDES MPOTET
  530. ELSE
  531. SEGSUP MPOTET
  532. ENDIF
  533. SEGSUP FRAMAS
  534. SEGSUP SUMCV
  535. C
  536. RETURN
  537. END
  538.  
  539.  
  540.  
  541.  
  542.  
  543.  
  544.  

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