summaryrefslogtreecommitdiff
path: root/Donjon/src/THMDFM.f90
blob: 1e4e0baf322c85ffc9c4c413e94f3098d8ee5dc7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
!DECK THMDFM
      SUBROUTINE THMDFM(PCOOL,VCOOL,HMAVG,HD,TL,TSAT,IDFM,EPS,XFL,RHO,RHOL,RHOG, VGJ, VGJprime, C0, HLV)
!
!-----------------------------------------------------------------------
!
! Purpose:
! Drift-flux Model for the computation of thermohydraulics parameters in two-phase flow
!
!Copyright:
! Copyright (C) 2025 Ecole Polytechnique de Montreal.
!
!Author(s): 
! M. Bellier
!
!Parameters: input
! PCOOL   pressure in Pascal
! VCOOL   coolant velocity in m/s
! HMAVG   averaged enthalpy
! HD      hydraulic diameter in m
! TL      liquid temperature in K
! TSAT    saturation temperature in K
! 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) 
! EPS     input coolant void fraction
!
!
!Parameters: output
! XFL     coolant flow quality
! RHO     coolant density in Kg/m^3
! RHOL    liquid density in kg/m^3
! RHOG    vapour density in kg/m^3
! VGJ     drift velocity
! C0      concentration parameter
! VGJprime 
! HLV     delta between liquid and vapour enthaply
!
!-----------------------------------------------------------------------
!
!----
!  SUBROUTINE ARGUMENTS
!----
      REAL PCOOL,VCOOL,HMAVG,HD,TL,TSAT,EPS,XFL,RHO,RHOL,RHOG, VGJ, VGJprime, C0, HLV
      INTEGER IDFM
!----
!  LOCAL VARIABLES
!----
      REAL EPSold, ERREPS, VLIQ, VVAP, TCALO, HLSAT, HGSAT, ZMUL, ZMUG, CPL, CPG, ZKL, ZKG, ZMU, REY
      INTEGER NITER
!----
! INITIALIZE VARIABLES
!----
      VGJ = 0
      C0 = 1
      VGJprime = 0

!----
!  MAIN LOOP
!----
     NITER=0
     ERREPS=1

   10 CONTINUE
!----
!  SAVE THE OLD EPSILON VALUE
!----
      EPSold = EPS 
      NITER = NITER+1

!----
! TEST ON ERR EPS
!----
      IF (NITER .GT. 150) GOTO 20
      IF (ERREPS .LT. 1E-8) GOTO 20 

!----
!  COMPUTE DENSITIES
!----
      TCALO=EPS*TSAT+(1.0-EPS)*TL
      CALL THMTX(TCALO,0.0,RHOL,HLSAT,ZKL,ZMUL,CPL)
      CALL THMTX(TCALO,1.0,RHOG,HGSAT,ZKG,ZMUG,CPG)

      RHO = RHOL*(1 - EPS)+ EPS*RHOG
    
!----
!  COMPUTE PHASES VELOCITIES AND REYNOLDS
!----
      VLIQ = VCOOL - (1.0/(1.0- EPS) - RHOL/RHO) *VGJprime
      VVAP = VCOOL + RHOL/RHO *VGJprime
      ZMU = (ZMUL*ZMUG/ (ZMUL*(1.0-EPS) + ZMUG*EPS))
      REY = RHO * ABS(VCOOL) * HD / ZMU

!----
!  COMPUTE FLOW QUALITY
!----

      IF (HLSAT .GT. HMAVG) THEN 
        XFL = 0
      ELSE IF (HMAVG .GT. HGSAT) THEN
        XFL = 1
      ELSE     
        XFL = (HMAVG - HLSAT)/(HGSAT - HLSAT)
      ENDIF

!----
!  COMPUTE VGJ, VGJprime AND C0 AFTER CHOSEN CORRELATION
!----
      CALL THMVGJ(VCOOL, RHO, PCOOL, ZMU, XFL, HD, RHOG, RHOL, EPS, IDFM, VGJ, C0)
      VGJprime = VGJ + (C0-1)*VCOOL

!----
!  COMPUTE HLV
!----
      HLV=HGSAT-HLSAT
!----
!  COMPUTE NEW EPS VALUE
!----
      IF (XFL.EQ.0) THEN 
        EPS = 0
      ELSE IF (XFL.EQ.1) THEN
        EPS = 1
      ELSE 
        EPS = XFL / (C0 * (XFL + (RHOG/RHOL) * (1 - XFL)) + (RHOG * VGJ) / (RHOL * VCOOL))
      ENDIF
!----
!  COMPUTE DELTA BETWEEN EPSold AND EPS
!----
    ERREPS = ABS(EPSold - EPS)
   GOTO 10


!----
! EXIT LOOP
!----
   20 CONTINUE

      IF (NITER.GT.150) THEN
        PRINT *, 'THMDFM: Maximum number of iterations reached (150)'
      ELSE
        PRINT *, 'THMDFM: Convergence reached in I = ', NITER, 'iterations'
      ENDIF
END