Télécharger pr12f.eso

Retour à la liste

Numérotation des lignes :

pr12f
  1. C PR12F SOURCE CB215821 25/04/23 21:15:33 12247
  2. SUBROUTINE PR12f(IM1, ICH1, ICH2, ICH3,
  3. & ICH4, ICH5, ICH6, ICH7,
  4. & ICH8, ICH9,
  5. & Cp, Cvm,
  6. & OCH1, OCH2, OCH3,
  7. & OCH4, OCH5, OCH6,
  8. & OCH7, OCH8, OCH9,
  9. & LOGNEG, LOGBOR, MESERR,
  10. & VALER, VAL1, VAL2)
  11. C************************************************************************
  12. C
  13. C PROJET : CASTEM 2000
  14. C
  15. C NOM : PR12f
  16. C
  17. C DESCRIPTION : Primitive variables from conserved variables
  18. C
  19. C LANGAGE : FORTRAN 77 + ESOPE 2000 (avec extensions CISI)
  20. C
  21. C AUTEUR : Jose R. Garcia-Cascales,
  22. C Universidad Politecnica de Cartagena,
  23. C jr.garcia@upct.es
  24. C
  25. C************************************************************************
  26. C
  27. C APPELES (E/S) :
  28. C
  29. C************************************************************************
  30. C
  31. C ENTREES :
  32. C
  33. C IM1 : MELEME contenant les centres des ELTs
  34. C
  35. C ICH1 : CHPOINT contenant la masse volumique (mass, gas/vapour)
  36. C
  37. C ICH2 : CHPOINT contenant la masse volumique (mass, liquid)
  38. C
  39. C ICH3 : CHPOINT contenant les dèbits (momentum, gas/vapour)
  40. C ( NDIM composantes);
  41. C
  42. C ICH4 : CHPOINT contenant les dèbits (momentum, liquid)
  43. C ( NDIM composantes);
  44. C
  45. C ICH5 : CHPOINT contenat l'énergie totale per
  46. C unité de volume (alpha rho et) (gas/vapour);
  47. C
  48. C ICH6 : CHPOINT contenat l'énergie totale per
  49. C unité de volume (alpha rho et) (liquid);
  50. C
  51. C ICH7 : CHPOINT containing void fraction of the previous
  52. C time step, in order to avoid problems when a
  53. C phase disappears
  54. C
  55. C ICH8 : CHPOINT containing vapour temperature of the previous
  56. C time step, in order to avoid problems when a
  57. C phase disappears
  58. C
  59. C ICH9 : CHPOINT containing liquid temperature of the previous
  60. C time step, in order to avoid problems when the liquid
  61. C phase disappears
  62. C
  63. C Cp : Parameter characterizing the pressure
  64. C correction term
  65. C
  66. C Cvm : Parameter characterizing virtual mass correction,
  67. C it is included in the new CATHARE pressure
  68. C conrrection term
  69. C
  70. C SORTIES : OCH1 : CHPOINT void fraction (alpha);
  71. C
  72. C OCH2 : CHPOINT gas/vapour velocity (uvx, uvy, uvz);
  73. C
  74. C OCH3 : CHPOINT liquid velocity (ulx, uly, ulz);
  75. C
  76. C OCH4 : CHPOINT pressure;
  77. C
  78. C OCH5 : CHPOINT vapour temperature (Tv);
  79. C
  80. C OCH6 : CHPOINT liquid temperature (Tl);
  81. C
  82. C OCH7 : CHPOINT vapour density (rv);
  83. C
  84. C OCH8 : CHPOINT liquid density (rl);
  85. C
  86. C OCH9 : CHPOINT interfacial pressure correction term (pi)
  87. C
  88. C LOGNEG : (LOGICAL): si .TRUE. une pression ou une densité
  89. C negative a été detectée -> le programme s'arrete
  90. C (sa valeur stockée en MESERR(1) et VALER(1))
  91. C
  92. C LOGBOR : (LOGICAL)
  93. C gamma a été detecté dehor GAMMIN et GAMMAX
  94. C (sa valeur stockée en MESERR(2) et VALER(2),VAL1,VAL2)
  95. C
  96. C MESERR,
  97. C VALER,
  98. C VAL1,
  99. C VAL2 : pour message d'erreur
  100. C
  101. C
  102. C
  103. C************************************************************************
  104. C
  105. C HISTORIQUE (Anomalies et modifications éventuelles)
  106. C
  107. C HISTORIQUE : Créée le 20.11.05.
  108. C
  109. C************************************************************************
  110. C
  111. IMPLICIT INTEGER(I-N)
  112. IMPLICIT REAL*8(A-H,O-Z)
  113.  
  114.  
  115. C**** Les variables
  116. C
  117. INTEGER NLCE,N1,IGEOMC
  118. C
  119. INTEGER IM1
  120. & ,ICH1, ICH2, ICH3
  121. & ,ICH4, ICH5, ICH6
  122. & ,ICH7, ICH8, ICH9
  123. & ,OCH1,OCH2,OCH3
  124. & ,OCH4,OCH5,OCH6
  125. & ,OCH7,OCH8,OCH9
  126. C
  127. REAL*8 VALER(2),VAL1,VAL2
  128. & ,alpha, uvx, uvy, uvz, uv2, ulx, uly, ulz, ul2
  129. & ,p, Tv, Tl, rv, rl, ev, el
  130. & ,oldav, oldTv
  131. & ,A, B, delta
  132. & ,gamv, cpv, gaml, cpl, pil
  133. & ,FFV, FFL
  134. & ,rm, rvm, rlm, Cp, cvm, pi
  135. PARAMETER(gamv = 1.4D0, cpv = 1008.D0,
  136. & gaml = 2.8D0, cpl = 4186.D0, pil = 8.5D8)
  137. C
  138. CHARACTER*(8) TYPE
  139. CHARACTER*(40) MESERR(2)
  140. LOGICAL LOGNEG, LOGBOR
  141. C
  142. INTEGER NAT, NSOUPO, N, NC
  143. C
  144. C**** Les includes
  145. C
  146.  
  147. -INC PPARAM
  148. -INC CCOPTIO
  149. -INC SMCHPOI
  150. -INC SMCOORD
  151. POINTEUR MCHPO5.MCHPOI, MCHPO6.MCHPOI,
  152. & MCHPO7.MCHPOI, MCHPO8.MCHPOI, MCHPO9.MCHPOI
  153. C
  154. POINTEUR MSOUP6.MSOUPO, MSOUP7.MSOUPO, MSOUP8.MSOUPO,
  155. & MSOUP9.MSOUPO
  156. C
  157. POINTEUR MPOW1.MPOVAL, MPOW2.MPOVAL, MPOW3.MPOVAL,
  158. & MPOW4.MPOVAL, MPOW5.MPOVAL, MPOW6.MPOVAL,
  159. & MPOW7.MPOVAL, MPOW8.MPOVAL, MPOW9.MPOVAL
  160. C
  161. POINTEUR MPOV1.MPOVAL, MPOV2.MPOVAL, MPOV3.MPOVAL,
  162. & MPOV4.MPOVAL, MPOV5.MPOVAL, MPOV6.MPOVAL,
  163. & MPOV7.MPOVAL, MPOV8.MPOVAL, MPOV9.MPOVAL
  164. -INC SMELEME
  165. C
  166. C
  167. C**** Initialisation des variables pour la gestion des erreurs pas ici,
  168. C mais avant, i.e.
  169. C
  170. LOGNEG = .FALSE.
  171. LOGBOR = .FALSE.
  172. MESERR(1) = ' '
  173. MESERR(2) = ' '
  174. VALER(1) = 0.0D0
  175. VALER(2) = 0.0D0
  176. VAL1 = 0.0D0
  177. VAL2 = 0.0D0
  178.  
  179. C
  180. C**** Activation du MELEME "CENTRE"
  181. C
  182. IPT1 = IM1
  183. SEGACT IPT1
  184. N1 = IPT1.NUM(/2)
  185. SEGDES IPT1
  186. C
  187. C**** Reading MPOVA of each MCHAMPOIN
  188. C MPOW1 = alpha*rv
  189. C MPOW2 = (1 - alpha)*rl
  190. C MPOW3 = alpha*rv*uvx & alpha*rv*uvy & alpha*rv*uvz
  191. C MPOW4 = (1 - alpha)*rl*ulx & (1 - alpha)*rl*uly & (1 - alpha)*rl*ulz
  192. C MPOW5 = alpha*rv*Ev
  193. C MPOW6 = (1 - alpha)*rl*El
  194. C
  195. C MPOW7: It is the old void fraction, we will use it when
  196. C alpha approaches to zero
  197. C MPOW8: It is the old vapour temperature, we will use it when
  198. C alpha approaches to zero
  199. C MPOW9: It is the old liquid temperature, we will use it when
  200. C alpha approaches to one
  201. C
  202. CALL LICHT(ICH1,MPOW1,TYPE,IGEOMC)
  203. CALL LICHT(ICH2,MPOW2,TYPE,IGEOMC)
  204. CALL LICHT(ICH3,MPOW3,TYPE,IGEOMC)
  205. CALL LICHT(ICH4,MPOW4,TYPE,IGEOMC)
  206. CALL LICHT(ICH5,MPOW5,TYPE,IGEOMC)
  207. CALL LICHT(ICH6,MPOW6,TYPE,IGEOMC)
  208. CALL LICHT(ICH7,MPOW7,TYPE,IGEOMC)
  209. CALL LICHT(ICH8,MPOW8,TYPE,IGEOMC)
  210. CALL LICHT(ICH9,MPOW9,TYPE,IGEOMC)
  211. C
  212. C SEGACT MPOW1
  213. C SEGACT MPOW2
  214. C SEGACT MPOW3
  215. C SEGACT MPOW4
  216. C SEGACT MPOW5
  217. C SEGACT MPOW6
  218. C SEGACT MPOW7
  219. C SEGACT MPOW8
  220. C SEGACT MPOW9
  221. CC
  222. C**** LICHT active les MPOVALs en *MO
  223. C
  224. C
  225. C**** Privitive variables
  226. C
  227. C void fraction: alpha
  228.  
  229. NAT = 1
  230. NSOUPO=1
  231. N = N1
  232. NC = 1
  233. SEGINI MCHPO1
  234. MCHPO1.JATTRI(1)=2
  235. MCHPO1.IFOPOI=IFOUR
  236. SEGINI MSOUP1
  237. MCHPO1.IPCHP(1)=MSOUP1
  238. SEGINI MPOV1
  239. MSOUP1.NOCOMP(1)='SCAL'
  240. MSOUP1.IGEOC = IM1
  241. MSOUP1.IPOVAL = MPOV1
  242.  
  243. C vapour velocities: uvx, uvy, uvz
  244.  
  245.  
  246. NC = IDIM
  247. SEGINI MCHPO2
  248. MCHPO2.JATTRI(1)=2
  249. MCHPO2.IFOPOI=IFOUR
  250. SEGINI MSOUP2
  251. MCHPO2.IPCHP(1)=MSOUP2
  252. SEGINI MPOV2
  253. MSOUP2.NOCOMP(1)='UVX'
  254. MSOUP2.NOCOMP(2)='UVY'
  255. IF(IDIM .EQ. 3)THEN
  256. MSOUP2.NOCOMP(3)='UVZ'
  257. ENDIF
  258. MSOUP2.IGEOC = IM1
  259. MSOUP2.IPOVAL = MPOV2
  260.  
  261. C liquid velocities: ulx, uly, ulz
  262.  
  263.  
  264. NC = IDIM
  265. SEGINI MCHPO3
  266. MCHPO3.JATTRI(1)=2
  267. MCHPO3.IFOPOI=IFOUR
  268. SEGINI MSOUP3
  269. MCHPO3.IPCHP(1)=MSOUP3
  270. SEGINI MPOV3
  271. MSOUP3.NOCOMP(1)='ULX'
  272. MSOUP3.NOCOMP(2)='ULY'
  273. IF(IDIM .EQ. 3)THEN
  274. MSOUP3.NOCOMP(3)='ULZ'
  275. ENDIF
  276. MSOUP3.IGEOC = IM1
  277. MSOUP3.IPOVAL = MPOV3
  278.  
  279. C pressure: p
  280.  
  281. NC = 1
  282. SEGINI MCHPO4
  283. MCHPO4.JATTRI(1)=2
  284. MCHPO4.IFOPOI=IFOUR
  285. SEGINI MSOUP4
  286. MCHPO4.IPCHP(1)=MSOUP4
  287. SEGINI MPOV4
  288. MSOUP4.NOCOMP(1)='SCAL'
  289. MSOUP4.IGEOC = IM1
  290. MSOUP4.IPOVAL = MPOV4
  291.  
  292. C vapour temperature: Tv
  293.  
  294. NC = 1
  295. SEGINI MCHPO5
  296. MCHPO5.JATTRI(1)=2
  297. MCHPO5.IFOPOI=IFOUR
  298. SEGINI MSOUP5
  299. MCHPO5.IPCHP(1)=MSOUP5
  300. SEGINI MPOV5
  301. MSOUP5.NOCOMP(1)='SCAL'
  302. MSOUP5.IGEOC = IM1
  303. MSOUP5.IPOVAL = MPOV5
  304.  
  305. C liquid temperature: Tl
  306.  
  307. NC = 1
  308. SEGINI MCHPO6
  309. MCHPO6.JATTRI(1)=2
  310. MCHPO6.IFOPOI=IFOUR
  311. SEGINI MSOUP6
  312. MCHPO6.IPCHP(1)=MSOUP6
  313. SEGINI MPOV6
  314. MSOUP6.NOCOMP(1)='SCAL'
  315. MSOUP6.IGEOC = IM1
  316. MSOUP6.IPOVAL = MPOV6
  317.  
  318. C vapour density: rv
  319.  
  320. NC = 1
  321. SEGINI MCHPO7
  322. MCHPO7.JATTRI(1)=2
  323. MCHPO7.IFOPOI=IFOUR
  324. SEGINI MSOUP7
  325. MCHPO7.IPCHP(1)=MSOUP7
  326. SEGINI MPOV7
  327. MSOUP7.NOCOMP(1)='SCAL'
  328. MSOUP7.IGEOC = IM1
  329. MSOUP7.IPOVAL = MPOV7
  330.  
  331. C liquid density: rl
  332.  
  333. NC = 1
  334. SEGINI MCHPO8
  335. MCHPO8.JATTRI(1)=2
  336. MCHPO8.IFOPOI=IFOUR
  337. SEGINI MSOUP8
  338. MCHPO8.IPCHP(1)=MSOUP8
  339. SEGINI MPOV8
  340. MSOUP8.NOCOMP(1)='SCAL'
  341. MSOUP8.IGEOC = IM1
  342. MSOUP8.IPOVAL = MPOV8
  343.  
  344. C pressure correction term, pi
  345.  
  346. NC = 1
  347. SEGINI MCHPO9
  348. MCHPO9.JATTRI(1)=2
  349. MCHPO9.IFOPOI=IFOUR
  350. SEGINI MSOUP9
  351. MCHPO9.IPCHP(1)=MSOUP9
  352. SEGINI MPOV9
  353. MSOUP9.NOCOMP(1)='SCAL'
  354. MSOUP9.IGEOC = IM1
  355. MSOUP9.IPOVAL = MPOV9
  356. C
  357. C**** "Recapitulando"
  358. C
  359. C We activate MPOV1 - MPOV9
  360. C
  361. C**** "bucle" for the calculation of the primitives at
  362. C each centre
  363.  
  364.  
  365. DO NLCE = 1, N1
  366.  
  367. oldav = MPOW7.VPOCHA(NLCE,1)
  368. oldTv = MPOW8.VPOCHA(NLCE,1)
  369.  
  370. IF(IDIM .EQ. 3)THEN
  371. if(oldav .LT. 0.01d0)then
  372. A = (gamv - 1.D0)*cpv*oldTv*MPOW1.VPOCHA(NLCE,1)/gamv
  373. else
  374. A = (gamv - 1.D0)*(MPOW5.VPOCHA(NLCE,1) - (MPOW3
  375. $ .VPOCHA(NLCE,1)**2 + MPOW3.VPOCHA(NLCE,2)**2 +
  376. & MPOW3.VPOCHA(NLCE,3)**2)/
  377. & (2.d0*(MPOW1.VPOCHA(NLCE,1)+ 1.D-20)))
  378. endif
  379. if(oldav .GT. 0.99d0)then
  380. B = (gaml - 1.D0)*MPOW2.VPOCHA(NLCE,1)*
  381. & (cpl*MPOW9.VPOCHA(NLCE,1)/gaml + pil/1000.d0)
  382. else
  383. B = (gaml - 1.D0)*(MPOW6.VPOCHA(NLCE,1) - (MPOW4
  384. $ .VPOCHA(NLCE,1)**2 + MPOW4.VPOCHA(NLCE,2)**2)+
  385. & MPOW4.VPOCHA(NLCE,3)**2/(2.D0
  386. $ *(MPOW2.VPOCHA(NLCE,1)+ 1.D-20)))
  387. endif
  388. ELSE
  389. if(oldav .LT. 0.01d0)then
  390. A = (gamv - 1.D0)*cpv*oldTv*MPOW1.VPOCHA(NLCE,1)/gamv
  391. else
  392. A = (gamv - 1.D0)*(MPOW5.VPOCHA(NLCE,1) - (MPOW3
  393. $ .VPOCHA(NLCE,1)**2 + MPOW3.VPOCHA(NLCE,2)**2)/(2.d0
  394. $ *(MPOW1.VPOCHA(NLCE,1)+ 1.D-20)))
  395. endif
  396. if(oldav .GT. 0.99d0)then
  397. B = (gaml - 1.D0)*MPOW2.VPOCHA(NLCE,1)*
  398. & (cpl*MPOW9.VPOCHA(NLCE,1)/gaml + pil/1000.d0)
  399. else
  400.  
  401. B = (gaml - 1.D0)*(MPOW6.VPOCHA(NLCE,1) - (MPOW4
  402. $ .VPOCHA(NLCE,1)**2 + MPOW4.VPOCHA(NLCE,2)**2)/(2.D0
  403. $ *(MPOW2.VPOCHA(NLCE,1)+ 1.D-20)))
  404. endif
  405. ENDIF
  406. delta = (- A - B + gaml*pil)**2.D0 + 4.D0*gaml*pil*A
  407.  
  408. p = 1.D0/2.D0*(A + B - gaml*pil + sqrt(delta))
  409.  
  410. alpha = A/p
  411. call FUNCF(alpha, FFV)
  412. uvx = FFV*MPOW3.VPOCHA(NLCE,1)/(MPOW1.VPOCHA(NLCE,1) + 1.D-20)
  413. uvy = FFV*MPOW3.VPOCHA(NLCE,2)/(MPOW1.VPOCHA(NLCE,1) + 1.D-20)
  414. IF(IDIM .EQ. 3)THEN
  415. uvz = FFV*MPOW3.VPOCHA(NLCE,3)/(MPOW1.VPOCHA(NLCE,1) + 1.D
  416. & -20)
  417. uv2 = uvx*uvx + uvy*uvy + uvz*uvz
  418. ELSE
  419. uv2 = uvx*uvx + uvy*uvy
  420. ENDIF
  421.  
  422. call FUNCF((1.d0 - alpha),FFL)
  423. ulx = FFL*MPOW4.VPOCHA(NLCE,1)/(MPOW2.VPOCHA(NLCE,1) + 1.D-20)
  424. uly = FFL*MPOW4.VPOCHA(NLCE,2)/(MPOW2.VPOCHA(NLCE,1) + 1.D-20)
  425. IF(IDIM .EQ. 3)THEN
  426. ulz = FFL*MPOW4.VPOCHA(NLCE,3)/(MPOW2.VPOCHA(NLCE,1) + 1.D
  427. & -20)
  428. ul2 = ulx*ulx + uly*uly + ulz*ulz
  429. ELSE
  430. ul2 = ulx*ulx + uly*uly
  431. ENDIF
  432.  
  433. if((alpha .GT. 0.999d0) .OR. (alpha .LT. 0.01d0))then
  434. C
  435. C Water faucet test
  436. C Tv = 323.15D0
  437. C Tl = 323.15D0
  438. C
  439. C Shock tube test
  440. C Tv = 308.15d0
  441. C Tl = 308.15d0
  442. C
  443. C Phase separation test or slosing of a water column
  444. Tv = 298.15D0
  445. Tl = 298.15D0
  446. C For the oscillating manometer should be 323 but to be practical I have left it in 298.15
  447. ev = cpv*Tv/gamv
  448. el = cpl*Tl/gaml*(p + gaml*pil)/(p + pil)
  449. else
  450. ev = MPOW5.VPOCHA(NLCE,1)/(MPOW1.VPOCHA(NLCE,1) + 1.D-20)
  451. & - uv2/2.D0
  452. el = MPOW6.VPOCHA(NLCE,1)/(MPOW2.VPOCHA(NLCE,1) + 1.D-20)
  453. & - ul2/2.D0
  454. Tv = gamv*ev/cpv
  455. Tl = gaml*el/(cpl*(1.D0 + pil*(gaml - 1.D0)/(p + pil)))
  456. endif
  457. rv = gamv*p/((gamv - 1.D0)*cpv*Tv)
  458. rl = gaml*(p + pil)/((gaml - 1.D0)*cpl*Tl)
  459. C
  460. C Bestion´s formula
  461. C
  462. rm = alpha*rv + (1.d0 - alpha)*rl
  463. rvm = rv + Cvm*rm
  464. rlm = rl + Cvm*rm
  465.  
  466. pi = p - Cp*(alpha*rvm*(1.D0- alpha)*rlm)/
  467. & (alpha*rlm + (1.D0- alpha)*rvm)*
  468. & (sqrt(uv2) - sqrt(ul2))**2
  469.  
  470. MPOV1.VPOCHA(NLCE,1) = alpha
  471. MPOV2.VPOCHA(NLCE,1) = uvx
  472. MPOV2.VPOCHA(NLCE,2) = uvy
  473. MPOV3.VPOCHA(NLCE,1) = ulx
  474. MPOV3.VPOCHA(NLCE,2) = uly
  475. IF(IDIM .EQ. 3)THEN
  476. MPOV2.VPOCHA(NLCE,3) = uvz
  477. MPOV3.VPOCHA(NLCE,3) = ulz
  478. ENDIF
  479. MPOV4.VPOCHA(NLCE,1) = p
  480. MPOV5.VPOCHA(NLCE,1) = Tv
  481. MPOV6.VPOCHA(NLCE,1) = Tl
  482. MPOV7.VPOCHA(NLCE,1) = rv
  483. MPOV8.VPOCHA(NLCE,1) = rl
  484. MPOV9.VPOCHA(NLCE,1) = pi
  485.  
  486. ENDDO
  487. C
  488. OCH1 = MCHPO1
  489. OCH2 = MCHPO2
  490. OCH3 = MCHPO3
  491. OCH4 = MCHPO4
  492. OCH5 = MCHPO5
  493. OCH6 = MCHPO6
  494. OCH7 = MCHPO7
  495. OCH8 = MCHPO8
  496. OCH9 = MCHPO9
  497. C
  498. SEGDES MPOV1
  499. SEGDES MPOV2
  500. SEGDES MPOV3
  501. SEGDES MPOV4
  502. SEGDES MPOV5
  503. SEGDES MPOV6
  504. SEGDES MPOV7
  505. SEGDES MPOV8
  506. SEGDES MPOV9
  507.  
  508. SEGDES MPOW1
  509. SEGDES MPOW2
  510. SEGDES MPOW3
  511. SEGDES MPOW4
  512. SEGDES MPOW5
  513. SEGDES MPOW6
  514. SEGDES MPOW7
  515. SEGDES MPOW8
  516. SEGDES MPOW9
  517.  
  518. SEGDES MSOUP1
  519. SEGDES MSOUP2
  520. SEGDES MSOUP3
  521. SEGDES MSOUP4
  522. SEGDES MSOUP5
  523. SEGDES MSOUP6
  524. SEGDES MSOUP7
  525. SEGDES MSOUP8
  526. SEGDES MSOUP9
  527.  
  528. SEGDES MCHPO1
  529. SEGDES MCHPO2
  530. SEGDES MCHPO3
  531. SEGDES MCHPO4
  532. SEGDES MCHPO5
  533. SEGDES MCHPO6
  534. SEGDES MCHPO7
  535. SEGDES MCHPO8
  536. SEGDES MCHPO9
  537.  
  538. RETURN
  539. END
  540.  
  541.  
  542.  
  543.  
  544.  
  545.  
  546.  
  547.  
  548.  
  549.  
  550.  
  551.  
  552.  
  553.  
  554.  
  555.  
  556.  
  557.  
  558.  

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