summaryrefslogtreecommitdiff
path: root/Donjon/src/THMH2O.f
diff options
context:
space:
mode:
authorstainer_t <thomas.stainer@oecd-nea.org>2025-09-08 13:48:49 +0200
committerstainer_t <thomas.stainer@oecd-nea.org>2025-09-08 13:48:49 +0200
commit7dfcc480ba1e19bd3232349fc733caef94034292 (patch)
tree03ee104eb8846d5cc1a981d267687a729185d3f3 /Donjon/src/THMH2O.f
Initial commit from Polytechnique Montreal
Diffstat (limited to 'Donjon/src/THMH2O.f')
-rw-r--r--Donjon/src/THMH2O.f389
1 files changed, 389 insertions, 0 deletions
diff --git a/Donjon/src/THMH2O.f b/Donjon/src/THMH2O.f
new file mode 100644
index 0000000..eb22012
--- /dev/null
+++ b/Donjon/src/THMH2O.f
@@ -0,0 +1,389 @@
+*DECK THMH2O
+ SUBROUTINE THMH2O(ITIME,I,J,K,K0,PINLET,MFLOW,HMAVG,ENT,HD,IFLUID,
+ > IHCONV,KHCONV,ISUBM,RADCL,ZF,VCOOL,IDFM,PHI,XFL,EPS,SLIP,
+ > ACOOL,PCH,DZ,TCALO,RHO,RHOLAV,RHOG,TSCLAD,KWA,VGJprime,HLV)
+*
+*-----------------------------------------------------------------------
+*
+*Purpose:
+* Nucleate boiling correlations along a single coolant channel.
+*
+*Copyright:
+* Copyright (C) 2012 Ecole Polytechnique de Montreal.
+*
+*Author(s):
+* A. Hebert, P. Gallet
+*
+*Parameters: input
+* ITIME type of calculation (0=steady-state; 1=transient).
+* I position of channel alon X-axis
+* J position of channel alon Y-axis
+* K position of channel alon Z-axis
+* K0 onser of nuclear boiling point
+* PINLET pressure in Pascal
+* MFLOW massic coolant flow rate in Kg/m^2/s
+* HMAVG averaged enthalpy
+* ENT four values of enthalpy in J/Kg to be used in Gaussian
+* integration
+* HD hydraulic diameter in m
+* IFLUID type of fluid (0=H2O; 1=D2O).
+* IHCONV flag indicating HCONV chosen (0=default/1=user-provided).
+* KHCONV fixed user-provided HCONV value in W/m^2/K.
+* ISUBM subcooling model (0: one-phase; 1: Jens-Lottes model;
+* 2: Saha-Zuber model).
+* RADCL outer clad radius in m
+* ZF parameters used to compute heat flux on clad surface in
+* transient cases.
+* PHI heat flow exchanged between clad and fluid in W/m^2.
+* Given in steady-state cases.
+* XFL input coolant flow quality
+* EPS input coolant void fraction
+* SLIP input slip ratio of vapor phase speed to liquid phase speed.
+* ACOOL coolant cross section area in m^2.
+* PCH heating perimeter in m.
+* DZ axial mesh width in m.
+* VCOOL local coolant velocity
+* IDFM flag indicating if the drift flux model is to be used
+* (0=HEM1(no drift velocity)/1=EPRI/2=MODEBSTION/3=GERAMP/4=CHEXAL)
+*
+*Parameters: output
+* PHI heat flow exchanged between clad and fluid in W/m^2.
+* Computed in transient cases.
+* XFL output coolant flow quality
+* EPS output coolant void fraction
+* SLIP output slip ratio of vapor phase speed to liquid phase speed.
+* TCALO coolant temperature in K
+* RHO coolant density in Kg/m^3
+* RHOLAV liquid density in kg/m^3
+* RHOG vapour density in kg/m^3
+* TSCLAD clad temperature in K
+* KWA flow regime (=0: single-phase; =1: subcooled; =2: nucleate
+* boiling; =3 superheated steam)
+* VGJ drift velocity in m/s
+* VGJprime
+* HLV delta between liquid and vapour enthalpies
+*
+*-----------------------------------------------------------------------
+*
+*----
+* SUBROUTINE ARGUMENTS
+*----
+ INTEGER I,J,K,K0,IFLUID,IHCONV,ISUBM,KWA
+ REAL PINLET,MFLOW,HMAVG,ENT(4),HD,KHCONV,RADCL,ZF(2),PHI,TCALO,
+ > RHO,RHOLAV,TSCLAD,XFL,EPS,SLIP,ACOOL,PCH,DZ,VCOOL,VGJprime
+*----
+* LOCAL VARIABLES
+*----
+ REAL W(4),HL(4),JL,JG,REL,PRL,VGJ,UL
+ CHARACTER HSMG*131
+ LOGICAL LFIRST
+*----
+* SAVE VARIABLES
+*----
+ SAVE DHSUB,DSAT,W
+ DATA W /0.347855,0.652145,0.652145,0.347855/
+*----
+* COMPUTE THE PROPERTIES OF THE SATURATED STEAM
+*----
+ IF(HMAVG.LT.0.0) CALL XABORT('THMH2O: NEGATIVE INPUT ENTHALPY.')
+ IF(IFLUID.EQ.0) THEN
+ CALL THMSAT(PINLET,TSAT)
+ CALL THMTX(TSAT,0.0,RHOL,HLSAT,ZKL,ZMUL,CPL)
+ CALL THMTX(TSAT,1.0,RHOG,HGSAT,ZKG,ZMUG,CPG)
+ ELSE IF(IFLUID.EQ.1) THEN
+ CALL THMHST(PINLET,TSAT)
+ CALL THMHTX(TSAT,0.0,RHOL,HLSAT,ZKL,ZMUL,CPL)
+ CALL THMHTX(TSAT,1.0,RHOG,HGSAT,ZKG,ZMUG,CPG)
+ ENDIF
+*----
+* COMPUTE THE DENSITY AND TEMPERATURE OF THE LIQUID
+*----
+ HL(1)=MIN1(ENT(1),HLSAT)
+ HL(2)=MIN1(ENT(2),HLSAT)
+ HL(3)=MIN1(ENT(3),HLSAT)
+ HL(4)=MIN1(ENT(4),HLSAT)
+ CALL THMPH(IFLUID,PINLET,HL(1),R11,TL1)
+ CALL THMPH(IFLUID,PINLET,HL(2),R11,TL2)
+ CALL THMPH(IFLUID,PINLET,HL(3),R11,TL3)
+ CALL THMPH(IFLUID,PINLET,HL(4),R11,TL4)
+ IF(IFLUID.EQ.0) THEN
+ CALL THMPT(PINLET,TL1,RHO1,R2,R3,R4,CP1)
+ CALL THMPT(PINLET,TL2,RHO2,R2,R3,R4,CP2)
+ CALL THMPT(PINLET,TL3,RHO3,R2,R3,R4,CP3)
+ CALL THMPT(PINLET,TL4,RHO4,R2,R3,R4,CP4)
+ IF(ABS(TSAT-TL1).LT.0.1) CALL THMTX(TSAT,0.0,RHO1,R2,R3,R4,CP1)
+ IF(ABS(TSAT-TL2).LT.0.1) CALL THMTX(TSAT,0.0,RHO2,R2,R3,R4,CP2)
+ IF(ABS(TSAT-TL3).LT.0.1) CALL THMTX(TSAT,0.0,RHO3,R2,R3,R4,CP3)
+ IF(ABS(TSAT-TL4).LT.0.1) CALL THMTX(TSAT,0.0,RHO4,R2,R3,R4,CP4)
+ ELSE IF(IFLUID.EQ.1) THEN
+ CALL THMHPT(PINLET,TL1,RHO1,R2,R3,R4,CP1)
+ CALL THMHPT(PINLET,TL2,RHO2,R2,R3,R4,CP2)
+ CALL THMHPT(PINLET,TL3,RHO3,R2,R3,R4,CP3)
+ CALL THMHPT(PINLET,TL4,RHO4,R2,R3,R4,CP4)
+ IF(ABS(TSAT-TL1).LT.0.1) CALL THMHTX(TSAT,0.0,RHO1,R2,R3,R4,CP1)
+ IF(ABS(TSAT-TL2).LT.0.1) CALL THMHTX(TSAT,0.0,RHO2,R2,R3,R4,CP2)
+ IF(ABS(TSAT-TL3).LT.0.1) CALL THMHTX(TSAT,0.0,RHO3,R2,R3,R4,CP3)
+ IF(ABS(TSAT-TL4).LT.0.1) CALL THMHTX(TSAT,0.0,RHO4,R2,R3,R4,CP4)
+ ENDIF
+ TL=0.5*(W(1)*TL1+W(2)*TL2+W(3)*TL3+W(4)*TL4)
+ RHOLAV=0.5*(W(1)*RHO1+W(2)*RHO2+W(3)*RHO3+W(4)*RHO4)
+ CPLAV=0.5*(W(1)*CP1+W(2)*CP2+W(3)*CP3+W(4)*CP4)
+*----
+* COMPUTE THE STEAM FLOW QUALITY AND LIQUID ENTHALPY
+* Reference: R. T. Lahey Jr. and F. J. Moody, "The thermal hydraulics
+* of a Boiling water nuclear reactor," American Nuclear Society, 1977.
+* Equation (5.177), page 224
+* F2: Thermodynamic quality
+*----
+ TSCLAD=600.0
+ IF(K0.GT.0) TSCLAD=TSAT+DSAT
+ XFL0=XFL
+ EPS0=EPS
+ SLIP0=SLIP
+ LFIRST=.TRUE.
+ HLAVG=HMAVG
+ F2=0.0
+ F3=0.0
+ IF(K0.GT.0) THEN
+ HLV=HGSAT-HLSAT
+ IF((HLV.GT.0.0).AND.(DHSUB.GT.0.0)) THEN
+ F2=(HMAVG-HLSAT)/HLV
+ F3=(DHSUB/HLV)*EXP(-(HMAVG-HLSAT)/DHSUB-1.0)
+ ENDIF
+ IF(HMAVG.GE.HGSAT) THEN
+ XFL=1.0
+ EPS=1.0
+ SLIP=1.0
+ HLAVG=0.0
+ ELSE
+ IF(ISUBM.EQ.1) THEN
+* Use the Paul Gallet thesis model.
+ PI=RHOLAV*CPLAV*(TSCLAD-TL)/(RHOG*HLV)
+ XFL=XFL0+PCH*PHI*DZ/(MFLOW*ACOOL*HLV)/(1.0+PI)
+ ELSE IF(ISUBM.EQ.2) THEN
+* Use a profile fit model.
+ XFL=MAX(XFL0,(F2+F3)/(1.0+F3))
+ ENDIF
+ HLAVG=MIN(HLSAT,(HMAVG-XFL*HGSAT)/(1.0-XFL))
+ ENDIF
+*----
+* RECOMPUTE THE LIQUID PROPERTIES
+*----
+ IF(HLAVG.GT.0.0) THEN
+ CALL THMPH(IFLUID,PINLET,HLAVG,RHOL,TL)
+ IF(IFLUID.EQ.0) THEN
+ CALL THMPT(PINLET,TL,R1,R2,ZKL,ZMUL,CPL)
+ ELSE IF(IFLUID.EQ.1) THEN
+ CALL THMHPT(PINLET,TL,R1,R2,ZKL,ZMUL,CPL)
+ ENDIF
+*----
+* COMPUTE THE COOLANT VOID FRACTION AND SLIP RATIO
+* A drift-flux model is proposed by means of the concentration
+* parameter CO and the drift velocity VGJ (their correspondent
+* correlations are supposed to work fine under different flow regimes.
+*----
+ IF(HGSAT.GT.HLSAT) THEN
+ CO=1.13
+ PR=PINLET/10**6
+ SIGM=-7.2391E-6*PR**3+2.8345E-4*PR**2-5.1566E-3*PR+4.2324E-2
+ VGJ=1.18*((SIGM*9.81*(RHOL-RHOG))/RHOL**2)**0.25
+ F4=CO*((XFL*RHOL)+((1.0-XFL)*RHOG))+(RHOL*RHOG*VGJ/MFLOW)
+ EPS=(XFL*RHOL)/F4
+ JL=(1.0-XFL)*MFLOW/RHOL
+ JG=XFL*MFLOW/RHOG
+ IF(EPS.NE.0) SLIP=JG*(1.0-EPS)/(JL*EPS)
+ ENDIF
+ ELSE
+* superheated steam
+ CALL THMPH(IFLUID,PINLET,HMAVG,RHOG,TCALO)
+ IF(IFLUID.EQ.0) THEN
+ CALL THMPT(PINLET,TCALO,R1,R2,ZKG,ZMUG,CPG)
+ ELSE IF(IFLUID.EQ.1) THEN
+ CALL THMHPT(PINLET,TCALO,R1,R2,ZKG,ZMUG,CPG)
+ ENDIF
+ ENDIF
+ ENDIF
+*----
+* COMPUTE THE FLUID PROPERTIES
+* RHO: fluid density
+* REL: Reynolds number of liquid phase
+* PRL: Prandtl number of liquid phase
+*----
+ IF(XFL.EQ.0.0) THEN
+* One phase liquid
+ TB=TSAT-0.1
+ IF(TL.LT.TB) THEN
+ TCALO=TL
+ ELSE
+ TCALO=TB
+ ENDIF
+ IF(IFLUID.EQ.0) THEN
+ CALL THMPT(PINLET,TCALO,R1,R2,ZKONE,ZMUONE,CPONE)
+ ELSE IF(IFLUID.EQ.1) THEN
+ CALL THMHPT(PINLET,TCALO,R1,R2,ZKONE,ZMUONE,CPONE)
+ ENDIF
+ RHO=RHOLAV
+ REL=MFLOW*HD/ZMUONE
+ PRL=ZMUONE*CPONE/ZKONE
+ ELSE IF(HMAVG.LT.HGSAT) THEN
+* Two-phase flow
+ IF((IFLUID.EQ.0).AND.(IDFM.GT.0)) THEN
+ CALL THMDFM(PINLET,VCOOL,HMAVG,HD,TL,TSAT,IDFM,EPS,XFL,
+ > RHO,RHOL,RHOG,VGJ,VGJprime,C0,HLV)
+ CALL THMTX(TCALO, 0.0, RHO11, H11, ZK11, ZMUL, CPL)
+ UL = VCOOL - (EPS / (1.0 - EPS))*RHOG/RHO * VGJprime
+ REL = ABS(UL*RHOL) * HD / ZMUL
+ PRL = ZMUL*CPL/ZKL
+ ELSE
+ REL=MFLOW*(1.0-XFL)*HD/ZMUL
+ PRL=ZMUL*CPL/ZKL
+ ENDIF
+ TCALO=EPS*TSAT+(1.0-EPS)*TL
+ ZKONE=ZKL
+ CPONE=CPL
+ RHO=EPS*RHOG+(1.0-EPS)*RHOL
+ JL=(1.0-XFL)*MFLOW/RHOL
+ JG=XFL*MFLOW/RHOG
+ IF(EPS.NE.0) THEN
+ SLIP=JG*(1.0-EPS)/(JL*EPS)
+ ENDIF
+ ELSE
+* superheated steam
+ RHO=RHOG
+ REL=MFLOW*HD/ZMUG
+ PRL=ZMUG*CPG/ZKG
+ ENDIF
+*----
+* THERMAL EXCHANGE BETWEEN CLAD AND FLUID USING THE DITTUS AND BOELTER
+* CORRELATION (SINGLE PHASE) OR CHEN CORRELATION (SATURATED BOILING)
+*----
+ IF(IHCONV.EQ.0) THEN
+ ITER=0
+ KWA=99
+ DO
+ ITER=ITER+1
+ IF(ITER.GT.500) THEN
+ WRITE(HSMG,'(30HTHMH2O: HCONV FAILURE IN SLICE,I5,1H.)') K
+ CALL XABORT(HSMG)
+ ENDIF
+ HA=0.023*(ZKONE/HD)*REL**0.8*PRL**0.4
+ F=1.0
+ S=1.0
+ IF((XFL.EQ.XFL0).OR.(TSCLAD.LE.TSAT).OR.(KWA.EQ.0)) THEN
+* Single-phase convection. Use Dittus-Boelter correlation
+ KWA=0
+ HB=0.0
+ K0=0
+ XFL=XFL0
+ EPS=EPS0
+ SLIP=SLIP0
+ ELSE IF(HMAVG.LT.HGSAT) THEN
+* Subcooled convection. Use Dittus-Boelter and Forster-Zuber
+* correlations
+* XM: Martinelli parameter
+* F: Reynolds number factor
+* S: nucleate boiling suppression factor
+* SIGM: surface tension in N/m
+* HA: Dittus-Boelter coefficient
+* HB: Forster-Zuber coefficient
+*
+ IF(HMAVG.LT.HLSAT) THEN
+ KWA=1
+ ELSE
+ KWA=2
+ ENDIF
+ XM=(XFL/(1.0-XFL))**0.9*(RHOL/RHOG)**0.5*(ZMUG/ZMUL)**0.1
+ IF(XM.LE.0.100207) THEN
+ F=1.0
+ ELSE
+ F=2.35*(0.213+XM)**0.736
+ ENDIF
+ RE=REL*F**1.25
+ S=1.0/(1.0+2.53E-6*RE**1.17)
+ PR=PINLET/10**6
+ SIGM=-7.2391E-6*PR**3+2.8345E-4*PR**2-5.1566E-3*PR+4.2324E-2
+ HA=0.023*(ZKL/HD)*REL**0.8*PRL**0.4
+ DTSAT=TSCLAD-TSAT
+ IF(IFLUID.EQ.0) THEN
+ CALL THMSAP(PW, TSCLAD)
+ ELSE
+ CALL THMHSP(PW, TSCLAD)
+ ENDIF
+ DP=PW-PINLET
+* Forster-Zuber equation
+ HLV=HGSAT-HLSAT
+ HB=0.00122*ZKL**0.79*CPL**0.45*RHOL**0.49/(ZMUL**0.29*
+ > SIGM**0.5*HLV**0.24*RHOG**0.24)*DTSAT**0.24*DP**0.75
+ ELSE
+* Superheated steam. Use Mokry correlation
+ KWA=3
+ IF(IFLUID.EQ.0) THEN
+ CALL THMPT(PINLET,TSCLAD,RHOW,R2,R3,R4,R5)
+ ELSE IF(IFLUID.EQ.1) THEN
+ CALL THMHPT(PINLET,TSCLAD,RHOW,R2,R3,R4,R5)
+ ENDIF
+ HA=0.0061*(ZKG/HD)*REL**0.904*PRL**0.684*(RHOW/RHO)**0.564
+ HB=0.0
+ ENDIF
+* Chen correlation
+ HCONV=F*HA+S*HB
+ IF(HCONV.LE.0.0) THEN
+ WRITE(HSMG,'(34HTHMH2O: DRY OUT REACHED IN CHANNEL,3I5)')
+ > I,J,K
+ CALL XABORT(HSMG)
+ ENDIF
+ IF(ITIME.EQ.0) THEN
+ TWAL=(PHI+S*HB*TSAT+F*HA*TCALO)/(S*HB+F*HA)
+ ELSE
+ ZNUM=ZF(1)+RADCL*S*HB*TSAT+RADCL*F*HA*TCALO
+ ZDEN=ZF(2)+RADCL*S*HB+RADCL*F*HA
+ TWAL=MAX(273.15,ZNUM/ZDEN)
+ PHI=MAX(0.0,(ZF(1)-TWAL*ZF(2))/RADCL)
+ ENDIF
+ IF(ABS(TSCLAD-TWAL).GT.1.0E-5*TSCLAD) THEN
+ TSCLAD=TWAL
+ ELSE
+ EXIT
+ ENDIF
+ ENDDO
+ ELSE IF(IHCONV.EQ.1) THEN
+ IF(ITIME.EQ.0) THEN
+ TSCLAD=TCALO+PHI/KHCONV
+ ELSE
+ RCHC=RADCL*KHCONV
+ TSCLAD=MAX(273.15,(ZF(1)+RCHC*TCALO)/(ZF(2)+RCHC))
+ PHI=(ZF(1)-TSCLAD*ZF(2))/RADCL
+ ENDIF
+ ENDIF
+*----
+* COMPUTE INITIAL BULK LIQUID ENTHALPY SUBCOOLING DHSUB
+*----
+ IF((ISUBM.GT.0).AND.(K0.EQ.0).AND.LFIRST) THEN
+ DTSUB=0.0
+ IF(ISUBM.EQ.1) THEN
+* Bowring correlation
+* Reference: R. W. Bowring, "Physical Model, Based on Bubble
+* Detachment, and Calculation of Steam Voidage in the Subcooled
+* Region of a Heated Channel," OECD Report HPR-10, 1962.
+* Equation3 (3) and (17)
+ VC=MFLOW/RHOL
+ ETA=14.0+0.1*PINLET/1.01325E+05
+ DTSUB=ETA*PHI/VC*1.0E-6
+ ELSE IF(ISUBM.EQ.2) THEN
+* Saha-Zuber subcooling model
+* PE: Peclet number
+ PE=MFLOW*CPL*HD/ZKL
+ IF(PE.LE.70000.0) THEN
+ DTSUB=PHI*HD/(455.0*ZKL)
+ ELSE
+* reactor conditions
+ DTSUB=154.0*PHI/(MFLOW*CPL)
+ ENDIF
+ ENDIF
+ IF(TCALO.GE.TSAT-DTSUB) K0=K
+ DSAT=TSCLAD-TCALO-DTSUB
+ DHSUB=CPL*DTSUB
+ LFIRST=.FALSE.
+ ENDIF
+ RETURN
+ END