pychnosz 1.1.4__cp311-cp311-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pychnosz/__init__.py +129 -0
- pychnosz/biomolecules/__init__.py +29 -0
- pychnosz/biomolecules/ionize_aa.py +197 -0
- pychnosz/biomolecules/proteins.py +595 -0
- pychnosz/core/__init__.py +46 -0
- pychnosz/core/affinity.py +1256 -0
- pychnosz/core/animation.py +593 -0
- pychnosz/core/balance.py +334 -0
- pychnosz/core/basis.py +716 -0
- pychnosz/core/diagram.py +3336 -0
- pychnosz/core/equilibrate.py +813 -0
- pychnosz/core/equilibrium.py +554 -0
- pychnosz/core/info.py +821 -0
- pychnosz/core/retrieve.py +364 -0
- pychnosz/core/speciation.py +580 -0
- pychnosz/core/species.py +599 -0
- pychnosz/core/subcrt.py +1700 -0
- pychnosz/core/thermo.py +593 -0
- pychnosz/core/unicurve.py +1226 -0
- pychnosz/data/__init__.py +11 -0
- pychnosz/data/add_obigt.py +327 -0
- pychnosz/data/extdata/Berman/BDat17_2017.csv +2 -0
- pychnosz/data/extdata/Berman/Ber88_1988.csv +68 -0
- pychnosz/data/extdata/Berman/Ber90_1990.csv +5 -0
- pychnosz/data/extdata/Berman/DS10_2010.csv +6 -0
- pychnosz/data/extdata/Berman/FDM+14_2014.csv +2 -0
- pychnosz/data/extdata/Berman/Got04_2004.csv +5 -0
- pychnosz/data/extdata/Berman/JUN92_1992.csv +3 -0
- pychnosz/data/extdata/Berman/SHD91_1991.csv +12 -0
- pychnosz/data/extdata/Berman/VGT92_1992.csv +2 -0
- pychnosz/data/extdata/Berman/VPT01_2001.csv +3 -0
- pychnosz/data/extdata/Berman/VPV05_2005.csv +2 -0
- pychnosz/data/extdata/Berman/ZS92_1992.csv +11 -0
- pychnosz/data/extdata/Berman/sympy.R +99 -0
- pychnosz/data/extdata/Berman/testing/BA96.bib +12 -0
- pychnosz/data/extdata/Berman/testing/BA96_Berman.csv +21 -0
- pychnosz/data/extdata/Berman/testing/BA96_OBIGT.csv +21 -0
- pychnosz/data/extdata/Berman/testing/BA96_refs.csv +6 -0
- pychnosz/data/extdata/OBIGT/AD.csv +25 -0
- pychnosz/data/extdata/OBIGT/Berman_cr.csv +93 -0
- pychnosz/data/extdata/OBIGT/DEW.csv +211 -0
- pychnosz/data/extdata/OBIGT/H2O_aq.csv +4 -0
- pychnosz/data/extdata/OBIGT/SLOP98.csv +411 -0
- pychnosz/data/extdata/OBIGT/SUPCRT92.csv +178 -0
- pychnosz/data/extdata/OBIGT/inorganic_aq.csv +729 -0
- pychnosz/data/extdata/OBIGT/inorganic_cr.csv +273 -0
- pychnosz/data/extdata/OBIGT/inorganic_gas.csv +20 -0
- pychnosz/data/extdata/OBIGT/organic_aq.csv +1104 -0
- pychnosz/data/extdata/OBIGT/organic_cr.csv +481 -0
- pychnosz/data/extdata/OBIGT/organic_gas.csv +268 -0
- pychnosz/data/extdata/OBIGT/organic_liq.csv +533 -0
- pychnosz/data/extdata/OBIGT/testing/GEMSFIT.csv +43 -0
- pychnosz/data/extdata/OBIGT/testing/IGEM.csv +17 -0
- pychnosz/data/extdata/OBIGT/testing/Sandia.csv +8 -0
- pychnosz/data/extdata/OBIGT/testing/SiO2.csv +4 -0
- pychnosz/data/extdata/misc/AD03_Fig1a.csv +69 -0
- pychnosz/data/extdata/misc/AD03_Fig1b.csv +43 -0
- pychnosz/data/extdata/misc/AD03_Fig1c.csv +89 -0
- pychnosz/data/extdata/misc/AD03_Fig1d.csv +30 -0
- pychnosz/data/extdata/misc/BZA10.csv +5 -0
- pychnosz/data/extdata/misc/HW97_Cp.csv +90 -0
- pychnosz/data/extdata/misc/HWM96_V.csv +229 -0
- pychnosz/data/extdata/misc/LA19_test.csv +7 -0
- pychnosz/data/extdata/misc/Mer75_Table4.csv +42 -0
- pychnosz/data/extdata/misc/OBIGT_check.csv +423 -0
- pychnosz/data/extdata/misc/PM90.csv +7 -0
- pychnosz/data/extdata/misc/RH95.csv +23 -0
- pychnosz/data/extdata/misc/RH98_Table15.csv +17 -0
- pychnosz/data/extdata/misc/SC10_Rainbow.csv +19 -0
- pychnosz/data/extdata/misc/SK95.csv +55 -0
- pychnosz/data/extdata/misc/SOJSH.csv +61 -0
- pychnosz/data/extdata/misc/SS98_Fig5a.csv +81 -0
- pychnosz/data/extdata/misc/SS98_Fig5b.csv +84 -0
- pychnosz/data/extdata/misc/TKSS14_Fig2.csv +25 -0
- pychnosz/data/extdata/misc/bluered.txt +1000 -0
- pychnosz/data/extdata/protein/Cas/Cas_aa.csv +177 -0
- pychnosz/data/extdata/protein/Cas/Cas_uniprot.csv +186 -0
- pychnosz/data/extdata/protein/Cas/download.R +34 -0
- pychnosz/data/extdata/protein/Cas/mkaa.R +34 -0
- pychnosz/data/extdata/protein/POLG.csv +12 -0
- pychnosz/data/extdata/protein/TBD+05.csv +393 -0
- pychnosz/data/extdata/protein/TBD+05_aa.csv +393 -0
- pychnosz/data/extdata/protein/rubisco.csv +28 -0
- pychnosz/data/extdata/protein/rubisco.fasta +239 -0
- pychnosz/data/extdata/protein/rubisco_aa.csv +28 -0
- pychnosz/data/extdata/src/H2O92D.f.orig +3457 -0
- pychnosz/data/extdata/src/README.txt +5 -0
- pychnosz/data/extdata/taxonomy/names.dmp +215 -0
- pychnosz/data/extdata/taxonomy/nodes.dmp +63 -0
- pychnosz/data/extdata/thermo/Bdot_acirc.csv +60 -0
- pychnosz/data/extdata/thermo/buffer.csv +40 -0
- pychnosz/data/extdata/thermo/element.csv +135 -0
- pychnosz/data/extdata/thermo/groups.csv +6 -0
- pychnosz/data/extdata/thermo/opt.csv +2 -0
- pychnosz/data/extdata/thermo/protein.csv +506 -0
- pychnosz/data/extdata/thermo/refs.csv +343 -0
- pychnosz/data/extdata/thermo/stoich.csv.xz +0 -0
- pychnosz/data/loader.py +431 -0
- pychnosz/data/mod_obigt.py +322 -0
- pychnosz/data/obigt.py +471 -0
- pychnosz/data/worm.py +228 -0
- pychnosz/fortran/__init__.py +16 -0
- pychnosz/fortran/h2o92.dll +0 -0
- pychnosz/fortran/h2o92_interface.py +527 -0
- pychnosz/geochemistry/__init__.py +21 -0
- pychnosz/geochemistry/minerals.py +514 -0
- pychnosz/geochemistry/redox.py +500 -0
- pychnosz/models/__init__.py +47 -0
- pychnosz/models/archer_wang.py +165 -0
- pychnosz/models/berman.py +309 -0
- pychnosz/models/cgl.py +381 -0
- pychnosz/models/dew.py +997 -0
- pychnosz/models/hkf.py +523 -0
- pychnosz/models/hkf_helpers.py +222 -0
- pychnosz/models/iapws95.py +1113 -0
- pychnosz/models/supcrt92_fortran.py +238 -0
- pychnosz/models/water.py +480 -0
- pychnosz/utils/__init__.py +27 -0
- pychnosz/utils/expression.py +1074 -0
- pychnosz/utils/formula.py +830 -0
- pychnosz/utils/formula_ox.py +227 -0
- pychnosz/utils/reset.py +33 -0
- pychnosz/utils/units.py +259 -0
- pychnosz-1.1.4.dist-info/METADATA +197 -0
- pychnosz-1.1.4.dist-info/RECORD +128 -0
- pychnosz-1.1.4.dist-info/WHEEL +5 -0
- pychnosz-1.1.4.dist-info/licenses/LICENSE.txt +19 -0
- pychnosz-1.1.4.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,3457 @@
|
|
|
1
|
+
*** H2O92 - Computes state, thermodynamic, transport, and electroststic
|
|
2
|
+
*** properties of fluid H2O at T,[P,D] using equations and data
|
|
3
|
+
*** given by Haar et al. (1984), Levelt Sengers et al. (1983),
|
|
4
|
+
*** Johnson and Norton (1991), Watson et al. (1980), Sengers and
|
|
5
|
+
*** Kamgar-Parsi (1984), Sengers et al. (1984), Helgeson and Kirkham
|
|
6
|
+
*** (1974), Uematsu and Franck (1980), and Pitzer (1983).
|
|
7
|
+
***
|
|
8
|
+
***********************************************************************
|
|
9
|
+
***
|
|
10
|
+
*** Author: James W. Johnson
|
|
11
|
+
*** Earth Sciences Dept., L-219
|
|
12
|
+
*** Lawrence Livermore National Laboratory
|
|
13
|
+
*** Livermore, CA 94550
|
|
14
|
+
*** johnson@s05.es.llnl.gov
|
|
15
|
+
***
|
|
16
|
+
*** Abandoned: 8 November 1991
|
|
17
|
+
***
|
|
18
|
+
***********************************************************************
|
|
19
|
+
*
|
|
20
|
+
* specs - Input unit, triple point, saturation, and option specs:
|
|
21
|
+
*
|
|
22
|
+
***** it, id, ip, ih, itripl, isat, iopt, useLVS, epseqn, icrit;
|
|
23
|
+
*
|
|
24
|
+
* note that the returned value of isat may differ from
|
|
25
|
+
* its input value and that icrit need not be specified
|
|
26
|
+
* prior to invocation.
|
|
27
|
+
*
|
|
28
|
+
*
|
|
29
|
+
* states - State variables:
|
|
30
|
+
*
|
|
31
|
+
***** temp, pres, dens(1), dens(2);
|
|
32
|
+
*
|
|
33
|
+
* note that the first three of these must be specified prior
|
|
34
|
+
* to invocation and that, in the case of saturation, vapor
|
|
35
|
+
* density is returned in dens(1), liquid in dens(2).
|
|
36
|
+
*
|
|
37
|
+
*
|
|
38
|
+
* props - Thermodynamic, transport, electrostatic, and combined
|
|
39
|
+
* property values:
|
|
40
|
+
*
|
|
41
|
+
***** A, G, S, U, H, Cv, Cp, Speed, alpha, beta, diel, visc,
|
|
42
|
+
***** tcond, surten, tdiff, Prndtl, visck, albe,
|
|
43
|
+
***** ZBorn, YBorn, QBorn, daldT, XBorn
|
|
44
|
+
*
|
|
45
|
+
*
|
|
46
|
+
* error - LOGICAL argument that indicates success ("FALSE") or
|
|
47
|
+
* failure ("TRUE") of the call, the latter value in
|
|
48
|
+
* response to out-of-bounds specs or states variables.
|
|
49
|
+
*
|
|
50
|
+
***********************************************************************
|
|
51
|
+
|
|
52
|
+
SUBROUTINE H2O92(specs,states,props,error)
|
|
53
|
+
|
|
54
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
55
|
+
|
|
56
|
+
PARAMETER (NPROP = 23, NPROP2 = 46)
|
|
57
|
+
|
|
58
|
+
INTEGER specs(10)
|
|
59
|
+
DOUBLE PRECISION states(4), props(NPROP2), Dens(2),
|
|
60
|
+
1 wpliq(NPROP), wprops(NPROP)
|
|
61
|
+
LOGICAL crtreg, valid, error, useLVS
|
|
62
|
+
|
|
63
|
+
COMMON /units/ ft, fd, fvd, fvk, fs, fp, fh, fst, fc
|
|
64
|
+
COMMON /wpvals/ wprops, wpliq
|
|
65
|
+
|
|
66
|
+
SAVE
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
CALL unit(specs(1),specs(2),specs(3),specs(4),specs(5))
|
|
70
|
+
|
|
71
|
+
IF (.NOT. (valid(specs(1),specs(2),specs(3),specs(4),specs(5),
|
|
72
|
+
1 specs(6),specs(7),specs(8),specs(9),
|
|
73
|
+
2 states(1),states(2),states(3)))) THEN
|
|
74
|
+
error = .TRUE.
|
|
75
|
+
RETURN
|
|
76
|
+
ELSE
|
|
77
|
+
error = .FALSE.
|
|
78
|
+
END IF
|
|
79
|
+
|
|
80
|
+
IF (crtreg(specs(6),specs(7),specs(1),
|
|
81
|
+
1 states(1),states(2),states(3))) THEN
|
|
82
|
+
specs(10) = 1
|
|
83
|
+
useLVS = (specs(8) .EQ. 1)
|
|
84
|
+
ELSE
|
|
85
|
+
specs(10) = 0
|
|
86
|
+
useLVS = .FALSE.
|
|
87
|
+
END IF
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
IF (useLVS) THEN
|
|
91
|
+
Dens(1) = states(3)
|
|
92
|
+
CALL LVSeqn(specs(6),specs(7),specs(5),
|
|
93
|
+
1 states(1),states(2),Dens,specs(9))
|
|
94
|
+
Dens(1) = Dens(1) / 1.0d3
|
|
95
|
+
IF (specs(6) .EQ. 1) THEN
|
|
96
|
+
Dens(2) = Dens(2) / 1.0d3
|
|
97
|
+
END IF
|
|
98
|
+
ELSE
|
|
99
|
+
Dens(1) = states(3) / 1.0d3
|
|
100
|
+
CALL HGKeqn(specs(6),specs(7),specs(5),
|
|
101
|
+
1 states(1),states(2),Dens,specs(9))
|
|
102
|
+
END IF
|
|
103
|
+
|
|
104
|
+
CALL load(1,wprops,props)
|
|
105
|
+
|
|
106
|
+
IF (specs(6) .EQ. 1) THEN
|
|
107
|
+
tempy = Dens(1)
|
|
108
|
+
Dens(1) = Dens(2)
|
|
109
|
+
Dens(2) = tempy
|
|
110
|
+
CALL load(2,wpliq,props)
|
|
111
|
+
END IF
|
|
112
|
+
|
|
113
|
+
states(1) = TdegUS(specs(1),states(1))
|
|
114
|
+
states(2) = states(2) * fp
|
|
115
|
+
states(3) = Dens(1) / fd
|
|
116
|
+
|
|
117
|
+
IF (specs(6) .EQ. 1) THEN
|
|
118
|
+
states(4) = Dens(2) / fd
|
|
119
|
+
END IF
|
|
120
|
+
|
|
121
|
+
RETURN
|
|
122
|
+
END
|
|
123
|
+
|
|
124
|
+
************************************************************************
|
|
125
|
+
|
|
126
|
+
*** valid - Returns "TRUE" if unit and equation specifications
|
|
127
|
+
* are valid and input state conditions fall within
|
|
128
|
+
* the HGK equation's region of validity;
|
|
129
|
+
* returns "FALSE" otherwise.
|
|
130
|
+
|
|
131
|
+
LOGICAL FUNCTION valid(it,id,ip,ih,itripl,isat,iopt,
|
|
132
|
+
1 useLVS,epseqn,Temp,Pres,Dens)
|
|
133
|
+
|
|
134
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
135
|
+
|
|
136
|
+
INTEGER useLVS, epseqn
|
|
137
|
+
LOGICAL valspc, valTD, valTP
|
|
138
|
+
|
|
139
|
+
COMMON /tolers/ TTOL, PTOL, DTOL, XTOL, EXPTOL, FPTOL
|
|
140
|
+
COMMON /units/ ft, fd, fvd, fvk, fs, fp, fh, fst, fc
|
|
141
|
+
COMMON /crits/ Tc, rhoC, Pc, Pcon, Ucon, Scon, dPcon
|
|
142
|
+
COMMON /tpoint/ Utr, Str, Htr, Atr, Gtr,
|
|
143
|
+
1 Ttr, Ptripl, Dltrip, Dvtrip
|
|
144
|
+
COMMON /HGKbnd/ Ttop, Tbtm, Ptop, Pbtm, Dtop, Dbtm
|
|
145
|
+
COMMON /liqice/ sDli1, sPli1, sDli37, sPli37, sDIB30,
|
|
146
|
+
1 Tli13, Pli13, Dli13, TnIB30, DnIB30
|
|
147
|
+
|
|
148
|
+
SAVE
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
*** ensure validity of input specifications
|
|
152
|
+
IF (.NOT. valspc(it,id,ip,ih,itripl,isat,iopt,
|
|
153
|
+
1 useLVS,epseqn)) THEN
|
|
154
|
+
valid = .FALSE.
|
|
155
|
+
RETURN
|
|
156
|
+
END IF
|
|
157
|
+
|
|
158
|
+
*** convert to degC, bars, g/cm3 ***
|
|
159
|
+
T = TdegK(it,Temp) - 273.15d0
|
|
160
|
+
D = Dens * fd
|
|
161
|
+
P = Pres / fp * 1.0d1
|
|
162
|
+
Ttripl = Ttr - 273.15d0
|
|
163
|
+
Tcrit = Tc - 273.15d0
|
|
164
|
+
Pcrit = Pc * 1.0d1
|
|
165
|
+
|
|
166
|
+
IF (isat .EQ. 0) THEN
|
|
167
|
+
IF (iopt .EQ. 1) THEN
|
|
168
|
+
valid = valTD(T,D,isat,epseqn)
|
|
169
|
+
ELSE
|
|
170
|
+
valid = valTP(T,P)
|
|
171
|
+
END IF
|
|
172
|
+
ELSE
|
|
173
|
+
IF (iopt .EQ. 1) THEN
|
|
174
|
+
valid = ((T+FPTOL .GE. Ttripl) .AND.
|
|
175
|
+
1 (T-FPTOL .LE. Tcrit))
|
|
176
|
+
ELSE
|
|
177
|
+
valid = ((P+FPTOL .GE. Ptripl) .AND.
|
|
178
|
+
1 (P-FPTOL .LE. Pcrit))
|
|
179
|
+
END IF
|
|
180
|
+
END IF
|
|
181
|
+
|
|
182
|
+
RETURN
|
|
183
|
+
END
|
|
184
|
+
|
|
185
|
+
*****************************************************************
|
|
186
|
+
|
|
187
|
+
*** valspc - Returns "TRUE" if it, id, ip, ih, itripl, isat, iopt,
|
|
188
|
+
* useLVS, and epseqn values all define valid input;
|
|
189
|
+
* returns "FALSE" otherwise.
|
|
190
|
+
|
|
191
|
+
LOGICAL FUNCTION valspc(it,id,ip,ih,itripl,isat,iopt,
|
|
192
|
+
1 useLVS,epseqn)
|
|
193
|
+
|
|
194
|
+
INTEGER useLVS, epseqn
|
|
195
|
+
|
|
196
|
+
SAVE
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
valspc = (1 .LE. it) .AND. (it .LE. 4) .AND.
|
|
200
|
+
1 (1 .LE. id) .AND. (id .LE. 4) .AND.
|
|
201
|
+
2 (1 .LE. ip) .AND. (ip .LE. 5) .AND.
|
|
202
|
+
3 (1 .LE. ih) .AND. (ih .LE. 6) .AND.
|
|
203
|
+
4 (0 .LE. itripl) .AND. (itripl .LE. 1) .AND.
|
|
204
|
+
5 (0 .LE. isat) .AND. (isat .LE. 1) .AND.
|
|
205
|
+
6 (1 .LE. iopt) .AND. (iopt .LE. 2) .AND.
|
|
206
|
+
7 (0 .LE. useLVS) .AND. (useLVS .LE. 1) .AND.
|
|
207
|
+
8 (1 .LE. epseqn) .AND. (epseqn .LE. 5)
|
|
208
|
+
|
|
209
|
+
RETURN
|
|
210
|
+
END
|
|
211
|
+
|
|
212
|
+
*****************************************************************
|
|
213
|
+
|
|
214
|
+
*** valTD - Returns "TRUE" if T-D defines liquid or vapor H2O
|
|
215
|
+
* within validity limits of the HGK equation of state;
|
|
216
|
+
* returns "FALSE" otherwise.
|
|
217
|
+
|
|
218
|
+
LOGICAL FUNCTION valTD(T,D,isat,epseqn)
|
|
219
|
+
|
|
220
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
221
|
+
|
|
222
|
+
INTEGER epseqn
|
|
223
|
+
|
|
224
|
+
COMMON /tolers/ TTOL, PTOL, DTOL, XTOL, EXPTOL, FPTOL
|
|
225
|
+
COMMON /aconst/ wm, gascon, tz, aa, zb, dzb, yb, uref, sref
|
|
226
|
+
COMMON /RTcurr/ rt
|
|
227
|
+
COMMON /crits/ Tc, rhoC, Pc, Pcon, Ucon, Scon, dPcon
|
|
228
|
+
COMMON /tpoint/ Utr, Str, Htr, Atr, Gtr,
|
|
229
|
+
1 Ttr, Ptripl, Dltrip, Dvtrip
|
|
230
|
+
COMMON /HGKbnd/ Ttop, Tbtm, Ptop, Pbtm, Dtop, Dbtm
|
|
231
|
+
COMMON /liqice/ sDli1, sPli1, sDli37, sPli37, sDIB30,
|
|
232
|
+
1 Tli13, Pli13, Dli13, TnIB30, DnIB30
|
|
233
|
+
COMMON /coefs/ a(20), q(20), x(11)
|
|
234
|
+
COMMON /satur/ Dliq, Dvap, DH2O, iphase
|
|
235
|
+
|
|
236
|
+
SAVE
|
|
237
|
+
|
|
238
|
+
EQUIVALENCE (TmnLVS, x(1))
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
IF ((T-FPTOL .GT. Ttop) .OR. (T+FPTOL .LT. Tbtm) .OR.
|
|
242
|
+
1 (D-FPTOL .GT. Dtop) .OR. (D+FPTOL .LT. Dbtm)) THEN
|
|
243
|
+
valTD = .FALSE.
|
|
244
|
+
RETURN
|
|
245
|
+
END IF
|
|
246
|
+
|
|
247
|
+
Tcrit = Tc - 273.15d0
|
|
248
|
+
Ttripl = Ttr - 273.15d0
|
|
249
|
+
|
|
250
|
+
IF ((T+FPTOL .GE. Tcrit) .OR.
|
|
251
|
+
1 ((T .GE. TnIB30) .AND. (D .GE. Dltrip))) THEN
|
|
252
|
+
Dlimit = sDIB30 * (T-TnIB30) + Dtop
|
|
253
|
+
valTD = (D-FPTOL .LE. Dlimit)
|
|
254
|
+
ELSE
|
|
255
|
+
IF (D-FPTOL .LE. Dltrip) THEN
|
|
256
|
+
IF (T .GE. Ttripl) THEN
|
|
257
|
+
valTD = .TRUE.
|
|
258
|
+
Tk = T + 273.15d0
|
|
259
|
+
IF (Tk .LT. TmnLVS) THEN
|
|
260
|
+
rt = gascon * Tk
|
|
261
|
+
CALL pcorr(0,Tk,Ps,Dl,Dv,epseqn)
|
|
262
|
+
ELSE
|
|
263
|
+
istemp = 1
|
|
264
|
+
DH2O = 0.0d0
|
|
265
|
+
P = Pfind(istemp,Tk,DH2O)
|
|
266
|
+
CALL denLVS(istemp,Tk,P)
|
|
267
|
+
Dv = Dvap / 1.0d3
|
|
268
|
+
Dl = Dliq / 1.0d3
|
|
269
|
+
END IF
|
|
270
|
+
IF ((D .GE. Dv) .AND. (D. LE. Dl)) THEN
|
|
271
|
+
isat = 1
|
|
272
|
+
END IF
|
|
273
|
+
ELSE
|
|
274
|
+
P = Psublm(T)
|
|
275
|
+
PMPa = P / 1.0d1
|
|
276
|
+
Tk = T + 273.15d0
|
|
277
|
+
Dguess = PMPa / Tk / 0.4d0
|
|
278
|
+
rt = gascon * Tk
|
|
279
|
+
CALL bb(Tk)
|
|
280
|
+
CALL denHGK(Dsublm,PMPa,Dguess,Tk,dPdD)
|
|
281
|
+
valTD = (D-FPTOL .LE. Dsublm)
|
|
282
|
+
END IF
|
|
283
|
+
ELSE
|
|
284
|
+
IF (D .LE. Dli13) THEN
|
|
285
|
+
Dlimit = sDli1 * (T-Tli13) + Dli13
|
|
286
|
+
valTD = (D+FPTOL .GE. Dlimit)
|
|
287
|
+
ELSE
|
|
288
|
+
Dlimit = sDli37 * (T-Tli13) + Dli13
|
|
289
|
+
valTD = (D-FPTOL .LE. Dlimit)
|
|
290
|
+
END IF
|
|
291
|
+
END IF
|
|
292
|
+
END IF
|
|
293
|
+
|
|
294
|
+
RETURN
|
|
295
|
+
END
|
|
296
|
+
|
|
297
|
+
*****************************************************************
|
|
298
|
+
|
|
299
|
+
*** valTP - Returns "TRUE" if T-P defines liquid or vapor H2O
|
|
300
|
+
* within validity limits of the HGK equation of state;
|
|
301
|
+
* returns "FALSE" otherwise.
|
|
302
|
+
|
|
303
|
+
LOGICAL FUNCTION valTP(T,P)
|
|
304
|
+
|
|
305
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
306
|
+
|
|
307
|
+
COMMON /tolers/ TTOL, PTOL, DTOL, XTOL, EXPTOL, FPTOL
|
|
308
|
+
COMMON /crits/ Tcrit, rhoC, Pc, Pcon, Ucon, Scon, dPcon
|
|
309
|
+
COMMON /tpoint/ Utr, Str, Htr, Atr, Gtr,
|
|
310
|
+
1 Ttr, Ptripl, Dltrip, Dvtrip
|
|
311
|
+
COMMON /HGKbnd/ Ttop, Tbtm, Ptop, Pbtm, Dtop, Dbtm
|
|
312
|
+
COMMON /liqice/ sDli1, sPli1, sDli37, sPli37, sDIB30,
|
|
313
|
+
1 Tli13, Pli13, Dli13, TnIB30, DnIB30
|
|
314
|
+
|
|
315
|
+
SAVE
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
IF ((T-FPTOL .GT. Ttop) .OR. (T+FPTOL .LT. Tbtm) .OR.
|
|
319
|
+
1 (P-FPTOL .GT. Ptop) .OR. (P+FPTOL .LT. Pbtm)) THEN
|
|
320
|
+
valTP = .FALSE.
|
|
321
|
+
RETURN
|
|
322
|
+
ELSE
|
|
323
|
+
valTP = .TRUE.
|
|
324
|
+
END IF
|
|
325
|
+
|
|
326
|
+
IF (P .GE. Pli13) THEN
|
|
327
|
+
Plimit = sPli37 * (T-Tli13) + Pli13
|
|
328
|
+
valTP = (P-FPTOL .LE. Plimit)
|
|
329
|
+
ELSE
|
|
330
|
+
IF (P .GE. Ptripl) THEN
|
|
331
|
+
Plimit = sPli1 * (T-Tli13) + Pli13
|
|
332
|
+
valTP = (P+FPTOL .GE. Plimit)
|
|
333
|
+
ELSE
|
|
334
|
+
Psubl = Psublm(T)
|
|
335
|
+
valTP = (P-FPTOL .LE. Psubl)
|
|
336
|
+
END IF
|
|
337
|
+
END IF
|
|
338
|
+
|
|
339
|
+
RETURN
|
|
340
|
+
END
|
|
341
|
+
|
|
342
|
+
*****************************************************************
|
|
343
|
+
|
|
344
|
+
*** Psublm - Returns Psublimation(T) computed from the
|
|
345
|
+
* equation given by Washburn (1924): Monthly
|
|
346
|
+
* Weather Rev., v.52, pp.488-490.
|
|
347
|
+
|
|
348
|
+
DOUBLE PRECISION FUNCTION Psublm(Temp)
|
|
349
|
+
|
|
350
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
351
|
+
|
|
352
|
+
SAVE
|
|
353
|
+
|
|
354
|
+
|
|
355
|
+
T = Temp + 2.731d2
|
|
356
|
+
|
|
357
|
+
PmmHg = power(1.0d1, (-2.4455646d3/T + 8.2312d0*DLOG10(T) -
|
|
358
|
+
1 1.677006d-2*T + 1.20514d-5*T*T - 6.757169d0))
|
|
359
|
+
|
|
360
|
+
*** convert mmHg to bars ***
|
|
361
|
+
Psublm = PmmHg * 1.33322d-3
|
|
362
|
+
|
|
363
|
+
RETURN
|
|
364
|
+
END
|
|
365
|
+
|
|
366
|
+
************************************************************************
|
|
367
|
+
|
|
368
|
+
*** HGKcon - Constant parameters for the H2O equation of state
|
|
369
|
+
* given by Haar, Gallagher, & Kell (1984):
|
|
370
|
+
* bp, bq = b(j), B(j) from Table A.1, p.272
|
|
371
|
+
* g1, g2, gf = alpha, beta, gamma from eq (A.2), p.272
|
|
372
|
+
* g, ii, jj = g(i), k(i), l(i) from eq (A.5), p.272.
|
|
373
|
+
* Note that tz < tcHGK.
|
|
374
|
+
* Tolerence limits required in various real & inexact
|
|
375
|
+
* comparisons are set and stored in COMMON /tolers/.
|
|
376
|
+
|
|
377
|
+
|
|
378
|
+
BLOCK DATA HGKcon
|
|
379
|
+
|
|
380
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
381
|
+
|
|
382
|
+
COMMON /aconst/ wm, gascon, tz, aa, zb, dzb, yb, uref, sref
|
|
383
|
+
COMMON /nconst/ g(40), ii(40), jj(40), nc
|
|
384
|
+
COMMON /ellcon/ g1, g2, gf, b1, b2, b1t, b2t, b1tt, b2tt
|
|
385
|
+
COMMON /bconst/ bp(10), bq(10)
|
|
386
|
+
COMMON /addcon/ atz(4), adz(4), aat(4), aad(4)
|
|
387
|
+
COMMON /HGKcrt/ tcHGK, dcHGK, pcHGK
|
|
388
|
+
COMMON /tolers/ TTOL, PTOL, DTOL, XTOL, EXPTOL, FPTOL
|
|
389
|
+
COMMON /HGKbnd/ Ttop, Tbtm, Ptop, Pbtm, Dtop, Dbtm
|
|
390
|
+
COMMON /liqice/ sDli1, sPli1, sDli37, sPli37, sDIB30,
|
|
391
|
+
1 Tli13, Pli13, Dli13, TnIB30, DnIB30
|
|
392
|
+
COMMON /tpoint/ Utripl, Stripl, Htripl, Atripl, Gtripl,
|
|
393
|
+
1 Ttripl, Ptripl, Dltrip, Dvtrip
|
|
394
|
+
|
|
395
|
+
SAVE
|
|
396
|
+
|
|
397
|
+
DATA Ttripl, Ptripl, Dltrip, Dvtrip
|
|
398
|
+
1 / 2.7316d2,
|
|
399
|
+
2 0.611731677193563186622762580414d-2,
|
|
400
|
+
3 0.999778211030936587977889295063d0,
|
|
401
|
+
4 0.485467583448287303988319166423d-5 /
|
|
402
|
+
|
|
403
|
+
DATA Ttop, Tbtm, Ptop, Pbtm, Dtop, Dbtm
|
|
404
|
+
1 / 2.25d3, -2.0d1, 3.0d4, 1.0d-3,
|
|
405
|
+
2 0.138074666423686955066817336896d1,
|
|
406
|
+
3 0.858745555396173972667420987465d-7 /
|
|
407
|
+
|
|
408
|
+
DATA sDli1, sPli1, sDli37, sPli37, sDIB30,
|
|
409
|
+
1 Tli13, Pli13, Dli13, TnIB30, DnIB30
|
|
410
|
+
2 / -0.584797401732178547634910059828d-2,
|
|
411
|
+
3 -0.138180804975562958027981345769d3,
|
|
412
|
+
4 0.183244000000000000000000000007d-2,
|
|
413
|
+
5 0.174536874999999999999999999995d3,
|
|
414
|
+
6 -0.168375439429928741092636579574d-3,
|
|
415
|
+
7 -0.15d2,
|
|
416
|
+
8 0.20741d4,
|
|
417
|
+
9 0.108755631570602617113573577945d1,
|
|
418
|
+
1 0.145d3,
|
|
419
|
+
1 0.102631640581853166397515716306d1 /
|
|
420
|
+
|
|
421
|
+
|
|
422
|
+
DATA TTOL, PTOL, DTOL, XTOL, EXPTOL, FPTOL
|
|
423
|
+
1 / 1.0d-6, 1.0d-6, 1.0d-9, 1.0d-5, -673.5d0, 1.0d-7 /
|
|
424
|
+
|
|
425
|
+
DATA tcHGK, dcHGK, pcHGK / .647126d3, .322d3, .22055d2 /
|
|
426
|
+
|
|
427
|
+
DATA atz /.64d3, .64d3, .6416d3, .27d3/
|
|
428
|
+
DATA adz /.319d0, .319d0, .319d0, .155d1/
|
|
429
|
+
DATA aat /.2d5, .2d5, .4d5, .25d2/
|
|
430
|
+
DATA aad /.34d2, .4d2, .3d2, .105d4/
|
|
431
|
+
|
|
432
|
+
DATA wm, gascon, tz, aa, uref, sref
|
|
433
|
+
1 / .1801520000d2, .46152200d0, .647073d3, .1d1,
|
|
434
|
+
2 -.4328455039d4, .76180802d1 /
|
|
435
|
+
|
|
436
|
+
DATA g1, g2, gf /.11d2, .44333333333333d2, .35d1/
|
|
437
|
+
|
|
438
|
+
DATA bp / .7478629d0, -.3540782d0, 2*.0d0, .7159876d-2,
|
|
439
|
+
1 .0d0, -.3528426d-2, 3*.0d0/
|
|
440
|
+
|
|
441
|
+
DATA bq / .11278334d1, .0d0, -.5944001d0, -.5010996d1, .0d0,
|
|
442
|
+
1 .63684256d0, 4*.0d0/
|
|
443
|
+
|
|
444
|
+
DATA nc / 36 /
|
|
445
|
+
|
|
446
|
+
DATA g /-.53062968529023d3, .22744901424408d4, .78779333020687d3
|
|
447
|
+
1, -.69830527374994d2, .17863832875422d5, -.39514731563338d5
|
|
448
|
+
2, .33803884280753d5, -.13855050202703d5, -.25637436613260d6
|
|
449
|
+
3, .48212575981415d6, -.34183016969660d6, .12223156417448d6
|
|
450
|
+
4, .11797433655832d7, -.21734810110373d7, .10829952168620d7
|
|
451
|
+
5, -.25441998064049d6, -.31377774947767d7, .52911910757704d7
|
|
452
|
+
6, -.13802577177877d7, -.25109914369001d6, .46561826115608d7
|
|
453
|
+
7, -.72752773275387d7, .41774246148294d6, .14016358244614d7
|
|
454
|
+
8, -.31555231392127d7, .47929666384584d7, .40912664781209d6
|
|
455
|
+
9, -.13626369388386d7, .69625220862664d6, -.10834900096447d7
|
|
456
|
+
a, -.22722827401688d6, .38365486000660d6, .68833257944332d4
|
|
457
|
+
b, .21757245522644d5, -.26627944829770d4, -.70730418082074d5
|
|
458
|
+
c, -.22500000000000d0, -.16800000000000d1
|
|
459
|
+
d, .5500000000000d-1, -.93000000000000d2/
|
|
460
|
+
|
|
461
|
+
DATA ii / 4*0, 4*1, 4*2, 4*3, 4*4, 4*5, 4*6, 4*8, 2*2, 0, 4,
|
|
462
|
+
1 3*2, 4/
|
|
463
|
+
|
|
464
|
+
DATA jj / 2, 3, 5, 7, 2, 3, 5, 7, 2, 3, 5, 7, 2, 3, 5, 7,
|
|
465
|
+
1 2, 3, 5, 7, 2, 3, 5, 7, 2, 3, 5, 7, 2, 3, 5, 7,
|
|
466
|
+
2 1, 4, 4, 4, 0, 2, 0, 0/
|
|
467
|
+
|
|
468
|
+
END
|
|
469
|
+
|
|
470
|
+
*********************************************************************
|
|
471
|
+
|
|
472
|
+
*** LVScon - Constant parameters for the H2O critical region equation
|
|
473
|
+
* of state given by Levelt Sengers, Kamgar-Parsi, Balfour,
|
|
474
|
+
* & Sengers (1983).
|
|
475
|
+
|
|
476
|
+
BLOCK DATA LVScon
|
|
477
|
+
|
|
478
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
479
|
+
|
|
480
|
+
COMMON /crits/ Tc, rhoC, Pc, Pcon, Ucon, Scon, dPcon
|
|
481
|
+
COMMON /coefs/ a(20), q(20), x(11)
|
|
482
|
+
|
|
483
|
+
SAVE
|
|
484
|
+
|
|
485
|
+
DATA Tc, rhoC, Pc, Pcon, Ucon, Scon, dPcon
|
|
486
|
+
1 / 647.067d0, 322.778d0, 22.046d0,
|
|
487
|
+
2 0.034070660379837018423130834983d0, 22046.0d0,
|
|
488
|
+
3 0.034070660379837018423130834983d3,
|
|
489
|
+
4 0.000000327018783663660700780197d0 /
|
|
490
|
+
|
|
491
|
+
DATA a / -0.017762d0, 5.238000d0, 0.000000d0, -2.549150d1,
|
|
492
|
+
1 6.844500d0, 0.325000d0, 1.440300d0, 0.000000d0,
|
|
493
|
+
2 1.375700d0, 2.366660d1, 4.820000d0, 0.294200d0,
|
|
494
|
+
3 -1.123260d1, -2.265470d1, -1.788760d1, -4.933200d0,
|
|
495
|
+
4 1.109430391161019373812391218008d0,
|
|
496
|
+
5 -1.981395981400671095301629432211d0,
|
|
497
|
+
6 0.246912528778663959151808173743d0,
|
|
498
|
+
7 -0.843411332867484343974055795059d0 /
|
|
499
|
+
|
|
500
|
+
DATA q / -0.006000d0, -0.003000d0, 0.000000d0, 6.470670d2,
|
|
501
|
+
1 3.227780d2, 2.204600d1, 0.267000d0, -1.600000d0,
|
|
502
|
+
2 0.491775937675717720291497417773d0, 0.108500d0,
|
|
503
|
+
3 0.586534703230779473334597524774d0,
|
|
504
|
+
4 -1.026243389120214352553706598564d0,
|
|
505
|
+
5 0.612903225806451612903225804745d0, 0.500000d0,
|
|
506
|
+
6 -0.391500d0, 0.825000d0, 0.741500d0,
|
|
507
|
+
7 0.103245882826119154987166286332d0,
|
|
508
|
+
8 0.160322434159191991394857495360d0,
|
|
509
|
+
9 -0.169859514687100893997445721324d0 /
|
|
510
|
+
|
|
511
|
+
DATA x / 6.430000d2, 6.453000d2, 6.950000d2,
|
|
512
|
+
1 1.997750d2, 4.200400d2,
|
|
513
|
+
2 2.09945691135940719075293945960d1,
|
|
514
|
+
3 2.15814057875264119875397458907d1,
|
|
515
|
+
4 3.0135d1, 4.0484d1,
|
|
516
|
+
5 .175777517046267847932127026995d0,
|
|
517
|
+
6 .380293646126229135059562456934d0 /
|
|
518
|
+
|
|
519
|
+
|
|
520
|
+
* EQUIVALENCE (cc, a(1) ), (pointA, q(1) ), (Tmin1, x(1)),
|
|
521
|
+
* 1 (p3, a(2) ), (pointB, q(2) ), (Tmin2, x(2)),
|
|
522
|
+
* 2 (delroc, a(3) ), (delpc, q(3) ), (Tmax, x(3)),
|
|
523
|
+
* 3 (p2, a(4) ), (Tc, q(4) ), (Dmin, x(4)),
|
|
524
|
+
* 4 (p1, a(5) ), (rhoc, q(5) ), (Dmax, x(5)),
|
|
525
|
+
* 5 (beta, a(6) ), (Pc, q(6) ), (Pmin1, x(6)),
|
|
526
|
+
* 6 (xko, a(7) ), (dPcdTc, q(7) ), (Pmin2, x(7)),
|
|
527
|
+
* 7 (delTc, a(8) ), (slopdi, q(8) ), (Pmax1, x(8)),
|
|
528
|
+
* 8 (besq, a(9) ), (p11, q(9) ), (Pmax2, x(9)),
|
|
529
|
+
* 9 (aa, a(10)), (alpha, q(10)), (sl1, x(10)),
|
|
530
|
+
* 0 (delta, a(11)), (p00, q(11)), (sl2, x(11)),
|
|
531
|
+
* 1 (k1, a(12)), (p20, q(12)),
|
|
532
|
+
* 2 (muc, a(13)), (p40, q(13)),
|
|
533
|
+
* 3 (mu1, a(14)), (deli, q(14)),
|
|
534
|
+
* 4 (mu2, a(15)), (alh1, q(15)),
|
|
535
|
+
* 5 (mu3, a(16)), (beti, q(16)),
|
|
536
|
+
* 6 (s00, a(17)), (gami, q(17)),
|
|
537
|
+
* 7 (s20, a(18)), (p01, q(18)),
|
|
538
|
+
* 8 (s01, a(19)), (p21, q(19)),
|
|
539
|
+
* 9 (s21, a(20)), (p41, q(20))
|
|
540
|
+
|
|
541
|
+
END
|
|
542
|
+
|
|
543
|
+
*******************************************************************
|
|
544
|
+
|
|
545
|
+
*** unit - Sets internal parameters according to user-specified
|
|
546
|
+
* choice of units. Internal program units are degK(T),
|
|
547
|
+
* and gm/cm**3(D); all other properties are computed in
|
|
548
|
+
* dimensionless form and dimensioned at output time.
|
|
549
|
+
* NOTE: conversion factors for j/g ---> cal/(g,mole)
|
|
550
|
+
* (ffh (4 & 5)) are consistent with those given in
|
|
551
|
+
* Table 1, Helgeson & Kirkham (1974a) for thermal calories,
|
|
552
|
+
* and differ slightly with those given by Haar et al (1984)
|
|
553
|
+
* for international calories.
|
|
554
|
+
|
|
555
|
+
SUBROUTINE unit(it,id,ip,ih,itripl)
|
|
556
|
+
|
|
557
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
558
|
+
|
|
559
|
+
DOUBLE PRECISION fft(4), ffd(4), ffvd(4), ffvk(4),
|
|
560
|
+
1 ffs(4), ffp(5), ffh(6),
|
|
561
|
+
2 ffst(4), ffcd(4), ffch(6)
|
|
562
|
+
|
|
563
|
+
COMMON /units/ ft, fd, fvd, fvk, fs, fp, fh, fst, fc
|
|
564
|
+
|
|
565
|
+
SAVE
|
|
566
|
+
|
|
567
|
+
DATA fft /1.0d0, 1.0d0, 0.555555556d0, 0.555555556d0 /
|
|
568
|
+
DATA ffd /1.0d-3, 1.0d0, 1.80152d-2, 1.6018d-2/
|
|
569
|
+
DATA ffvd /1.0d0, 1.0d1, 0.555086816d0, 0.671968969d0 /
|
|
570
|
+
DATA ffvk /1.0d0, 1.0d4, 1.0d4, 1.076391042d1 /
|
|
571
|
+
DATA ffs /1.0d0, 1.0d2, 1.0d2, 3.280833d0 /
|
|
572
|
+
DATA ffp /1.0d0, 1.0d1, 9.869232667d0, 1.45038d2, 1.01971d1/
|
|
573
|
+
DATA ffh /1.0d0, 1.0d0, 1.80152d1, 2.3901d-1,
|
|
574
|
+
1 4.305816d0, 4.299226d-1/
|
|
575
|
+
DATA ffst /1.0d0, 1.0d3, 0.555086816d2, 0.2205061d1 /
|
|
576
|
+
DATA ffcd /1.0d0, 1.0d-2, 1.0d-2, 0.3048d0 /
|
|
577
|
+
DATA ffch /1.0d-3, 1.0d0, 1.0d0, 0.23901d0,
|
|
578
|
+
1 0.23901d0, 0.947244d-3 /
|
|
579
|
+
|
|
580
|
+
|
|
581
|
+
ft = fft(it)
|
|
582
|
+
fd = ffd(id)
|
|
583
|
+
fvd = ffvd(id)
|
|
584
|
+
fvk = ffvk(id)
|
|
585
|
+
fs = ffs(id)
|
|
586
|
+
fp = ffp(ip)
|
|
587
|
+
fh = ffh(ih)
|
|
588
|
+
fst = ffst(id)
|
|
589
|
+
fc = ffcd(id) * ffch(ih)
|
|
590
|
+
|
|
591
|
+
IF (itripl .EQ. 1) CALL tpset
|
|
592
|
+
|
|
593
|
+
RETURN
|
|
594
|
+
|
|
595
|
+
END
|
|
596
|
+
|
|
597
|
+
***********************************************************************
|
|
598
|
+
|
|
599
|
+
*** crtreg - Returns "TRUE" if input state conditions fall within
|
|
600
|
+
* the critical region of H2O; otherwise returns "FALSE".
|
|
601
|
+
* T, P, D, input in user-specified units, are returned in
|
|
602
|
+
* degK, MPa, kg/m3.
|
|
603
|
+
|
|
604
|
+
LOGICAL FUNCTION crtreg(isat,iopt,it,T,P,D)
|
|
605
|
+
|
|
606
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
607
|
+
|
|
608
|
+
LOGICAL llim, ulim
|
|
609
|
+
|
|
610
|
+
COMMON /crits/ Tc, rhoc, Pc, Pcon, Ucon, Scon, dPcon
|
|
611
|
+
COMMON /coefs/ a(20), q(20), x(11)
|
|
612
|
+
COMMON /units/ ft, fd, fvd, fvk, fs, fp, fh, fst, fc
|
|
613
|
+
|
|
614
|
+
SAVE
|
|
615
|
+
|
|
616
|
+
EQUIVALENCE (Tmin1, x(1)), (Tmin2, x(2)), (Tmax, x(3)),
|
|
617
|
+
1 (Dmin, x(4)), (Dmax, x(5)),
|
|
618
|
+
2 (Pbase1, x(6)), (Pbase2,x(7)),
|
|
619
|
+
3 (PTmins, x(10)), (PTmaxs,x(11))
|
|
620
|
+
|
|
621
|
+
|
|
622
|
+
T = TdegK(it,T)
|
|
623
|
+
IF (isat .EQ. 0) THEN
|
|
624
|
+
IF (iopt .EQ. 1) THEN
|
|
625
|
+
D = D * fd * 1.0d3
|
|
626
|
+
crtreg = ((T .GE. Tmin1) .AND. (T .LE. Tmax) .AND.
|
|
627
|
+
1 (D .GE. Dmin) .AND. (D .LE. Dmax))
|
|
628
|
+
ELSE
|
|
629
|
+
P = P / fp
|
|
630
|
+
IF ((T .LT. Tmin1) .OR. (T .GT. Tmax)) THEN
|
|
631
|
+
crtreg = .FALSE.
|
|
632
|
+
ELSE
|
|
633
|
+
Pmin = Pbase1 + PTmins * (T - Tmin1)
|
|
634
|
+
Pmax = Pbase2 + PTmaxs * (T - Tmin2)
|
|
635
|
+
llim = (P .GE. Pmin)
|
|
636
|
+
ulim = (P .LE. Pmax)
|
|
637
|
+
IF (llim .AND. ulim) THEN
|
|
638
|
+
crtreg = .TRUE.
|
|
639
|
+
ELSE
|
|
640
|
+
IF (llim .AND. (T .LE. Tmin2)) THEN
|
|
641
|
+
isat1 = 1
|
|
642
|
+
ddummy = 0.0d0
|
|
643
|
+
Pstest = Pfind(isat1,T,ddummy)
|
|
644
|
+
crtreg = (P .LE. Pstest)
|
|
645
|
+
ELSE
|
|
646
|
+
crtreg = .FALSE.
|
|
647
|
+
END IF
|
|
648
|
+
END IF
|
|
649
|
+
END IF
|
|
650
|
+
END IF
|
|
651
|
+
ELSE
|
|
652
|
+
IF (iopt .EQ. 1) THEN
|
|
653
|
+
crtreg = (T .GE. Tmin1)
|
|
654
|
+
ELSE
|
|
655
|
+
P = P / fp
|
|
656
|
+
crtreg = (P .GE. Pbase1)
|
|
657
|
+
END IF
|
|
658
|
+
END IF
|
|
659
|
+
|
|
660
|
+
RETURN
|
|
661
|
+
END
|
|
662
|
+
|
|
663
|
+
*********************************************************************
|
|
664
|
+
|
|
665
|
+
*** HGKeqn - Computes thermodynamic and transport properties of
|
|
666
|
+
* of H2O from the equation of state given by
|
|
667
|
+
* Haar, Gallagher, & Kell (1984).
|
|
668
|
+
|
|
669
|
+
SUBROUTINE HGKeqn(isat,iopt,itripl,Temp,Pres,Dens,epseqn)
|
|
670
|
+
|
|
671
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
672
|
+
|
|
673
|
+
PARAMETER (NPROP = 23)
|
|
674
|
+
|
|
675
|
+
INTEGER epseqn
|
|
676
|
+
DOUBLE PRECISION Dens(2), wprops(NPROP), wpliq(NPROP)
|
|
677
|
+
|
|
678
|
+
COMMON /aconst/ wm, gascon, tz, aa, zb, dzb, yb, uref, sref
|
|
679
|
+
COMMON /wpvals/ wprops, wpliq
|
|
680
|
+
COMMON /RTcurr/ rt
|
|
681
|
+
|
|
682
|
+
SAVE
|
|
683
|
+
|
|
684
|
+
rt = gascon * Temp
|
|
685
|
+
|
|
686
|
+
CALL HGKsat(isat,iopt,itripl,Temp,Pres,Dens,epseqn)
|
|
687
|
+
|
|
688
|
+
IF (isat .EQ. 0) THEN
|
|
689
|
+
CALL bb(Temp)
|
|
690
|
+
CALL calcv3(iopt,itripl,Temp,Pres,Dens(1),epseqn)
|
|
691
|
+
CALL thmHGK(Dens(1),Temp)
|
|
692
|
+
CALL dimHGK(isat,itripl,Temp,Pres,Dens(1),epseqn)
|
|
693
|
+
ELSE
|
|
694
|
+
DO 10 i=1,NPROP
|
|
695
|
+
10 wpliq(i) = wprops(i)
|
|
696
|
+
CALL dimHGK(2,itripl,Temp,Pres,Dens(2),epseqn)
|
|
697
|
+
END IF
|
|
698
|
+
|
|
699
|
+
RETURN
|
|
700
|
+
END
|
|
701
|
+
|
|
702
|
+
*****************************************************************
|
|
703
|
+
|
|
704
|
+
*** HGKsat - If isat=1, computes Psat(T) or Tsat(P) (iopt=1,2),
|
|
705
|
+
* liquid and vapor densities, and associated
|
|
706
|
+
* thermodynamic and transport properties.
|
|
707
|
+
* If isat=0, checks whether T-D or T-P (iopt=1,2)
|
|
708
|
+
* falls on or within TOL of the liquid-vapor
|
|
709
|
+
* surface; if so, sets isat <- 1 and computes
|
|
710
|
+
* properties.
|
|
711
|
+
|
|
712
|
+
SUBROUTINE HGKsat(isat,iopt,itripl,Temp,Pres,Dens,epseqn)
|
|
713
|
+
|
|
714
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
715
|
+
|
|
716
|
+
DOUBLE PRECISION Dens(2)
|
|
717
|
+
INTEGER epseqn
|
|
718
|
+
|
|
719
|
+
COMMON /tolers/ TTOL, PTOL, DTOL, XTOL, EXPTOL, FPTOL
|
|
720
|
+
COMMON /HGKcrt/ tcHGK, dcHGK, pcHGK
|
|
721
|
+
COMMON /aconst/ wm, gascon, tz, aa, zb, dzb, yb, uref, sref
|
|
722
|
+
COMMON /units/ ft, fd, fvd, fvk, fs, fp, fh, fst, fc
|
|
723
|
+
COMMON /tpoint/ Utr, Str, Htr, Atr, Gtr,
|
|
724
|
+
1 Ttripl, Ptripl, Dltrip, Dvtrip
|
|
725
|
+
COMMON /crits/ Tc, rhoC, Pc, Pcon, Ucon, Scon, dPcon
|
|
726
|
+
|
|
727
|
+
SAVE
|
|
728
|
+
|
|
729
|
+
|
|
730
|
+
IF (isat .EQ. 1) THEN
|
|
731
|
+
IF (iopt .EQ. 1) THEN
|
|
732
|
+
CALL pcorr(itripl,Temp,Pres,Dens(1),Dens(2),epseqn)
|
|
733
|
+
ELSE
|
|
734
|
+
CALL tcorr(itripl,Temp,Pres,Dens(1),Dens(2),epseqn)
|
|
735
|
+
END IF
|
|
736
|
+
ELSE
|
|
737
|
+
IF ((Temp .GT. Tc) .OR. (Temp .LT. Ttripl) .OR.
|
|
738
|
+
1 ((iopt .EQ. 2) .AND. (Pres .GT. Pc))) THEN
|
|
739
|
+
RETURN
|
|
740
|
+
ELSE
|
|
741
|
+
CALL pcorr(itripl,Temp,Ptemp,dltemp,dvtemp,epseqn)
|
|
742
|
+
IF (((iopt .EQ. 2) .AND.
|
|
743
|
+
1 (DABS(Pres-Ptemp) .LE. PTOL)) .OR.
|
|
744
|
+
2 ((iopt .EQ. 1) .AND.
|
|
745
|
+
3 ((DABS(Dens(1)-dltemp) .LE. DTOL) .OR.
|
|
746
|
+
4 (DABS(Dens(1)-dvtemp) .LE. DTOL)))) THEN
|
|
747
|
+
isat = 1
|
|
748
|
+
Pres = Ptemp
|
|
749
|
+
Dens(1) = dltemp
|
|
750
|
+
Dens(2) = dvtemp
|
|
751
|
+
END IF
|
|
752
|
+
END IF
|
|
753
|
+
END IF
|
|
754
|
+
|
|
755
|
+
RETURN
|
|
756
|
+
END
|
|
757
|
+
|
|
758
|
+
************************************************************************
|
|
759
|
+
|
|
760
|
+
*** calcv3 - Compute the dependent state variable.
|
|
761
|
+
|
|
762
|
+
SUBROUTINE calcv3(iopt,itripl,Temp,Pres,Dens,epseqn)
|
|
763
|
+
|
|
764
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
765
|
+
|
|
766
|
+
INTEGER epseqn
|
|
767
|
+
|
|
768
|
+
COMMON /units/ ft, fd, fvd, fvk, fs, fp, fh, fst, fc
|
|
769
|
+
COMMON /qqqq/ q0, q5
|
|
770
|
+
COMMON /aconst/ wm, gascon, tz, aa, z, dz, y, uref, sref
|
|
771
|
+
COMMON /fcts/ ad, gd, sd, ud, hd, cvd, cpd, dpdt, dvdt, dpdd,
|
|
772
|
+
1 cjtt, cjth
|
|
773
|
+
COMMON /RTcurr/ rt
|
|
774
|
+
|
|
775
|
+
SAVE
|
|
776
|
+
|
|
777
|
+
|
|
778
|
+
IF (iopt .EQ. 1) THEN
|
|
779
|
+
CALL resid(Temp,Dens)
|
|
780
|
+
CALL base(Dens,Temp)
|
|
781
|
+
CALL ideal(Temp)
|
|
782
|
+
Pres = rt * Dens * z + q0
|
|
783
|
+
ELSE
|
|
784
|
+
IF (Temp .LT. tz) THEN
|
|
785
|
+
CALL pcorr(itripl,Temp,ps,dll,dvv,epseqn)
|
|
786
|
+
ELSE
|
|
787
|
+
ps = 2.0d4
|
|
788
|
+
dll = 0.0d0
|
|
789
|
+
END IF
|
|
790
|
+
IF (Pres .GT. ps) THEN
|
|
791
|
+
dguess = dll
|
|
792
|
+
ELSE
|
|
793
|
+
dguess = Pres / Temp / 0.4d0
|
|
794
|
+
END IF
|
|
795
|
+
|
|
796
|
+
CALL denHGK(Dens,Pres,dguess,Temp,dpdd)
|
|
797
|
+
CALL ideal(Temp)
|
|
798
|
+
END IF
|
|
799
|
+
|
|
800
|
+
RETURN
|
|
801
|
+
END
|
|
802
|
+
|
|
803
|
+
******************************************************************************
|
|
804
|
+
|
|
805
|
+
*** thmHGK - Computes thermodynamic functions in dimensionless
|
|
806
|
+
* units from the HGK equation of state: Helmholtz, Gibbs,
|
|
807
|
+
* internal energy, and enthalpy functions (ad, gd, ud, hd) are
|
|
808
|
+
* per RT; entropy and heat capacities (sd, cvd, cpd) are per R.
|
|
809
|
+
|
|
810
|
+
SUBROUTINE thmHGK(d,t)
|
|
811
|
+
|
|
812
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
813
|
+
|
|
814
|
+
COMMON /aconst/ wm, gascon, tz, aa, zb, dzb, y, uref, sref
|
|
815
|
+
COMMON /qqqq/ qp, qdp
|
|
816
|
+
COMMON /basef/ ab, gb, sb, ub, hb, cvb, pb, dpdtb
|
|
817
|
+
COMMON /resf/ ar, gr, sr, ur, hr, cvr, dpdtr
|
|
818
|
+
COMMON /idf/ ai, gi, si, ui, hi, cvi, cpi
|
|
819
|
+
COMMON /fcts/ ad, gd, sd, ud, hd, cvd, cpd, dpdt, dvdt, dpdd,
|
|
820
|
+
1 cjtt, cjth
|
|
821
|
+
COMMON /RTcurr/ rt
|
|
822
|
+
|
|
823
|
+
SAVE
|
|
824
|
+
|
|
825
|
+
|
|
826
|
+
z = zb + qp/rt/d
|
|
827
|
+
dpdd = rt * (zb + y * dzb) + qdp
|
|
828
|
+
ad = ab + ar + ai - uref/t + sref
|
|
829
|
+
gd = ad + z
|
|
830
|
+
ud = ub + ur + ui - uref/t
|
|
831
|
+
dpdt = rt * d * dpdtb + dpdtr
|
|
832
|
+
cvd = cvb + cvr + cvi
|
|
833
|
+
cpd = cvd + t*dpdt*dpdt/(d*d*dpdd*gascon)
|
|
834
|
+
hd = ud + z
|
|
835
|
+
sd = sb + sr + si - sref
|
|
836
|
+
dvdt = dpdt / dpdd / d / d
|
|
837
|
+
cjtt = 1.0d0 / d - t * dvdt
|
|
838
|
+
cjth = -cjtt / cpd / gascon
|
|
839
|
+
|
|
840
|
+
RETURN
|
|
841
|
+
|
|
842
|
+
END
|
|
843
|
+
|
|
844
|
+
*************************************************************************
|
|
845
|
+
|
|
846
|
+
*** bb - Computes molecular parameters b, the "excluded volume"
|
|
847
|
+
* (eq A.3), and B, the second virial coefficient (eq A.4),
|
|
848
|
+
* in cm3/g (b1,b2) and their first and second derivatives
|
|
849
|
+
* with respect to temperature (b1t,b1tt,b2t,b2tt).
|
|
850
|
+
|
|
851
|
+
SUBROUTINE bb(t)
|
|
852
|
+
|
|
853
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
854
|
+
|
|
855
|
+
DOUBLE PRECISION v(10)
|
|
856
|
+
|
|
857
|
+
COMMON /ellcon/ g1, g2, gf, b1, b2, b1t, b2t, b1tt, b2tt
|
|
858
|
+
COMMON /aconst/ wm, gascon, tz, aa, z, dz, y, uref, sref
|
|
859
|
+
COMMON /bconst/ bp(10), bq(10)
|
|
860
|
+
|
|
861
|
+
SAVE
|
|
862
|
+
|
|
863
|
+
|
|
864
|
+
v(1) = 1.0d0
|
|
865
|
+
|
|
866
|
+
DO 2 i=2,10
|
|
867
|
+
2 v(i) = v(i-1) * tz / t
|
|
868
|
+
|
|
869
|
+
b1 = bp(1) + bp(2) * DLOG(1.0 / v(2))
|
|
870
|
+
b2 = bq(1)
|
|
871
|
+
b1t = bp(2) * v(2) / tz
|
|
872
|
+
b2t = 0.0d0
|
|
873
|
+
b1tt = 0.0d0
|
|
874
|
+
b2tt = 0.0d0
|
|
875
|
+
|
|
876
|
+
DO 4 i=3,10
|
|
877
|
+
b1 = b1 + bp(i) * v(i-1)
|
|
878
|
+
b2 = b2 + bq(i) * v(i-1)
|
|
879
|
+
b1t = b1t - (i-2) * bp(i) * v(i-1) / t
|
|
880
|
+
b2t = b2t - (i-2) * bq(i) * v(i-1) / t
|
|
881
|
+
b1tt = b1tt + bp(i) * (i-2)*(i-2) * v(i-1) / t / t
|
|
882
|
+
4 b2tt = b2tt + bq(i) * (i-2)*(i-2) * v(i-1) / t / t
|
|
883
|
+
|
|
884
|
+
b1tt = b1tt - b1t / t
|
|
885
|
+
b2tt = b2tt - b2t / t
|
|
886
|
+
|
|
887
|
+
RETURN
|
|
888
|
+
|
|
889
|
+
END
|
|
890
|
+
|
|
891
|
+
***********************************************************************
|
|
892
|
+
|
|
893
|
+
*** base - Computes Abase, Gbase, Sbase, Ubase, Hbase, Cvbase
|
|
894
|
+
* -- all per RT (dimensionless) -- as well as Pbase & dP/dT
|
|
895
|
+
* -- both per (DRT) -- for the base function (ab, gb, sb, ub,
|
|
896
|
+
* hb, cvb, pb, dpdtb). See Haar, Gallagher & Kell (1979), eq(1).
|
|
897
|
+
|
|
898
|
+
|
|
899
|
+
SUBROUTINE base(d,t)
|
|
900
|
+
|
|
901
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
902
|
+
|
|
903
|
+
COMMON /ellcon/ g1, g2, gf, b1, b2, b1t, b2t, b1tt, b2tt
|
|
904
|
+
COMMON /basef/ ab, gb, sb, ub, hb, cvb, pb, dpdtb
|
|
905
|
+
COMMON /aconst/ wm, gascon, tz, a, z, dz, y, uref, sref
|
|
906
|
+
|
|
907
|
+
SAVE
|
|
908
|
+
|
|
909
|
+
|
|
910
|
+
y = .25d0 * b1 * d
|
|
911
|
+
x = 1.0d0 - y
|
|
912
|
+
z0 = (1.0d0 + g1*y + g2*y*y) / (x*x*x)
|
|
913
|
+
z = z0 + 4.0d0*y*(b2/b1 - gf)
|
|
914
|
+
dz0 = (g1 + 2.0d0*g2*y)/(x*x*x) +
|
|
915
|
+
1 3.0d0*(1.0d0 + g1*y + g2*y*y)/(x*x*x*x)
|
|
916
|
+
dz = dz0 + 4.0d0*(b2/b1 - gf)
|
|
917
|
+
|
|
918
|
+
pb = z
|
|
919
|
+
|
|
920
|
+
ab = -DLOG(x) - (g2 - 1.0d0)/x + 28.16666667d0/x/x +
|
|
921
|
+
1 4.0d0*y*(b2/b1 - gf) + 15.166666667d0 +
|
|
922
|
+
2 DLOG(d*t*gascon/.101325d0)
|
|
923
|
+
gb = ab + z
|
|
924
|
+
ub = -t*b1t*(z - 1.0d0 - d*b2)/b1 - d*t*b2t
|
|
925
|
+
sb = ub - ab
|
|
926
|
+
hb = z + ub
|
|
927
|
+
|
|
928
|
+
bb2tt = t * t * b2tt
|
|
929
|
+
cvb = 2.0d0*ub + (z0 - 1.0d0)*(((t*b1t/b1)*(t*b1t/b1)) -
|
|
930
|
+
1 t*t*b1tt/b1) - d*(bb2tt - gf*b1tt*t*t) -
|
|
931
|
+
2 (t*b1t/b1)*(t*b1t/b1)*y*dz0
|
|
932
|
+
|
|
933
|
+
dpdtb = pb/t + d*(dz*b1t/4.0d0 + b2t - b2/b1*b1t)
|
|
934
|
+
|
|
935
|
+
RETURN
|
|
936
|
+
|
|
937
|
+
END
|
|
938
|
+
|
|
939
|
+
***********************************************************************
|
|
940
|
+
|
|
941
|
+
*** resid - Computes residual contributions to pressure (q), the
|
|
942
|
+
* Helmloltz function (ar) , dP/dD (q5), the Gibbs function
|
|
943
|
+
* (gr), entropy (sr), internal energy (ur), enthalpy (hr),
|
|
944
|
+
* isochoric heat capacity (cvr), and dP/dT. The first 36
|
|
945
|
+
* terms of the residual function represent a global
|
|
946
|
+
* least-squares fit to experimental data outside the
|
|
947
|
+
* critical region, terms 37-39 affect only the immediate
|
|
948
|
+
* vicinity of the critical point, and the last term (40)
|
|
949
|
+
* contributes only in the high pressure, low temperature
|
|
950
|
+
* region.
|
|
951
|
+
|
|
952
|
+
SUBROUTINE resid(t,d)
|
|
953
|
+
|
|
954
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
955
|
+
|
|
956
|
+
DOUBLE PRECISION qr(11), qt(10), qzr(9), qzt(9)
|
|
957
|
+
|
|
958
|
+
COMMON /resf/ ar, gr, sr, ur, hr, cvr, dpdtr
|
|
959
|
+
COMMON /qqqq/ q, q5
|
|
960
|
+
COMMON /nconst/ g(40), ii(40), jj(40), n
|
|
961
|
+
COMMON /aconst/ wm, gascon, tz, aa, z, dz, y, uref, sref
|
|
962
|
+
COMMON /addcon/ atz(4), adz(4), aat(4), aad(4)
|
|
963
|
+
COMMON /RTcurr/ rt
|
|
964
|
+
COMMON /tolers/ TTOL, PTOL, DTOL, XTOL, EXPTOL, FPTOL
|
|
965
|
+
|
|
966
|
+
SAVE
|
|
967
|
+
|
|
968
|
+
EQUIVALENCE (qr(3), qzr(1)), (qt(2), qzt(1))
|
|
969
|
+
|
|
970
|
+
|
|
971
|
+
qr(1) = 0.0d0
|
|
972
|
+
q5 = 0.0d0
|
|
973
|
+
q = 0.0d0
|
|
974
|
+
ar = 0.0d0
|
|
975
|
+
dadt = 0.0d0
|
|
976
|
+
cvr = 0.0d0
|
|
977
|
+
dpdtr = 0.0d0
|
|
978
|
+
|
|
979
|
+
e = DEXP(-aa * d)
|
|
980
|
+
q10 = d * d * e
|
|
981
|
+
q20 = 1.0d0 - e
|
|
982
|
+
qr(2) = q10
|
|
983
|
+
v = tz / t
|
|
984
|
+
qt(1) = t / tz
|
|
985
|
+
|
|
986
|
+
DO 4 i=2,10
|
|
987
|
+
qr(i+1) = qr(i) * q20
|
|
988
|
+
4 qt(i) = qt(i-1) * v
|
|
989
|
+
|
|
990
|
+
DO 10 i=1,n
|
|
991
|
+
k = ii(i) + 1
|
|
992
|
+
l = jj(i)
|
|
993
|
+
zz = k
|
|
994
|
+
IF (k .EQ. 1) THEN
|
|
995
|
+
qp = g(i) * aa * qr(2) * qzt(l)
|
|
996
|
+
ELSE
|
|
997
|
+
qp = g(i) * aa * qzr(k-1) * qzt(l)
|
|
998
|
+
END IF
|
|
999
|
+
q = q + qp
|
|
1000
|
+
q5 = q5 + aa*(2.0/d - aa*(1.0 - e*(k-1)/q20))*qp
|
|
1001
|
+
ar = ar + g(i)*qzr(k)*qzt(l)/q10/zz/rt
|
|
1002
|
+
dfdt = power(q20,DBLE(k))*(1-l)*qzt(l+1)/tz/k
|
|
1003
|
+
d2f = l * dfdt
|
|
1004
|
+
dpt = dfdt*q10*aa*k/q20
|
|
1005
|
+
dadt = dadt + g(i)*dfdt
|
|
1006
|
+
dpdtr = dpdtr + g(i)*dpt
|
|
1007
|
+
10 cvr = cvr + g(i)*d2f/gascon
|
|
1008
|
+
|
|
1009
|
+
qp = 0.0d0
|
|
1010
|
+
q2a = 0.0d0
|
|
1011
|
+
|
|
1012
|
+
DO 20 j=37,40
|
|
1013
|
+
IF (g(j) .EQ. 0.0d0) GO TO 20
|
|
1014
|
+
k = ii(j)
|
|
1015
|
+
km = jj(j)
|
|
1016
|
+
ddz = adz(j-36)
|
|
1017
|
+
del = d/ddz - 1.0d0
|
|
1018
|
+
IF (DABS(del) .LT. 1.0d-10) del = 1.0d-10
|
|
1019
|
+
ex1 = -aad(j-36) * power(del,DBLE(k))
|
|
1020
|
+
IF (ex1 .LT. EXPTOL) THEN
|
|
1021
|
+
dex = 0.0d0
|
|
1022
|
+
ELSE
|
|
1023
|
+
dex = DEXP(ex1) * power(del,DBLE(km))
|
|
1024
|
+
END IF
|
|
1025
|
+
att = aat(j-36)
|
|
1026
|
+
tx = atz(j-36)
|
|
1027
|
+
tau = t/tx - 1.0d0
|
|
1028
|
+
ex2 = -att * tau * tau
|
|
1029
|
+
IF (ex2 .LE. EXPTOL) THEN
|
|
1030
|
+
tex = 0.0d0
|
|
1031
|
+
ELSE
|
|
1032
|
+
tex = DEXP(ex2)
|
|
1033
|
+
END IF
|
|
1034
|
+
q10 = dex * tex
|
|
1035
|
+
qm = km/del - k*aad(j-36)*power(del,DBLE(k-1))
|
|
1036
|
+
fct = qm * d*d * q10 / ddz
|
|
1037
|
+
q5t = fct*(2.0d0/d + qm/ddz) - (d/ddz)*(d/ddz)*q10 *
|
|
1038
|
+
1 (km/del/del + k*(k-1)*aad(j-36) *
|
|
1039
|
+
2 power(del,DBLE(k-2)))
|
|
1040
|
+
q5 = q5 + q5t*g(j)
|
|
1041
|
+
qp = qp + g(j)*fct
|
|
1042
|
+
dadt = dadt - 2.0d0*g(j)*att*tau* q10 /tx
|
|
1043
|
+
dpdtr = dpdtr - 2.0d0*g(j)*att*tau* fct /tx
|
|
1044
|
+
q2a = q2a + t*g(j)*(4.0d0*att*ex2 + 2.0d0*att)*q10/tx/tx
|
|
1045
|
+
ar = ar + q10*g(j)/rt
|
|
1046
|
+
20 CONTINUE
|
|
1047
|
+
|
|
1048
|
+
sr = -dadt / gascon
|
|
1049
|
+
ur = ar + sr
|
|
1050
|
+
cvr = cvr + q2a/gascon
|
|
1051
|
+
q = q + qp
|
|
1052
|
+
|
|
1053
|
+
RETURN
|
|
1054
|
+
|
|
1055
|
+
END
|
|
1056
|
+
|
|
1057
|
+
************************************************************************
|
|
1058
|
+
|
|
1059
|
+
*** ideal - Computes thermodynamic properties for H2O in the
|
|
1060
|
+
* ideal gas state using equations given by Woolley (1979).
|
|
1061
|
+
|
|
1062
|
+
SUBROUTINE ideal(t)
|
|
1063
|
+
|
|
1064
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
1065
|
+
|
|
1066
|
+
DOUBLE PRECISION c(18)
|
|
1067
|
+
|
|
1068
|
+
COMMON /idf/ ai, gi, si, ui, hi, cvi, cpi
|
|
1069
|
+
|
|
1070
|
+
SAVE
|
|
1071
|
+
|
|
1072
|
+
DATA c / .19730271018d2, .209662681977d2, -.483429455355d0,
|
|
1073
|
+
1 .605743189245d1, .2256023885d2, -.987532442d1,
|
|
1074
|
+
2 -.43135538513d1, .458155781d0, -.47754901883d-1,
|
|
1075
|
+
3 .41238460633d-2, -.27929052852d-3, .14481695261d-4,
|
|
1076
|
+
4 -.56473658748d-6, .16200446d-7, -.3303822796d-9,
|
|
1077
|
+
5 .451916067368d-11, -.370734122708d-13,
|
|
1078
|
+
6 .137546068238d-15/
|
|
1079
|
+
|
|
1080
|
+
|
|
1081
|
+
tt = t / 1.0d2
|
|
1082
|
+
tl = DLOG(tt)
|
|
1083
|
+
gi = -(c(1)/tt + c(2)) * tl
|
|
1084
|
+
hi = (c(2) + c(1)*(1.0d0 - tl)/tt)
|
|
1085
|
+
cpi = c(2) - c(1)/tt
|
|
1086
|
+
|
|
1087
|
+
DO 8 i=3,18
|
|
1088
|
+
emult = power(tt,DBLE(i-6))
|
|
1089
|
+
gi = gi - c(i) * emult
|
|
1090
|
+
hi = hi + c(i) * (i-6) * emult
|
|
1091
|
+
8 cpi = cpi + c(i) * (i-6) * (i-5) * emult
|
|
1092
|
+
|
|
1093
|
+
ai = gi - 1.0d0
|
|
1094
|
+
ui = hi - 1.0d0
|
|
1095
|
+
cvi = cpi - 1.0d0
|
|
1096
|
+
si = ui - ai
|
|
1097
|
+
|
|
1098
|
+
RETURN
|
|
1099
|
+
END
|
|
1100
|
+
|
|
1101
|
+
******************************************************************************
|
|
1102
|
+
|
|
1103
|
+
*** dalHGK - Computes/returns (d(alpha)/dt)p(d,t,alpha)
|
|
1104
|
+
* for the Haar et al. (1983) equation of state.
|
|
1105
|
+
|
|
1106
|
+
DOUBLE PRECISION FUNCTION dalHGK(d,t,alpha)
|
|
1107
|
+
|
|
1108
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
1109
|
+
|
|
1110
|
+
DOUBLE PRECISION tempi(4), densi(4), betai(4), alphai(4),
|
|
1111
|
+
1 g(40), k, l, km, lm, kp, lp
|
|
1112
|
+
INTEGER ll(40), kk(40)
|
|
1113
|
+
|
|
1114
|
+
COMMON /aconst/ wm, gascon, tz, a, z, dz, y, uref, sref
|
|
1115
|
+
COMMON /ellcon/ g1, g2, gf, b1, b2, b1t, b2t, b1tt, b2tt
|
|
1116
|
+
COMMON /basef/ ab, gb, sb, ub, hb, cvb, pb, dpdtb
|
|
1117
|
+
COMMON /resf/ ar, gr, sr, ur, hr, cvr, dpdtr
|
|
1118
|
+
COMMON /qqqq/ q, q5
|
|
1119
|
+
COMMON /nconst/ g, kk, ll, n
|
|
1120
|
+
COMMON /addcon/ tempi, densi, betai, alphai
|
|
1121
|
+
COMMON /tolers/ TTOL, PTOL, DTOL, XTOL, EXPTOL, FPTOL
|
|
1122
|
+
|
|
1123
|
+
SAVE
|
|
1124
|
+
|
|
1125
|
+
|
|
1126
|
+
*** evaluate derivatives for the base function
|
|
1127
|
+
|
|
1128
|
+
y = .25d0 * b1 * d
|
|
1129
|
+
x = 1.0d0 - y
|
|
1130
|
+
dydtp = (d/4.0d0)*(b1t - b1*alpha)
|
|
1131
|
+
|
|
1132
|
+
dbdd = gascon*t * ((b1/4.0d0/x) * (1.0d0 - (g2-1.0d0)/x +
|
|
1133
|
+
1 (g1+g2+1.0d0)/x/x) + b2 - b1*gf + 1.0d0/d)
|
|
1134
|
+
|
|
1135
|
+
db2dd = gascon*t* ((b1*b1/16.0d0/x/x) * (1.0d0 -
|
|
1136
|
+
1 2.0d0*(g2-1.0d0)/x + 3.0d0*(g1+g2+1.0d0)/x/x) -
|
|
1137
|
+
2 1.0d0/d/d)
|
|
1138
|
+
|
|
1139
|
+
db2ddt = gascon*t * ((b1t/4.0d0/x/x) *
|
|
1140
|
+
1 (1.0d0 - (g2-1.0d0)*(1.0d0+y)/x +
|
|
1141
|
+
2 (g1+g2+1.0d0)*(1.0d0+2.0d0*y)/x/x) +
|
|
1142
|
+
3 b2t - gf*b1t) + dbdd/t
|
|
1143
|
+
|
|
1144
|
+
db2dtp = dbdd/t + gascon*t* ( (b1*dydtp/4.0d0/x/x/x) *
|
|
1145
|
+
1 (1.0d0 - g2 + 2.0d0*(g1+g2+1.0d0)/x) +
|
|
1146
|
+
2 ((x*b1t + b1*dydtp)/4.0d0/x/x) *
|
|
1147
|
+
3 (1.0d0 - (g2-1.0d0)/x + (g1+g2+1.0d0)/x/x) +
|
|
1148
|
+
4 b2t - gf*b1t + alpha/d )
|
|
1149
|
+
|
|
1150
|
+
db3ddt = db2dd/t + gascon*t * ( (b1*b1*dydtp/8.0d0/x/x/x/x) *
|
|
1151
|
+
1 (1.0d0 - g2 + 3.0d0*(g1+g2+1.0d0)/x) +
|
|
1152
|
+
2 (b1*(x*b1t + b1*dydtp)/8.0d0/x/x/x) *
|
|
1153
|
+
3 (1.0d0 - 2.0d0*(g2-1.0d0)/x + 3.0d0*(g1+g2+1.0d0)/x/x)
|
|
1154
|
+
4 - 2.0d0*alpha/d/d )
|
|
1155
|
+
|
|
1156
|
+
db3dtt = (db2ddt - dbdd/t)/t + gascon*t* (
|
|
1157
|
+
1 (b1t*dydtp/2.0d0/x/x/x/x) * (1.0d0 - g2 +
|
|
1158
|
+
2 (g1+g2+1.0d0)*(2.0d0+y)/x) +
|
|
1159
|
+
3 ((x*b1tt + 2.0d0*b1t*dydtp)/4.0d0/x/x/x) * (1.0d0 -
|
|
1160
|
+
4 (g2-1.0d0)*(1+y)/x + (g1+g2+1.0d0)*(1.0d0+2.0d0*y)/x/x)
|
|
1161
|
+
5 + b2tt - gf*b1tt ) + (t*db2dtp - dbdd)/t/t
|
|
1162
|
+
|
|
1163
|
+
***********************************************************
|
|
1164
|
+
|
|
1165
|
+
*** evaluate derivatives for the residual function
|
|
1166
|
+
|
|
1167
|
+
* drdd = q/d/d
|
|
1168
|
+
* dr2dd = (q5 - 2.0d0/d*q)/d/d
|
|
1169
|
+
* dr2ddt = dpdtr/d/d
|
|
1170
|
+
|
|
1171
|
+
e1 = DEXP(-a * d)
|
|
1172
|
+
e2 = 1.0d0 - e1
|
|
1173
|
+
tzt = tz / t
|
|
1174
|
+
|
|
1175
|
+
drdd = 0.0d0
|
|
1176
|
+
dr2dd = 0.0d0
|
|
1177
|
+
dr2ddt = 0.0d0
|
|
1178
|
+
dr2dtp = 0.0d0
|
|
1179
|
+
dr3ddt = 0.0d0
|
|
1180
|
+
dr3dtt = 0.0d0
|
|
1181
|
+
|
|
1182
|
+
*** evaluate terms 1-36
|
|
1183
|
+
|
|
1184
|
+
DO 10 i=1,n
|
|
1185
|
+
k = DBLE(kk(i)) + 1.0d0
|
|
1186
|
+
l = DBLE(ll(i)) - 1.0d0
|
|
1187
|
+
km = k - 1.0d0
|
|
1188
|
+
lm = l - 1.0d0
|
|
1189
|
+
kp = k + 1.0d0
|
|
1190
|
+
lp = l + 1.0d0
|
|
1191
|
+
xtzt = power(tzt,l)
|
|
1192
|
+
|
|
1193
|
+
drdd = drdd + g(i) * xtzt*power(e2,km)*e1
|
|
1194
|
+
|
|
1195
|
+
dr2dd = dr2dd + g(i) * e1*xtzt*power(e2,km) *
|
|
1196
|
+
1 (km*e1/e2 - 1.0d0)
|
|
1197
|
+
|
|
1198
|
+
dr2ddt = dr2ddt - g(i)*e1*l*power(e2,km)*power(tzt,lp)/tz
|
|
1199
|
+
|
|
1200
|
+
dr2dtp = dr2dtp + g(i)*e1*power(e2,km)*xtzt *
|
|
1201
|
+
1 ( d*alpha - l/t - km*e1*d*alpha/e2 )
|
|
1202
|
+
|
|
1203
|
+
dr3ddt = dr3ddt + g(i)*( km*d*alpha*e1*e1*xtzt*
|
|
1204
|
+
1 power(e2,k-3.0d0) + e1*xtzt*power(e2,km)*
|
|
1205
|
+
2 (km*e1/e2 - 1.0d0) * (d*alpha - l/t -
|
|
1206
|
+
3 km*d*alpha*e1/e2) )
|
|
1207
|
+
|
|
1208
|
+
dr3dtt = dr3dtt + g(i)*l*e1*power(e2,km)*power(tzt,lp)/tz
|
|
1209
|
+
1 * ( lp/t + d*alpha*km*e1/e2 - d*alpha )
|
|
1210
|
+
|
|
1211
|
+
10 CONTINUE
|
|
1212
|
+
|
|
1213
|
+
*** evaluate terms 37-40
|
|
1214
|
+
|
|
1215
|
+
DO 20 i=37,40
|
|
1216
|
+
k = DBLE(kk(i))
|
|
1217
|
+
l = DBLE(ll(i))
|
|
1218
|
+
km = k - 1.0d0
|
|
1219
|
+
lm = l - 1.0d0
|
|
1220
|
+
kp = k + 1.0d0
|
|
1221
|
+
lp = l + 1.0d0
|
|
1222
|
+
ai = alphai(i-36)
|
|
1223
|
+
bi = betai(i-36)
|
|
1224
|
+
di = densi(i-36)
|
|
1225
|
+
ti = tempi(i-36)
|
|
1226
|
+
tau = t/ti - 1.0d0
|
|
1227
|
+
del = d/di - 1.0d0
|
|
1228
|
+
IF (DABS(del) .LT. 1.0d-10) del = 1.0d-10
|
|
1229
|
+
|
|
1230
|
+
ex1 = -ai * power(del,k)
|
|
1231
|
+
IF (ex1 .LT. EXPTOL) THEN
|
|
1232
|
+
dex = 0.0d0
|
|
1233
|
+
ELSE
|
|
1234
|
+
dex = DEXP(ex1)
|
|
1235
|
+
END IF
|
|
1236
|
+
ex2 = -bi * tau * tau
|
|
1237
|
+
IF (ex2 .LE. EXPTOL) THEN
|
|
1238
|
+
tex = 0.0d0
|
|
1239
|
+
ELSE
|
|
1240
|
+
tex = DEXP(ex2)
|
|
1241
|
+
END IF
|
|
1242
|
+
ex12 = dex * tex
|
|
1243
|
+
qm = l/del - k*ai*power(del,km)
|
|
1244
|
+
xdell = power(del,l)
|
|
1245
|
+
xdelk = power(del,k)
|
|
1246
|
+
|
|
1247
|
+
drdd = drdd + g(i)*xdell*ex12/di*qm
|
|
1248
|
+
|
|
1249
|
+
dr2dd = dr2dd + g(i)*xdell*ex12/di/di * (qm*qm -
|
|
1250
|
+
1 l/di/di - ai*k*km*power(del,k-2.0d0))
|
|
1251
|
+
|
|
1252
|
+
dr2ddt = dr2ddt - g(i)*2.0d0*bi*tau*ex12*xdell/ti/di*qm
|
|
1253
|
+
|
|
1254
|
+
dr2dtp = dr2dtp + g(i)/di*( d*alpha*xdell*ex12/di/del/del *
|
|
1255
|
+
1 (l + ai*k*km*xdelk) + qm * ( ex12 *
|
|
1256
|
+
2 ( xdell* (k*ai*d*alpha*power(del,km)/di -
|
|
1257
|
+
3 2.0d0*bi*tau/ti) - l*d*alpha*power(del,lm)/di) ) )
|
|
1258
|
+
|
|
1259
|
+
dr3ddt = dr3ddt + g(i)/di/di*( xdell*ex12* (2.0d0*qm*
|
|
1260
|
+
1 (l*d*alpha/di/del/del + ai*k*km*d*alpha*
|
|
1261
|
+
2 power(del,k-2.0d0)/di) - 2.0d0*l*d*alpha/di/del
|
|
1262
|
+
3 /del/del + ai*k*km*(k-2.0d0)*power(del,k-3.0d0)*
|
|
1263
|
+
4 d*alpha/di) + (qm*qm - l/del/del - ai*k*km*
|
|
1264
|
+
5 power(del,k-2.0d0)) *(ex12*xdell*( ai*k*
|
|
1265
|
+
6 power(del,k-1.0d0)*d*alpha/di - 2.0d0*bi*tau/ti ) -
|
|
1266
|
+
7 ex12*l*power(del,l-1.0d0)*d*alpha/di) )
|
|
1267
|
+
|
|
1268
|
+
dr3dtt = dr3dtt - 2.0d0*g(i)*bi/ti/di * ( tau*xdell*ex12*d*
|
|
1269
|
+
1 alpha/del/del/di * (l + ai*k*km*power(del,k)) +
|
|
1270
|
+
2 qm*( xdell*ex12*( ai*k*d*alpha*tau*power(del,km)/di
|
|
1271
|
+
3 + (1.0d0 - 2.0d0*bi*tau*tau)/ti -
|
|
1272
|
+
4 tau*l*d*alpha/di/del ) ) )
|
|
1273
|
+
|
|
1274
|
+
|
|
1275
|
+
20 CONTINUE
|
|
1276
|
+
|
|
1277
|
+
*** compute (d(alpha)/dT)P
|
|
1278
|
+
|
|
1279
|
+
dalHGK = ((db3dtt + dr3dtt)*(2.0d0*(dbdd + drdd) +
|
|
1280
|
+
1 d*(db2dd + dr2dd)) -
|
|
1281
|
+
2 (db2ddt + dr2ddt)*(2.0d0*(db2dtp + dr2dtp) +
|
|
1282
|
+
3 d*(db3ddt + dr3ddt) - d*alpha*(db2dd + dr2dd))) /
|
|
1283
|
+
4 (2.0d0*(dbdd + drdd) + d*(db2dd + dr2dd)) /
|
|
1284
|
+
5 (2.0d0*(dbdd + drdd) + d*(db2dd + dr2dd))
|
|
1285
|
+
|
|
1286
|
+
RETURN
|
|
1287
|
+
|
|
1288
|
+
END
|
|
1289
|
+
|
|
1290
|
+
******************************************************************************
|
|
1291
|
+
|
|
1292
|
+
*** denHGK - Computes density (d in g/cm3) and dP/dD (dPdd) as
|
|
1293
|
+
* f(p(MPa),t(degK)) from an initial density guess (dguess).
|
|
1294
|
+
|
|
1295
|
+
SUBROUTINE denHGK(d,p,dguess,t,dpdd)
|
|
1296
|
+
|
|
1297
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
1298
|
+
|
|
1299
|
+
COMMON /qqqq/ q0, q5
|
|
1300
|
+
COMMON /aconst/ wm, gascon, tz, aa, z, dz, y, uref, sref
|
|
1301
|
+
COMMON /basef/ ab, gb, sb, ub, hb, cvb, pb, dpdtb
|
|
1302
|
+
COMMON /RTcurr/ rt
|
|
1303
|
+
|
|
1304
|
+
SAVE
|
|
1305
|
+
|
|
1306
|
+
|
|
1307
|
+
i = 0
|
|
1308
|
+
d = dguess
|
|
1309
|
+
|
|
1310
|
+
10 i = i + 1
|
|
1311
|
+
|
|
1312
|
+
IF (d .LE. 0.0d0) d = 1.0d-8
|
|
1313
|
+
IF (d .GT. 1.9d0) d = 1.9d0
|
|
1314
|
+
|
|
1315
|
+
CALL resid(t,d)
|
|
1316
|
+
CALL base(d,t)
|
|
1317
|
+
|
|
1318
|
+
pp = rt * d * pb + q0
|
|
1319
|
+
dpdd = rt * (z + y * dz) + q5
|
|
1320
|
+
|
|
1321
|
+
*** if dpdd < 0 assume d in 2-phase region and adjust accordingly ***
|
|
1322
|
+
|
|
1323
|
+
IF (dpdd .GT. 0.0d0) GO TO 20
|
|
1324
|
+
|
|
1325
|
+
IF (dguess .GE. 0.2967d0) d = d * 1.02d0
|
|
1326
|
+
IF (dguess .LT. 0.2967d0) d = d * 0.98d0
|
|
1327
|
+
IF (i .LE. 10) GO TO 10
|
|
1328
|
+
|
|
1329
|
+
20 dpdx = dpdd * 1.1d0
|
|
1330
|
+
IF (dpdx .LT. 0.1d0) dpdx = 0.1d0
|
|
1331
|
+
dp = DABS(1.0d0 - pp/p)
|
|
1332
|
+
|
|
1333
|
+
IF ((dp .LT. 1.0d-8) .OR.
|
|
1334
|
+
1 ((dguess .GT. 0.3d0) .AND. (dp .LT. 1.0d-7)) .OR.
|
|
1335
|
+
2 ((dguess .GT. 0.7d0) .AND. (dp .LT. 1.0d-6))) RETURN
|
|
1336
|
+
|
|
1337
|
+
x = (p - pp) / dpdx
|
|
1338
|
+
IF (DABS(x) .GT. 0.1d0) x = x * 0.1d0 / DABS(x)
|
|
1339
|
+
d = d + x
|
|
1340
|
+
IF (d .LE. 0.0d0) d = 1.0d-8
|
|
1341
|
+
IF (i .LE. 30) GO TO 10
|
|
1342
|
+
|
|
1343
|
+
RETURN
|
|
1344
|
+
|
|
1345
|
+
END
|
|
1346
|
+
|
|
1347
|
+
***********************************************************************
|
|
1348
|
+
|
|
1349
|
+
*** PsHGK - Returns an approximation to Psaturation(T) that agrees
|
|
1350
|
+
* to within 0.02% of that predicted by the HGK surface
|
|
1351
|
+
* for temperatures up to within roughly a degree of
|
|
1352
|
+
* the critical point.
|
|
1353
|
+
|
|
1354
|
+
DOUBLE PRECISION FUNCTION PsHGK(t)
|
|
1355
|
+
|
|
1356
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
1357
|
+
|
|
1358
|
+
DOUBLE PRECISION a(8)
|
|
1359
|
+
|
|
1360
|
+
SAVE
|
|
1361
|
+
|
|
1362
|
+
DATA a /-.78889166d1, .25514255d1, -.6716169d1, .33239495d2,
|
|
1363
|
+
1 -.10538479d3, .17435319d3, -.14839348d3, .48631602d2/
|
|
1364
|
+
|
|
1365
|
+
|
|
1366
|
+
IF (T .LE. 314.0d0) THEN
|
|
1367
|
+
pl = 6.3573118d0 - 8858.843d0/t +
|
|
1368
|
+
1 607.56335d0 * power(t,-0.6d0)
|
|
1369
|
+
PsHGK = 0.1d0 * DEXP(pl)
|
|
1370
|
+
ELSE
|
|
1371
|
+
v = t / 647.25d0
|
|
1372
|
+
w = DABS(1.0d0 - v)
|
|
1373
|
+
b = 0.0d0
|
|
1374
|
+
DO 4 i=1,8
|
|
1375
|
+
z = i
|
|
1376
|
+
b = b + a(i)*power(w,(z + 1.0d0)/2.0d0)
|
|
1377
|
+
4 CONTINUE
|
|
1378
|
+
q = b / v
|
|
1379
|
+
PsHGK = 22.093d0 * DEXP(q)
|
|
1380
|
+
END IF
|
|
1381
|
+
|
|
1382
|
+
RETURN
|
|
1383
|
+
END
|
|
1384
|
+
|
|
1385
|
+
***********************************************************************
|
|
1386
|
+
|
|
1387
|
+
*** TsHGK - Returns Tsaturation(P).
|
|
1388
|
+
|
|
1389
|
+
DOUBLE PRECISION FUNCTION TsHGK(p)
|
|
1390
|
+
|
|
1391
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
1392
|
+
|
|
1393
|
+
SAVE
|
|
1394
|
+
|
|
1395
|
+
|
|
1396
|
+
TsHGK = 0.0d0
|
|
1397
|
+
|
|
1398
|
+
IF (p .GT. 22.05d0) RETURN
|
|
1399
|
+
|
|
1400
|
+
k = 0
|
|
1401
|
+
pl = 2.302585d0 + DLOG(p)
|
|
1402
|
+
tg = 372.83d0 +
|
|
1403
|
+
1 pl*(27.7589d0 + pl*(2.3819d0 + pl*(0.24834d0 +
|
|
1404
|
+
2 pl*0.0193855d0)))
|
|
1405
|
+
|
|
1406
|
+
1 IF (tg .LT. 273.15d0) tg = 273.15d0
|
|
1407
|
+
IF (tg .GT. 647.00d0) tg = 647.00d0
|
|
1408
|
+
|
|
1409
|
+
IF (k .GE. 8) THEN
|
|
1410
|
+
TsHGK = tg
|
|
1411
|
+
ELSE
|
|
1412
|
+
k = k + 1
|
|
1413
|
+
pp = PsHGK(tg)
|
|
1414
|
+
dp = TdPsdT(tg)
|
|
1415
|
+
IF (ABS(1.0d0 - pp/p) .LT. 1.0d-5) THEN
|
|
1416
|
+
TsHGK = tg
|
|
1417
|
+
ELSE
|
|
1418
|
+
tg = tg * (1.0d0 + (p - pp)/dp)
|
|
1419
|
+
GO TO 1
|
|
1420
|
+
END IF
|
|
1421
|
+
END IF
|
|
1422
|
+
|
|
1423
|
+
RETURN
|
|
1424
|
+
END
|
|
1425
|
+
|
|
1426
|
+
***********************************************************************
|
|
1427
|
+
|
|
1428
|
+
*** TdPsdT - Returns T*(dPsat/dT).
|
|
1429
|
+
|
|
1430
|
+
DOUBLE PRECISION FUNCTION TdPsdT(t)
|
|
1431
|
+
|
|
1432
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
1433
|
+
|
|
1434
|
+
DOUBLE PRECISION a(8)
|
|
1435
|
+
|
|
1436
|
+
SAVE
|
|
1437
|
+
|
|
1438
|
+
DATA a /-.78889166d1, .25514255d1, -.6716169d1, .33239495d2,
|
|
1439
|
+
1 -.10538479d3, .17435319d3, -.14839348d3, .48631602d2/
|
|
1440
|
+
|
|
1441
|
+
|
|
1442
|
+
v = t / 647.25d0
|
|
1443
|
+
w = 1.0 - v
|
|
1444
|
+
b = 0.0d0
|
|
1445
|
+
c = 0.0d0
|
|
1446
|
+
|
|
1447
|
+
DO 4 i=1,8
|
|
1448
|
+
z = i
|
|
1449
|
+
y = a(i) * power(w,(z + 1.0d0)/2.0d0)
|
|
1450
|
+
c = c + y/w*(0.5d0 - 0.5d0*z - 1.0d0/v)
|
|
1451
|
+
4 b = b + y
|
|
1452
|
+
|
|
1453
|
+
q = b / v
|
|
1454
|
+
TdPsdT = 22.093d0 * DEXP(q) * c
|
|
1455
|
+
|
|
1456
|
+
RETURN
|
|
1457
|
+
|
|
1458
|
+
END
|
|
1459
|
+
|
|
1460
|
+
***********************************************************************
|
|
1461
|
+
|
|
1462
|
+
*** corr - Computes liquid and vapor densities (dliq & dvap)
|
|
1463
|
+
* and (Gl-Gv)/RT (delg) for T-P conditions on or
|
|
1464
|
+
* near the saturation surface.
|
|
1465
|
+
|
|
1466
|
+
SUBROUTINE corr(itripl,t,p,dl,dv,delg,epseqn)
|
|
1467
|
+
|
|
1468
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
1469
|
+
|
|
1470
|
+
INTEGER epseqn
|
|
1471
|
+
|
|
1472
|
+
COMMON /qqqq/ q00, q11
|
|
1473
|
+
COMMON /aconst/ wm, gascon, tz, aa, zb, dzb, yb, uref, sref
|
|
1474
|
+
COMMON /fcts/ ad, gd, sd, ud, hd, cvd, cpd, dpdt, dvdt, dpdd,
|
|
1475
|
+
1 cjtt, cjth
|
|
1476
|
+
COMMON /basef/ ab, gb, sb, ub, hb, cvb, pb, dpdtb
|
|
1477
|
+
COMMON /RTcurr/ rt
|
|
1478
|
+
COMMON /units/ ft, fd, fvd, fvk, fs, fp, fh, fst, fc
|
|
1479
|
+
COMMON /HGKcrt/ tcHGK, dcHGK, pcHGK
|
|
1480
|
+
|
|
1481
|
+
SAVE
|
|
1482
|
+
|
|
1483
|
+
|
|
1484
|
+
CALL bb(t)
|
|
1485
|
+
|
|
1486
|
+
dguess = dl
|
|
1487
|
+
IF (dl .LE. 0.0d0) dguess = 1.11d0 - 0.0004d0*t
|
|
1488
|
+
|
|
1489
|
+
CALL denHGK(dl,p,dguess,t,dpdd)
|
|
1490
|
+
CALL ideal(t)
|
|
1491
|
+
CALL thmHGK(dl,t)
|
|
1492
|
+
*** save liquid properties
|
|
1493
|
+
CALL dimHGK(1,itripl,t,p,dl,epseqn)
|
|
1494
|
+
gl = gd
|
|
1495
|
+
|
|
1496
|
+
dguess = dv
|
|
1497
|
+
IF (dv .LE. 0.0d0) dguess = p / rt
|
|
1498
|
+
|
|
1499
|
+
CALL denHGK(dv,p,dguess,t,dpdd)
|
|
1500
|
+
IF (dv .LT. 5.0d-7) dv = 5.0d-7
|
|
1501
|
+
CALL ideal(t)
|
|
1502
|
+
CALL thmHGK(dv,t)
|
|
1503
|
+
*** vapor properties will be available
|
|
1504
|
+
*** in COMMON /fcts/ (dimensionless) after
|
|
1505
|
+
*** pcorr's final call of corr (delg < 10d-4)
|
|
1506
|
+
gv = gd
|
|
1507
|
+
delg = gl - gv
|
|
1508
|
+
|
|
1509
|
+
RETURN
|
|
1510
|
+
END
|
|
1511
|
+
|
|
1512
|
+
***********************************************************************
|
|
1513
|
+
|
|
1514
|
+
*** pcorr - Computes Psaturation(T) (p) and liquid and vapor
|
|
1515
|
+
* densities (dl & dv) from refinement of an initial
|
|
1516
|
+
* approximation (PsHGK(t)) in accord with Gl = Gv.
|
|
1517
|
+
|
|
1518
|
+
SUBROUTINE pcorr(itripl,t,p,dl,dv,epseqn)
|
|
1519
|
+
|
|
1520
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
1521
|
+
|
|
1522
|
+
INTEGER epseqn
|
|
1523
|
+
|
|
1524
|
+
COMMON /aconst/ wm, gascon, tz, aa, zb, dzb, yb, uref, sref
|
|
1525
|
+
|
|
1526
|
+
SAVE
|
|
1527
|
+
|
|
1528
|
+
p = PsHGK(t)
|
|
1529
|
+
dl = 0.0d0
|
|
1530
|
+
dv = 0.0d0
|
|
1531
|
+
|
|
1532
|
+
2 CALL corr(itripl,t,p,dl,dv,delg,epseqn)
|
|
1533
|
+
|
|
1534
|
+
dp = delg * gascon * T / (1.0d0/dv - 1.0d0/dl)
|
|
1535
|
+
p = p + dp
|
|
1536
|
+
IF (DABS(delg) .GT. 1.0d-4) GO TO 2
|
|
1537
|
+
|
|
1538
|
+
RETURN
|
|
1539
|
+
END
|
|
1540
|
+
|
|
1541
|
+
************************************************************
|
|
1542
|
+
|
|
1543
|
+
*** tcorr - Computes Tsaturation(P) (t) and liquid and vapor
|
|
1544
|
+
* densities (dl & dv) from refinement of an initial
|
|
1545
|
+
* approximation (TsHGK(p)) in accord with Gl = Gv.
|
|
1546
|
+
|
|
1547
|
+
SUBROUTINE tcorr(itripl,t,p,dl,dv,epseqn)
|
|
1548
|
+
|
|
1549
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
1550
|
+
|
|
1551
|
+
INTEGER epseqn
|
|
1552
|
+
|
|
1553
|
+
COMMON /aconst/ wm, gascon, tz, aa, zb, dzb, yb, uref, sref
|
|
1554
|
+
COMMON /RTcurr/ rt
|
|
1555
|
+
|
|
1556
|
+
SAVE
|
|
1557
|
+
|
|
1558
|
+
|
|
1559
|
+
t = TsHGK(p)
|
|
1560
|
+
IF (t .EQ. 0.0d0) RETURN
|
|
1561
|
+
dl = 0.0d0
|
|
1562
|
+
dv = 0.0d0
|
|
1563
|
+
|
|
1564
|
+
1 rt = t * gascon
|
|
1565
|
+
CALL corr(itripl,t,p,dl,dv,delg,epseqn)
|
|
1566
|
+
|
|
1567
|
+
dp = delg * gascon * t / (1.0d0/dv - 1.0d0/dl)
|
|
1568
|
+
t = t * (1.0d0 - dp/TdPsdT(t))
|
|
1569
|
+
|
|
1570
|
+
IF (DABS(delg) .GT. 1.0d-4) GO TO 1
|
|
1571
|
+
|
|
1572
|
+
RETURN
|
|
1573
|
+
END
|
|
1574
|
+
|
|
1575
|
+
***************************************************************
|
|
1576
|
+
|
|
1577
|
+
*** LVSeqn - Computes thermodynamic and transport properties of
|
|
1578
|
+
* critical region H2O (369.85-419.85 degC,
|
|
1579
|
+
* 0.20-0.42 gm/cm3) from the fundamental equation given
|
|
1580
|
+
* by Levelt Sengers, et al (1983): J.Phys.Chem.Ref.Data,
|
|
1581
|
+
* V.12, No.1, pp.1-28.
|
|
1582
|
+
|
|
1583
|
+
SUBROUTINE LVSeqn(isat,iopt,itripl,T,P,Dens,epseqn)
|
|
1584
|
+
|
|
1585
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
1586
|
+
|
|
1587
|
+
PARAMETER (NPROP = 23)
|
|
1588
|
+
|
|
1589
|
+
DOUBLE PRECISION wprops(NPROP), wpliq(NPROP), Dens(2)
|
|
1590
|
+
LOGICAL cpoint
|
|
1591
|
+
INTEGER epseqn
|
|
1592
|
+
|
|
1593
|
+
COMMON /coefs/ a(20), q(20), x(11)
|
|
1594
|
+
COMMON /crits/ Tc, rhoc, Pc, Pcon, Ucon, Scon, dPcon
|
|
1595
|
+
COMMON /therm/ AE, GE, U, H, Entrop, Cp, Cv, betaw, alphw,
|
|
1596
|
+
1 heat, Speed
|
|
1597
|
+
COMMON /satur/ Dliq, Dvap, DH2O, iphase
|
|
1598
|
+
COMMON /param/ r1, th1
|
|
1599
|
+
COMMON /units/ ft, fd, fvd, fvk, fs, fp, fh, fst, fc
|
|
1600
|
+
COMMON /wpvals/ wprops, wpliq
|
|
1601
|
+
|
|
1602
|
+
SAVE
|
|
1603
|
+
|
|
1604
|
+
|
|
1605
|
+
cpoint = .FALSE.
|
|
1606
|
+
DH2O = Dens(1)
|
|
1607
|
+
|
|
1608
|
+
10 CALL LVSsat(iopt,isat,T,P,DH2O)
|
|
1609
|
+
|
|
1610
|
+
IF ((isat .NE. 0) .OR. (iopt .NE. 1)) CALL denLVS(isat,T,P)
|
|
1611
|
+
|
|
1612
|
+
IF (isat .EQ. 0) THEN
|
|
1613
|
+
Dens(1) = DH2O
|
|
1614
|
+
ELSE
|
|
1615
|
+
Dens(1) = Dliq
|
|
1616
|
+
Dens(2) = Dvap
|
|
1617
|
+
END IF
|
|
1618
|
+
|
|
1619
|
+
IF (isat .EQ. 0) THEN
|
|
1620
|
+
CALL thmLVS(isat,T,r1,th1)
|
|
1621
|
+
CALL dimLVS(isat,itripl,th1,T,P*1.0d1,dl,dv,wprops,epseqn)
|
|
1622
|
+
IF (cpoint) THEN
|
|
1623
|
+
CALL cpswap
|
|
1624
|
+
Dens(1) = cdens
|
|
1625
|
+
Dens(2) = cdens
|
|
1626
|
+
isat = 1
|
|
1627
|
+
iopt = ioptsv
|
|
1628
|
+
END IF
|
|
1629
|
+
ELSE
|
|
1630
|
+
th1 = -1.0d0
|
|
1631
|
+
CALL thmLVS(isat,T,r1,th1)
|
|
1632
|
+
CALL dimLVS(isat,itripl,th1,T,P*1.0d1,dl,dv,wprops,epseqn)
|
|
1633
|
+
th1 = 1.0d0
|
|
1634
|
+
CALL thmLVS(isat,T,r1,th1)
|
|
1635
|
+
CALL dimLVS(isat,itripl,th1,T,P*1.0d1,dl,dv,wpliq,epseqn)
|
|
1636
|
+
IF (dl .EQ. dv) THEN
|
|
1637
|
+
cpoint = .TRUE.
|
|
1638
|
+
cdens = dl
|
|
1639
|
+
T = 647.0670000003d0
|
|
1640
|
+
P = 22.0460000008d0
|
|
1641
|
+
ioptsv = iopt
|
|
1642
|
+
iopt = 2
|
|
1643
|
+
isat = 0
|
|
1644
|
+
GO TO 10
|
|
1645
|
+
END IF
|
|
1646
|
+
END IF
|
|
1647
|
+
|
|
1648
|
+
END
|
|
1649
|
+
|
|
1650
|
+
*********************************************************************
|
|
1651
|
+
|
|
1652
|
+
*** cpswap - Load critical point A, G, U, H, S, Vs, Di, ZB,
|
|
1653
|
+
* albe values from wpliq into wprops and
|
|
1654
|
+
* approximations to critical Cv, Cp, alpha, beta,
|
|
1655
|
+
* visc, tcond, Prndtl, tdiff, visck, YB, QB, XB,
|
|
1656
|
+
* daldT, st values from wprops into wpliq.
|
|
1657
|
+
|
|
1658
|
+
SUBROUTINE cpswap
|
|
1659
|
+
|
|
1660
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
1661
|
+
|
|
1662
|
+
PARAMETER (NPROP = 23)
|
|
1663
|
+
|
|
1664
|
+
INTEGER aw, gw, sw, uw, hw, cvw, cpw, vsw, alw, bew,
|
|
1665
|
+
1 diw, viw, tcw, stw, tdw, Prw, vikw, albew,
|
|
1666
|
+
2 ZBw, YBw, QBw, dalwdT, XBw
|
|
1667
|
+
DOUBLE PRECISION wprops(NPROP), wpliq(NPROP)
|
|
1668
|
+
|
|
1669
|
+
COMMON /wpvals/ wprops, wpliq
|
|
1670
|
+
COMMON /units/ ft, fd, fvd, fvk, fs, fp, fh, fst, fc
|
|
1671
|
+
|
|
1672
|
+
SAVE
|
|
1673
|
+
|
|
1674
|
+
DATA aw, gw, sw, uw, hw, cvw, cpw, vsw, alw, bew, diw, viw,
|
|
1675
|
+
1 tcw, stw, tdw, Prw, vikw, albew, ZBw, YBw, QBw,
|
|
1676
|
+
2 dalwdT, XBw
|
|
1677
|
+
2 / 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
|
|
1678
|
+
3 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 /
|
|
1679
|
+
|
|
1680
|
+
|
|
1681
|
+
wprops(aw) = wpliq(aw)
|
|
1682
|
+
wprops(gw) = wpliq(gw)
|
|
1683
|
+
wprops(sw) = wpliq(sw)
|
|
1684
|
+
wprops(uw) = wpliq(uw)
|
|
1685
|
+
wprops(hw) = wpliq(hw)
|
|
1686
|
+
wprops(diw) = wpliq(diw)
|
|
1687
|
+
wprops(ZBw) = wpliq(ZBw)
|
|
1688
|
+
wprops(stw) = wpliq(stw)
|
|
1689
|
+
|
|
1690
|
+
wpliq(cvw) = wprops(cvw)
|
|
1691
|
+
wpliq(cpw) = wprops(cpw)
|
|
1692
|
+
wpliq(alw) = wprops(alw)
|
|
1693
|
+
wpliq(bew) = wprops(bew)
|
|
1694
|
+
wpliq(YBw) = wprops(YBw)
|
|
1695
|
+
wpliq(QBw) = wprops(QBw)
|
|
1696
|
+
wpliq(XBw) = wprops(XBw)
|
|
1697
|
+
wpliq(tcw) = wprops(tcw)
|
|
1698
|
+
wpliq(tdw) = wprops(tdw)
|
|
1699
|
+
wpliq(Prw) = wprops(Prw)
|
|
1700
|
+
wpliq(dalwdT) = wprops(dalwdT)
|
|
1701
|
+
wpliq(albew) = wprops(albew)
|
|
1702
|
+
|
|
1703
|
+
wprops(vsw) = 0.429352766443498d2 * fs
|
|
1704
|
+
wprops(viw) = 1.0d6
|
|
1705
|
+
wprops(vikw) = 1.0d6
|
|
1706
|
+
|
|
1707
|
+
wpliq(vsw) = wprops(vsw)
|
|
1708
|
+
wpliq(viw) = wprops(viw)
|
|
1709
|
+
wpliq(vikw) = wprops(vikw)
|
|
1710
|
+
|
|
1711
|
+
END
|
|
1712
|
+
|
|
1713
|
+
*********************************************************************
|
|
1714
|
+
|
|
1715
|
+
*** LVSsat - If isat=1, computes Psat(T) or Tsat(P) (iopt=1,2).
|
|
1716
|
+
* If isat=0, checks whether T-D or T-P (iopt=1,2)
|
|
1717
|
+
* falls on or within TOL of the liq-vap surface; if so,
|
|
1718
|
+
* isat <- 1 and T <- Tsat.
|
|
1719
|
+
|
|
1720
|
+
SUBROUTINE LVSsat(iopt,isat,T,P,D)
|
|
1721
|
+
|
|
1722
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
1723
|
+
|
|
1724
|
+
COMMON /tolers/ TTOL, PTOL, DTOL, XTOL, EXPTOL, FPTOL
|
|
1725
|
+
COMMON /crits/ Tc, rhoc, Pc, Pcon, Ucon, Scon, dPcon
|
|
1726
|
+
|
|
1727
|
+
SAVE
|
|
1728
|
+
|
|
1729
|
+
DATA ERRTOL, TCTOL / 1.0d-12, 1.0d-2 /
|
|
1730
|
+
|
|
1731
|
+
|
|
1732
|
+
IF (isat .EQ. 1) THEN
|
|
1733
|
+
IF (iopt .EQ. 1) THEN
|
|
1734
|
+
P = Pfind(isat,T,D)
|
|
1735
|
+
END IF
|
|
1736
|
+
T = TsLVS(isat,P)
|
|
1737
|
+
ELSE
|
|
1738
|
+
IF (iopt .EQ. 1) THEN
|
|
1739
|
+
P = Pfind(isat,T,D)
|
|
1740
|
+
END IF
|
|
1741
|
+
IF (P-ERRTOL .GT. Pc) THEN
|
|
1742
|
+
RETURN
|
|
1743
|
+
ELSE
|
|
1744
|
+
CALL backup
|
|
1745
|
+
Tsat = TsLVS(isat,P)
|
|
1746
|
+
IF (DABS(Tsat-T) .LT. TCTOL) THEN
|
|
1747
|
+
T = Tsat
|
|
1748
|
+
isat = 1
|
|
1749
|
+
ELSE
|
|
1750
|
+
CALL restor
|
|
1751
|
+
END IF
|
|
1752
|
+
END IF
|
|
1753
|
+
END IF
|
|
1754
|
+
|
|
1755
|
+
RETURN
|
|
1756
|
+
END
|
|
1757
|
+
|
|
1758
|
+
*********************************************************************
|
|
1759
|
+
|
|
1760
|
+
*** denLVS - Calculates DH2O(T,P) or Dvap,Dliq(T,P) from the
|
|
1761
|
+
* Levelt Sengers, et al (1983) critical region
|
|
1762
|
+
* equation of state.
|
|
1763
|
+
|
|
1764
|
+
SUBROUTINE denLVS(isat,T,P)
|
|
1765
|
+
|
|
1766
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
1767
|
+
|
|
1768
|
+
DOUBLE PRECISION s(2), sd(2)
|
|
1769
|
+
|
|
1770
|
+
COMMON /coefs/ a(20), q(20), x(11)
|
|
1771
|
+
COMMON /crits/ Tc, rhoc, Pc, Pcon, Ucon, Scon, dPcon
|
|
1772
|
+
COMMON /satur/ Dliq, Dvap, DH2O, iphase
|
|
1773
|
+
COMMON /therm/ AE, GE, U, H, Entrop, Cp, Cv, betaw, alphw,
|
|
1774
|
+
1 heat, Speed
|
|
1775
|
+
COMMON /param/ r1, th1
|
|
1776
|
+
COMMON /deri2/ dPdD, dPdT
|
|
1777
|
+
|
|
1778
|
+
SAVE
|
|
1779
|
+
|
|
1780
|
+
EQUIVALENCE (Dmin, x(4)), (Dmax, x(5)), (pw11, q(9)),
|
|
1781
|
+
1 (xk0, a(7)), (xk1, a(12))
|
|
1782
|
+
|
|
1783
|
+
IF (isat .EQ. 0) THEN
|
|
1784
|
+
DH2O = rhoc
|
|
1785
|
+
DO 10 i=1,20
|
|
1786
|
+
Pnext = Pfind(isat,T,DH2O)
|
|
1787
|
+
Pdif = Pnext - P
|
|
1788
|
+
IF (iphase .EQ. 2) THEN
|
|
1789
|
+
IF (DABS(Pdif) .LE. 0.0d0) THEN
|
|
1790
|
+
RETURN
|
|
1791
|
+
ELSE
|
|
1792
|
+
END IF
|
|
1793
|
+
IF (Pdif .LT. 0.0d0) THEN
|
|
1794
|
+
DH2O = Dmax
|
|
1795
|
+
ELSE
|
|
1796
|
+
DH2O = Dmin
|
|
1797
|
+
END IF
|
|
1798
|
+
ELSE
|
|
1799
|
+
delD = -Pdif/dPdD
|
|
1800
|
+
DH2O = DH2O + delD
|
|
1801
|
+
IF (DH2O .LT. Dmin) DH2O = Dmin
|
|
1802
|
+
IF (DH2O .GT. Dmax) DH2O = Dmax
|
|
1803
|
+
IF (DABS(delD/DH2O) .LT. 1.0d-6) RETURN
|
|
1804
|
+
END IF
|
|
1805
|
+
10 CONTINUE
|
|
1806
|
+
ELSE
|
|
1807
|
+
Tw = -Tc/T
|
|
1808
|
+
dTw = 1.0d0 + Tw
|
|
1809
|
+
|
|
1810
|
+
CALL ss(r1,th1,s,sd)
|
|
1811
|
+
rho1 = 1.0d0+pw11*dTw+a(1)*(s(1)+s(2))
|
|
1812
|
+
rho2 = xk0*power(r1,a(6)) + xk1*power(r1,q(16))
|
|
1813
|
+
|
|
1814
|
+
Dvap = rhoc * (rho1 - rho2)
|
|
1815
|
+
Dliq = rhoc * (rho1 + rho2)
|
|
1816
|
+
|
|
1817
|
+
RETURN
|
|
1818
|
+
END IF
|
|
1819
|
+
|
|
1820
|
+
RETURN
|
|
1821
|
+
END
|
|
1822
|
+
|
|
1823
|
+
*********************************************************************
|
|
1824
|
+
|
|
1825
|
+
*** TsLVS - Returns saturation T(P)
|
|
1826
|
+
|
|
1827
|
+
DOUBLE PRECISION FUNCTION TsLVS(isat,P)
|
|
1828
|
+
|
|
1829
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
1830
|
+
|
|
1831
|
+
COMMON /therm/ AE, GE, U, H, Entrop, Cp, Cv, betaw, alphw,
|
|
1832
|
+
1 heat, Speed
|
|
1833
|
+
COMMON /satur/ Dliq, Dvap, DH2O, iphase
|
|
1834
|
+
COMMON /crits/ Tc, rhoc, Pc, Pcon, Ucon, Scon, dPcon
|
|
1835
|
+
COMMON /deri2/ dPdD, dPdT
|
|
1836
|
+
|
|
1837
|
+
SAVE
|
|
1838
|
+
|
|
1839
|
+
|
|
1840
|
+
TsLVS2 = Tc - 1.0d0
|
|
1841
|
+
D = rhoc
|
|
1842
|
+
|
|
1843
|
+
DO 10 i=1,20
|
|
1844
|
+
Pnext = Pfind(isat,TsLVS2,D)
|
|
1845
|
+
dT = (Pnext - P)/dPdT
|
|
1846
|
+
TsLVS2 = TsLVS2 - dT
|
|
1847
|
+
IF (TsLVS2 .GT. Tc) THEN
|
|
1848
|
+
TsLVS2 = Tc
|
|
1849
|
+
ELSE
|
|
1850
|
+
IF (DABS(dT/TsLVS2) .LT. 1.0d-8) THEN
|
|
1851
|
+
GO TO 20
|
|
1852
|
+
ELSE
|
|
1853
|
+
END IF
|
|
1854
|
+
END IF
|
|
1855
|
+
10 CONTINUE
|
|
1856
|
+
|
|
1857
|
+
20 TsLVS = TsLVS2
|
|
1858
|
+
|
|
1859
|
+
RETURN
|
|
1860
|
+
END
|
|
1861
|
+
|
|
1862
|
+
*********************************************************************
|
|
1863
|
+
|
|
1864
|
+
*** Pfind - Returns P(T,D). Computes (dP/dD)T when invoked by SUB
|
|
1865
|
+
* Dfind (isat=0) and (dP/dT)D when invoked by SUB TsLVS
|
|
1866
|
+
* (isat=1). Also computes 1st & 2nd partial derivatives
|
|
1867
|
+
* the singular part of the potential (Delta P tilde) that
|
|
1868
|
+
* are used in SUB thmLVS.
|
|
1869
|
+
|
|
1870
|
+
DOUBLE PRECISION FUNCTION Pfind(isat,T,D)
|
|
1871
|
+
|
|
1872
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
1873
|
+
|
|
1874
|
+
DOUBLE PRECISION s(2), xk(2), sd(2)
|
|
1875
|
+
|
|
1876
|
+
COMMON /coefs/ a(20), q(20), x(11)
|
|
1877
|
+
COMMON /crits/ Tc, rhoc, Pc, Pcon, Ucon, Scon, dPcon
|
|
1878
|
+
COMMON /satur/ Dliq, Dvap, DH2O, iphase
|
|
1879
|
+
COMMON /therm/ AE, GE, U, H, Entrop, Cp, Cv, betaw, alphw,
|
|
1880
|
+
1 heat, Speed
|
|
1881
|
+
COMMON /param/ r1, th1
|
|
1882
|
+
COMMON /tolers/ TTOL, PTOL, DTOL, XTOL, EXPTOL, FPTOL
|
|
1883
|
+
COMMON /deriv/ amu, s, Pw, Tw, dTw, dM0dT, dP0dT,
|
|
1884
|
+
1 d2PdM2, d2PdMT, d2PdT2, p0th, p1th, xk
|
|
1885
|
+
COMMON /deri2/ dPdD, dPdT
|
|
1886
|
+
***************************************
|
|
1887
|
+
COMMON /abc2/ r, th
|
|
1888
|
+
***************************************
|
|
1889
|
+
|
|
1890
|
+
SAVE
|
|
1891
|
+
|
|
1892
|
+
EQUIVALENCE (Pw1, a(5)), (Pw2, a(4)), (Pw3, a(2)),
|
|
1893
|
+
1 (amc, a(13)), (am1, a(14)), (am2, a(15)),
|
|
1894
|
+
2 (am3, a(16)), (p00, q(11)), (p20, q(12)),
|
|
1895
|
+
3 (p40, q(13)), (p01, q(18)), (p21, q(19)),
|
|
1896
|
+
4 (p41, q(20)), (aa, a(10)), (xk0, a(7)),
|
|
1897
|
+
5 (xk1, a(12)), (pw11,q(9)), (alpha,q(10)),
|
|
1898
|
+
6 (alhi,q(15)), (besq,a(9))
|
|
1899
|
+
|
|
1900
|
+
xk(1) = xk0
|
|
1901
|
+
xk(2) = xk1
|
|
1902
|
+
IF (DABS(T-Tc) .LT. FPTOL) T = Tc
|
|
1903
|
+
Tee = (T-Tc)/Tc
|
|
1904
|
+
Tw = -Tc/T
|
|
1905
|
+
dTw = 1.0d0 + Tw
|
|
1906
|
+
|
|
1907
|
+
IF (isat .EQ. 0) THEN
|
|
1908
|
+
rho = D / rhoc
|
|
1909
|
+
CALL conver(rho,Tee,amu,th1,r1,rho1,s,rhodi,err)
|
|
1910
|
+
ELSE
|
|
1911
|
+
th1 = -1.0d0
|
|
1912
|
+
th = th1
|
|
1913
|
+
r1 = dTw/(1.0d0-besq)
|
|
1914
|
+
r = r1
|
|
1915
|
+
CALL ss(r1,th1,s,sd)
|
|
1916
|
+
rho = th1 * (xk0*power(r1,a(6)) +
|
|
1917
|
+
1 xk1*power(r1,q(16))) +
|
|
1918
|
+
2 a(1)*(s(1)+s(2))
|
|
1919
|
+
rho = 1.0d0+pw11*dTw+rho
|
|
1920
|
+
amu = 0.0d0
|
|
1921
|
+
D = rho * rhoc
|
|
1922
|
+
END IF
|
|
1923
|
+
|
|
1924
|
+
tt1 = th1*th1
|
|
1925
|
+
tt2 = tt1*tt1
|
|
1926
|
+
|
|
1927
|
+
Pw0 = 1.0d0+dTw*(Pw1+dTw*(Pw2+dTw*Pw3))
|
|
1928
|
+
|
|
1929
|
+
IF (isat .EQ. 0) THEN
|
|
1930
|
+
Pwmu = amu*rhodi
|
|
1931
|
+
ELSE
|
|
1932
|
+
Pwmu = 0.0d0
|
|
1933
|
+
END IF
|
|
1934
|
+
|
|
1935
|
+
p0th = p00+p20*tt1+p40*tt2
|
|
1936
|
+
p1th = p01+p21*tt1+p41*tt2
|
|
1937
|
+
|
|
1938
|
+
dPw0 = xk0*p0th*power(r1,2.0d0-alpha)
|
|
1939
|
+
dPw1 = xk1*p1th*power(r1,2.0d0-alhi)
|
|
1940
|
+
dPw = aa*(dPw0+dPw1)
|
|
1941
|
+
|
|
1942
|
+
Pw = Pw0 + Pwmu + dPw
|
|
1943
|
+
|
|
1944
|
+
Pfind = Pw * Pcon * T
|
|
1945
|
+
|
|
1946
|
+
IF (DABS(th1) .LT. 1.0d0) THEN
|
|
1947
|
+
iphase = 1
|
|
1948
|
+
ELSE
|
|
1949
|
+
iphase = 2
|
|
1950
|
+
|
|
1951
|
+
dP0dT = Pw1+dTw*(2.0d0*Pw2+3.0d0*Pw3*dTw)
|
|
1952
|
+
dM0dT = am1+dTw*(2.0d0*am2+3.0d0*am3*dTw)
|
|
1953
|
+
Uw = dP0dT-rho*dM0dT+pw11*amu+s(1)+s(2)
|
|
1954
|
+
|
|
1955
|
+
dPdTcd = Uw + rho*dM0dT
|
|
1956
|
+
dPwdTw = Pw - Tw*dPdTcd
|
|
1957
|
+
|
|
1958
|
+
dPdT = Pcon * dPwdTw
|
|
1959
|
+
|
|
1960
|
+
END IF
|
|
1961
|
+
|
|
1962
|
+
CALL aux(r1,th1,d2PdT2,d2PdMT,d2PdM2,aa,xk,sd,Cvcoex)
|
|
1963
|
+
|
|
1964
|
+
IF (iphase .EQ. 1) dPdD = dPcon * D * T / d2PdM2
|
|
1965
|
+
|
|
1966
|
+
RETURN
|
|
1967
|
+
END
|
|
1968
|
+
|
|
1969
|
+
***************************************************************
|
|
1970
|
+
|
|
1971
|
+
*** aux - Calculates some second derivatives of the
|
|
1972
|
+
* anomalous part of the equation of state.
|
|
1973
|
+
|
|
1974
|
+
SUBROUTINE aux(r1,th1,d2PdT2,d2PdMT,d2PdM2,aa,xk,sd,Cvcoex)
|
|
1975
|
+
|
|
1976
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
1977
|
+
|
|
1978
|
+
DOUBLE PRECISION xk(2), s(2), sd(2), w(2), y(2), z(2), coex(2)
|
|
1979
|
+
|
|
1980
|
+
COMMON /coefs/ a(20), q(20), x(11)
|
|
1981
|
+
|
|
1982
|
+
SAVE
|
|
1983
|
+
|
|
1984
|
+
EQUIVALENCE (cc, a(1)), (beta, a(6)), (besq,a(9)),
|
|
1985
|
+
1 (delta,a(11)), (alpha,q(10)), (s00, a(17)),
|
|
1986
|
+
2 (s20, a(18)), (s01, a(19)), (s21, a(20))
|
|
1987
|
+
|
|
1988
|
+
|
|
1989
|
+
deli = 0.0d0
|
|
1990
|
+
s(1) = s00+s20*th1*th1
|
|
1991
|
+
s(2) = s01+s21*th1*th1
|
|
1992
|
+
sd(1) = 2.0*th1*s20
|
|
1993
|
+
sd(2) = 2.0*th1*s21
|
|
1994
|
+
ww = 0.0d0
|
|
1995
|
+
yy = 0.0d0
|
|
1996
|
+
zz = 0.0d0
|
|
1997
|
+
gamma = beta*(delta-1.0d0)
|
|
1998
|
+
tt1 = th1*th1
|
|
1999
|
+
ter = 2.0d0*beta*delta-1.0d0
|
|
2000
|
+
g = (1.0+(besq*ter-3.0)*tt1 - besq*(ter-2.0)*tt1*tt1)
|
|
2001
|
+
Cvcoex = 0.0d0
|
|
2002
|
+
|
|
2003
|
+
DO 30 i=1,2
|
|
2004
|
+
alhi = alpha - deli
|
|
2005
|
+
beti = beta + deli
|
|
2006
|
+
gami = gamma - deli
|
|
2007
|
+
IF (r1 .NE. 0.0d0) THEN
|
|
2008
|
+
w(i) = (1.0-alhi)*(1.0-3.0*tt1)*s(i) -
|
|
2009
|
+
1 beta*delta*(1.0-tt1)*th1*sd(i)
|
|
2010
|
+
w(i) = (w(i)*power(r1,-alhi))/g
|
|
2011
|
+
w(i) = w(i) * xk(i)
|
|
2012
|
+
ww = ww + w(i)
|
|
2013
|
+
|
|
2014
|
+
y(i) = beti*(1.0d0-3.0d0*tt1)*th1 -
|
|
2015
|
+
1 beta*delta*(1.0d0-tt1)*th1
|
|
2016
|
+
y(i) = (y(i)*power(r1,beti-1.0d0)) * xk(i) / g
|
|
2017
|
+
yy = yy + y(i)
|
|
2018
|
+
|
|
2019
|
+
z(i) = 1.0d0-besq*(1.0d0-(2.0d0*beti))*tt1
|
|
2020
|
+
z(i) = (z(i)*power(r1,-gami)) * xk(i) / g
|
|
2021
|
+
zz = zz + z(i)
|
|
2022
|
+
|
|
2023
|
+
a1 = (beta*(delta-3.0d0)-3.0d0*deli-besq*alhi*gami) /
|
|
2024
|
+
1 (2.0d0*besq*besq*(2.0d0-alhi)*(1.0d0-alhi)*alhi)
|
|
2025
|
+
a2 = 1+((beta*(delta-3.0d0)-3.0d0*deli-besq*alhi*ter) /
|
|
2026
|
+
1 (2.0d0*besq*(1.0d0-alhi)*alhi))
|
|
2027
|
+
a2 = -a2
|
|
2028
|
+
|
|
2029
|
+
a4 = 1.0d0+((ter-2.0d0)/(2.0d0*alhi))
|
|
2030
|
+
f1 = a1 + a2 + a4
|
|
2031
|
+
|
|
2032
|
+
coex(i) = ((2.0d0-alhi)*(1.0d0-alhi)*power(r1,-alhi) *
|
|
2033
|
+
1 f1*xk(i))
|
|
2034
|
+
Cvcoex = Cvcoex + coex(i)
|
|
2035
|
+
END IF
|
|
2036
|
+
deli = 0.5d0
|
|
2037
|
+
30 CONTINUE
|
|
2038
|
+
|
|
2039
|
+
d2PdT2 = aa * ww
|
|
2040
|
+
d2PdMT = yy + aa*cc*ww
|
|
2041
|
+
d2PdM2 = zz/aa + 2.0d0*cc*yy + cc*cc*aa*ww
|
|
2042
|
+
|
|
2043
|
+
RETURN
|
|
2044
|
+
END
|
|
2045
|
+
|
|
2046
|
+
***************************************************************
|
|
2047
|
+
|
|
2048
|
+
*** conver - Transforms T,D to parametric variables r,theta
|
|
2049
|
+
* according to the revised and scaled equations.
|
|
2050
|
+
|
|
2051
|
+
SUBROUTINE conver(rho,Tee,amu,th1,r1,rho1s,s1,rhodi,error1)
|
|
2052
|
+
|
|
2053
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
2054
|
+
|
|
2055
|
+
DOUBLE PRECISION s1(2), sd(2)
|
|
2056
|
+
|
|
2057
|
+
COMMON /coefs/ a(20), q(20), x(11)
|
|
2058
|
+
COMMON /crits/ Tc, rhoc, Pc, Pcon, Ucon, Scon, dPcon
|
|
2059
|
+
**************************************************************
|
|
2060
|
+
COMMON /abc2/ r, th
|
|
2061
|
+
**************************************************************
|
|
2062
|
+
|
|
2063
|
+
SAVE
|
|
2064
|
+
|
|
2065
|
+
EQUIVALENCE (beta,a(6)), (delta,a(11)), (xk1, a(12)),
|
|
2066
|
+
1 (cc, a(1)), (alhi, q(15)), (alpha,q(10)),
|
|
2067
|
+
2 (besq,a(9)), (p11, q(9)), (deli, q(14)),
|
|
2068
|
+
3 (p1w, q(18)), (p2w, q(19)), (p4w, q(20)),
|
|
2069
|
+
4 (aa, a(10)), (xk0, a(7)), (s00, a(17)),
|
|
2070
|
+
5 (s20, a(18)), (betai,q(16))
|
|
2071
|
+
|
|
2072
|
+
|
|
2073
|
+
Tstar = Tee + 1.0d0
|
|
2074
|
+
dtstin = 1.0d0 - (1.0d0 / Tstar)
|
|
2075
|
+
r1 = dtstin
|
|
2076
|
+
|
|
2077
|
+
IF (dtstin .LE. 0.0d0) THEN
|
|
2078
|
+
r1 = dtstin/(1.0d0-besq)
|
|
2079
|
+
th1 = 1.0d0
|
|
2080
|
+
ELSE
|
|
2081
|
+
th1 = 0.0d0
|
|
2082
|
+
END IF
|
|
2083
|
+
|
|
2084
|
+
CALL ss(r1,th1,s1,sd)
|
|
2085
|
+
|
|
2086
|
+
rhodi = 1.0d0 + p11*dtstin
|
|
2087
|
+
rhodit = rhodi + cc*s1(1) + cc*s1(2)
|
|
2088
|
+
drho = rho - rhodit
|
|
2089
|
+
amu = 0.0d0
|
|
2090
|
+
|
|
2091
|
+
IF (dtstin .LE. 0.0d0) THEN
|
|
2092
|
+
rho1co = xk0*power(r1,beta) + xk1*power(r1,betai)
|
|
2093
|
+
twofaz = rho1co
|
|
2094
|
+
IF (DABS(drho) .LE. twofaz) THEN
|
|
2095
|
+
rho1s = DSIGN(rho1co,drho) + cc*s1(1)
|
|
2096
|
+
th1 = DSIGN(1.00d0,drho)
|
|
2097
|
+
error1 = 1.0d0
|
|
2098
|
+
r = r1
|
|
2099
|
+
th = th1
|
|
2100
|
+
RETURN
|
|
2101
|
+
END IF
|
|
2102
|
+
END IF
|
|
2103
|
+
|
|
2104
|
+
IF (drho .EQ. 0.0d0) THEN
|
|
2105
|
+
th1 = 0.0d0
|
|
2106
|
+
r1 = dtstin
|
|
2107
|
+
rho1s = cc*s1(1)
|
|
2108
|
+
END IF
|
|
2109
|
+
|
|
2110
|
+
*** rule for first pass ***
|
|
2111
|
+
|
|
2112
|
+
y1 = dtstin
|
|
2113
|
+
den1 = rho - rhodit
|
|
2114
|
+
|
|
2115
|
+
CALL rtheta(r1,th1,den1,y1)
|
|
2116
|
+
|
|
2117
|
+
tt = th1*th1
|
|
2118
|
+
amu = aa*power(r1,beta*delta)*th1*(1.0d0-tt)
|
|
2119
|
+
y1 = dtstin + cc*amu
|
|
2120
|
+
|
|
2121
|
+
CALL ss(r1,th1,s1,sd)
|
|
2122
|
+
|
|
2123
|
+
rhoweg = xk1*power(r1,betai)*th1 + cc*s1(2)
|
|
2124
|
+
rho1s = den1 + cc*s1(1) + rhoweg
|
|
2125
|
+
error1 = rho - rhodi - rho1s
|
|
2126
|
+
r = r1
|
|
2127
|
+
th = th1
|
|
2128
|
+
|
|
2129
|
+
IF (DABS(error1) .LT. 1.0d-5) THEN
|
|
2130
|
+
RETURN
|
|
2131
|
+
END IF
|
|
2132
|
+
|
|
2133
|
+
*** rule for second pass ***
|
|
2134
|
+
|
|
2135
|
+
den12 = rho - rhodi - cc*s1(1) + rhoweg
|
|
2136
|
+
|
|
2137
|
+
IF (den12 .EQ. den1) den12 = den1 - 1.0d-6
|
|
2138
|
+
|
|
2139
|
+
CALL rtheta(r1,th1,den12,y1)
|
|
2140
|
+
|
|
2141
|
+
tt = th1*th1
|
|
2142
|
+
amu = aa*power(r1,beta*delta)*th1*(1.0d0-tt)
|
|
2143
|
+
y1 = dtstin + cc*amu
|
|
2144
|
+
|
|
2145
|
+
CALL ss(r1,th1,s1,sd)
|
|
2146
|
+
|
|
2147
|
+
rhoweg = xk1*power(r1,betai)*th1 + cc*s1(2)
|
|
2148
|
+
rho1s2 = den12 + cc*s1(1) + rhoweg
|
|
2149
|
+
error2 = rho - rhodi - rho1s2
|
|
2150
|
+
|
|
2151
|
+
IF (DABS(error2) .LE. 1.0d-5) THEN
|
|
2152
|
+
r = r1
|
|
2153
|
+
th = th1
|
|
2154
|
+
error1 = error2
|
|
2155
|
+
rho1s = rho1s2
|
|
2156
|
+
RETURN
|
|
2157
|
+
END IF
|
|
2158
|
+
|
|
2159
|
+
*** rule for nth pass ***
|
|
2160
|
+
|
|
2161
|
+
den2 = den12
|
|
2162
|
+
|
|
2163
|
+
DO 44 isig=1,10
|
|
2164
|
+
slope = (error2-error1)/(den2-den1)
|
|
2165
|
+
hold = den2
|
|
2166
|
+
den2 = den1 - (error1/slope)
|
|
2167
|
+
|
|
2168
|
+
CALL rtheta(r1,th1,den2,y1)
|
|
2169
|
+
|
|
2170
|
+
tt = th1*th1
|
|
2171
|
+
amu = aa*power(r1,beta*delta)*th1*(1.0d0-tt)
|
|
2172
|
+
y1 = dtstin + cc*amu
|
|
2173
|
+
|
|
2174
|
+
CALL ss(r1,th1,s1,sd)
|
|
2175
|
+
|
|
2176
|
+
rhoweg = xk1*power(r1,betai)*th1 + cc*s1(2)
|
|
2177
|
+
rho1s = den2 + cc*s1(1) + rhoweg
|
|
2178
|
+
error1 = error2
|
|
2179
|
+
error2 = rho - rhodi - rho1s
|
|
2180
|
+
r = r1
|
|
2181
|
+
th = th1
|
|
2182
|
+
|
|
2183
|
+
IF (DABS(error2) .LT. 1.0d-6) RETURN
|
|
2184
|
+
|
|
2185
|
+
den1 = hold
|
|
2186
|
+
|
|
2187
|
+
44 CONTINUE
|
|
2188
|
+
|
|
2189
|
+
RETURN
|
|
2190
|
+
END
|
|
2191
|
+
|
|
2192
|
+
*********************************************************************
|
|
2193
|
+
|
|
2194
|
+
*** rtheta - Fits data for 1.0 < theta < 1.000001.
|
|
2195
|
+
* Solves:
|
|
2196
|
+
* rho = em*theta*(r**beta)
|
|
2197
|
+
* Tee = r*(1.0d0-besq*theta*theta)
|
|
2198
|
+
*
|
|
2199
|
+
* Routine given by Moldover (1978): Jour. Res. NBS, v. 84, n. 4,
|
|
2200
|
+
* p. 329 - 334.
|
|
2201
|
+
|
|
2202
|
+
|
|
2203
|
+
SUBROUTINE rtheta(r,theta,rho,Tee)
|
|
2204
|
+
|
|
2205
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
2206
|
+
|
|
2207
|
+
COMMON /coefs/ a(20), q(20), x(11)
|
|
2208
|
+
|
|
2209
|
+
SAVE
|
|
2210
|
+
|
|
2211
|
+
EQUIVALENCE (beta,a(6)), (em,a(7)), (besq,a(9))
|
|
2212
|
+
|
|
2213
|
+
|
|
2214
|
+
IF (em .LE. 0.0d0 .OR. besq .LE. 1.0d0) GO TO 600
|
|
2215
|
+
|
|
2216
|
+
absrho = DABS(rho)
|
|
2217
|
+
|
|
2218
|
+
IF (absrho .LT. 1.0d-12) GO TO 600
|
|
2219
|
+
|
|
2220
|
+
bee = DSQRT(besq)
|
|
2221
|
+
|
|
2222
|
+
IF (DABS(Tee) .LT. 1.0d-12) GO TO 495
|
|
2223
|
+
IF (Tee .LT. 0.0d0) THEN
|
|
2224
|
+
z = 1.0d0-(1.0d0-bee)*Tee/(1.0d0-besq) *
|
|
2225
|
+
1 power(em/absrho,1.0d0/beta)
|
|
2226
|
+
ELSE
|
|
2227
|
+
z = power(1.0d0+Tee*power(em/bee/absrho,1.0d0/beta),
|
|
2228
|
+
1 -beta)
|
|
2229
|
+
END IF
|
|
2230
|
+
IF (z .GT. 1.00234d0*bee) GO TO 496
|
|
2231
|
+
|
|
2232
|
+
c = -rho*bee/em/power(DABS(Tee),beta)
|
|
2233
|
+
z = DSIGN(z,rho)
|
|
2234
|
+
|
|
2235
|
+
DO 500 n=1,16
|
|
2236
|
+
z2 = z*z
|
|
2237
|
+
z3 = 1.0d0 - z2
|
|
2238
|
+
dz = z3*(z+c*power(DABS(z3),beta))/(z3+2.0d0*beta*z2)
|
|
2239
|
+
z = z - dz
|
|
2240
|
+
|
|
2241
|
+
IF (DABS(dz/z) .LT. 1.0d-12) GO TO 498
|
|
2242
|
+
|
|
2243
|
+
500 CONTINUE
|
|
2244
|
+
|
|
2245
|
+
601 IF (DABS(theta) .GT. 1.0001d0) theta = theta/DABS(theta)
|
|
2246
|
+
RETURN
|
|
2247
|
+
|
|
2248
|
+
498 theta = z/bee
|
|
2249
|
+
r = Tee/(1.0d0-z*z)
|
|
2250
|
+
r = DABS(r)
|
|
2251
|
+
RETURN
|
|
2252
|
+
|
|
2253
|
+
495 theta = DSIGN(1.0d0,rho)/bee
|
|
2254
|
+
r = power(rho/(em*theta),1.0d0/beta)
|
|
2255
|
+
RETURN
|
|
2256
|
+
|
|
2257
|
+
496 theta = DSIGN(1.0d0,rho)
|
|
2258
|
+
r = Tee/(1.0d0-besq)
|
|
2259
|
+
r = DABS(r)
|
|
2260
|
+
RETURN
|
|
2261
|
+
|
|
2262
|
+
600 IF (DABS(Tee) .LT. 1.0d-12) GO TO 601
|
|
2263
|
+
|
|
2264
|
+
IF (Tee .LT. 0.0d0) GO TO 496
|
|
2265
|
+
|
|
2266
|
+
theta = 1.0d-12
|
|
2267
|
+
r = Tee
|
|
2268
|
+
RETURN
|
|
2269
|
+
|
|
2270
|
+
END
|
|
2271
|
+
|
|
2272
|
+
*********************************************************************
|
|
2273
|
+
|
|
2274
|
+
*** ss - Computes terms of the summation that defines dPotl/dT
|
|
2275
|
+
* and the 1st derivative of the theta (s) square polynomial.
|
|
2276
|
+
|
|
2277
|
+
SUBROUTINE ss(r,th,s,sd)
|
|
2278
|
+
|
|
2279
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
2280
|
+
|
|
2281
|
+
DOUBLE PRECISION s(2), sd(2), sx(2)
|
|
2282
|
+
|
|
2283
|
+
COMMON /coefs/ a(20), q(20), x(11)
|
|
2284
|
+
***************************************************************
|
|
2285
|
+
COMMON /abc1/ dPdM
|
|
2286
|
+
***************************************************************
|
|
2287
|
+
|
|
2288
|
+
SAVE
|
|
2289
|
+
|
|
2290
|
+
EQUIVALENCE (alpha,q(10)), (beta,a(6)), (besq,a(9)),
|
|
2291
|
+
1 (delta,a(11)), (deli,q(14)), (alhi,q(15)),
|
|
2292
|
+
2 (beti, q(16)), (gami,q(17)), (p00, q(11)),
|
|
2293
|
+
3 (p01, q(18)), (s00, a(17)), (s20, a(18)),
|
|
2294
|
+
4 (s01, a(19)), (s21, a(20))
|
|
2295
|
+
|
|
2296
|
+
tt = th*th
|
|
2297
|
+
sx(1) = s00 + s20*tt
|
|
2298
|
+
sd(1) = 2.0d0*s20*th
|
|
2299
|
+
sx(2) = s01 + s21*tt
|
|
2300
|
+
sd(2) = 2.0d0*s21*th
|
|
2301
|
+
s(1) = sx(1)*a(10)*a(7)*power(r,1.0d0-alpha)
|
|
2302
|
+
s(2) = sx(2)*a(10)*a(12)*power(r,1.0d0-alhi)
|
|
2303
|
+
|
|
2304
|
+
dPdM = power(r,beta)*a(7)*th + a(1)*power(r,1.0d0-alpha)*
|
|
2305
|
+
1 a(10)*a(7)*sx(1) +
|
|
2306
|
+
2 power(r,beti)*a(12)*th + a(1)*power(r,1.0d0-alhi)*
|
|
2307
|
+
3 a(10)*a(12)*sx(2)
|
|
2308
|
+
|
|
2309
|
+
RETURN
|
|
2310
|
+
END
|
|
2311
|
+
|
|
2312
|
+
*****************************************************************
|
|
2313
|
+
|
|
2314
|
+
*** thmLVS - Calculates thermodynamic and transport properties
|
|
2315
|
+
* of critical region H2O using the Levelt Sengers, et al
|
|
2316
|
+
* (1983) equation of state.
|
|
2317
|
+
|
|
2318
|
+
SUBROUTINE thmLVS(isat,T,r1,th1)
|
|
2319
|
+
|
|
2320
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
2321
|
+
|
|
2322
|
+
DOUBLE PRECISION s(2), xk(2), sd(2)
|
|
2323
|
+
|
|
2324
|
+
COMMON /coefs/ a(20), q(20), x(11)
|
|
2325
|
+
COMMON /crits/ Tc, rhoc, Pc, Pcon, Ucon, Scon, dPcon
|
|
2326
|
+
COMMON /therm/ AE, GE, U, H, Entrop, Cp, Cv, betaw, alphw,
|
|
2327
|
+
1 heat, Speed
|
|
2328
|
+
COMMON /satur/ Dliq, Dvap, DH2O, iphase
|
|
2329
|
+
COMMON /deriv/ amu, s, Pw, Tw, dTw, dM0dT, dP0dT,
|
|
2330
|
+
1 d2PdM2, d2PdMT, d2PdT2, p0th, p1th, xk
|
|
2331
|
+
COMMON /deri2/ dPdD, dPdT
|
|
2332
|
+
*************************************************************
|
|
2333
|
+
COMMON /abc1/ dPdM
|
|
2334
|
+
COMMON /abc3/ dPdTcd
|
|
2335
|
+
*************************************************************
|
|
2336
|
+
|
|
2337
|
+
SAVE
|
|
2338
|
+
|
|
2339
|
+
EQUIVALENCE (pw2, a(4)), (pw3, a(2)), (besq, a(9)),
|
|
2340
|
+
1 (amc, a(13)), (am1, a(14)), (am2, a(15)),
|
|
2341
|
+
2 (aa, a(10)), (xk0, a(7)), (am3, a(16)),
|
|
2342
|
+
3 (xk1, a(12)), (pw11,q(9)), (alpha, q(10)),
|
|
2343
|
+
4 (alhi,q(15)), (pw1, a(5))
|
|
2344
|
+
|
|
2345
|
+
d2P0dT = 2.0d0*pw2 + 6.0d0*pw3*dTw
|
|
2346
|
+
d2M0dT = 2.0d0*am2 + 6.0d0*am3*dTw
|
|
2347
|
+
|
|
2348
|
+
dP0dT = pw1+dTw*(2.0d0*pw2+3.0d0*pw3*dTw)
|
|
2349
|
+
dM0dT = am1+dTw*(2.0d0*am2+3.0d0*am3*dTw)
|
|
2350
|
+
|
|
2351
|
+
IF (isat .EQ. 0) THEN
|
|
2352
|
+
rho = DH2O / rhoc
|
|
2353
|
+
Uw = dP0dT-rho*dM0dT+pw11*amu+s(1)+s(2)
|
|
2354
|
+
ELSE
|
|
2355
|
+
rho = th1 * (xk0*power(r1,a(6)) + xk1*power(r1,q(16)))
|
|
2356
|
+
1 + a(1)*(s(1)+s(2))
|
|
2357
|
+
rho = 1.0d0+pw11*dTw+rho
|
|
2358
|
+
Uw = dP0dT-rho*dM0dT+pw11*amu+s(1)+s(2)
|
|
2359
|
+
DH2O = rho * rhoc
|
|
2360
|
+
dPdT2 = Pw - Tw*(Uw+rho*dM0dT)
|
|
2361
|
+
heat = 1.0d3*T*(Pcon*dPdT2)*(1.0d0/Dvap-1.0d0/Dliq)
|
|
2362
|
+
|
|
2363
|
+
CALL ss(r1,th1,s,sd)
|
|
2364
|
+
CALL aux(r1,th1,d2PdT2,d2PdMT,d2PdM2,aa,xk,sd,Cvcoex)
|
|
2365
|
+
IF (r1 .NE. 0.0d0) THEN
|
|
2366
|
+
dPdD = dPcon * DH2O * T / d2PdM2
|
|
2367
|
+
END IF
|
|
2368
|
+
END IF
|
|
2369
|
+
|
|
2370
|
+
IF (r1 .NE. 0.0d0) THEN
|
|
2371
|
+
dPdTcd = dP0dT+pw11*(amu-rho/d2PdM2)+s(1)+s(2) -
|
|
2372
|
+
1 d2PdMT*rho/d2PdM2
|
|
2373
|
+
dPwdTw = Pw - Tw*dPdTcd
|
|
2374
|
+
dPdTal = Pcon * dPwdTw
|
|
2375
|
+
|
|
2376
|
+
CviTw2 = d2P0dT - rho*d2M0dT + d2PdT2 -
|
|
2377
|
+
1 (pw11+d2PdMT)*(pw11+d2PdMT)/d2PdM2
|
|
2378
|
+
Cvw = CviTw2 * Tw*Tw
|
|
2379
|
+
Cpw = Cvw + d2PdM2*dPwdTw*dPwdTw / (rho*rho)
|
|
2380
|
+
betaw = 1.0d0 / (DH2O*dPdD)
|
|
2381
|
+
alphw = betaw * dPdTal
|
|
2382
|
+
Speed = 1.0d3 * DSQRT(Cpw/Cvw*dPdD)
|
|
2383
|
+
ELSE
|
|
2384
|
+
Cvw = 1.0d0
|
|
2385
|
+
Cpw = 1.0d0
|
|
2386
|
+
betaw = 1.0d0
|
|
2387
|
+
alphw = 1.0d0
|
|
2388
|
+
Speed = 0.0d0
|
|
2389
|
+
END IF
|
|
2390
|
+
|
|
2391
|
+
Hw = Pw - Tw*Uw
|
|
2392
|
+
Sw = Hw - rho*(amu+amc+dTw*(am1+dTw*(am2+dTw*am3)))
|
|
2393
|
+
|
|
2394
|
+
Scond = Scon/DH2O
|
|
2395
|
+
|
|
2396
|
+
U = Uw * Ucon/DH2O
|
|
2397
|
+
H = Hw * Scond * T
|
|
2398
|
+
entrop = Sw * Scond
|
|
2399
|
+
AE = U - T * entrop
|
|
2400
|
+
GE = H - T * entrop
|
|
2401
|
+
Cv = Cvw * Scond
|
|
2402
|
+
Cp = Cpw * Scond
|
|
2403
|
+
|
|
2404
|
+
RETURN
|
|
2405
|
+
END
|
|
2406
|
+
|
|
2407
|
+
********************************************************
|
|
2408
|
+
|
|
2409
|
+
*** dalLVS - Computes/returns (d(alpha)/dt)p(D,T,alpha)
|
|
2410
|
+
* for the Levelt Sengers et al. (1983)
|
|
2411
|
+
* equation of state. Note that D (kg/m**3),
|
|
2412
|
+
* T (degK), P (MPa), alpha (degK**-1).
|
|
2413
|
+
|
|
2414
|
+
|
|
2415
|
+
DOUBLE PRECISION FUNCTION dalLVS(D,T,P,alpha)
|
|
2416
|
+
|
|
2417
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
2418
|
+
|
|
2419
|
+
DOUBLE PRECISION sss(2), xk(2), s(2), dsdT(2), sp(2), dspdT(2),
|
|
2420
|
+
1 k(2), calpha(2), cbeta(2), cgamma(2),
|
|
2421
|
+
2 u(2), v(2), w(2), dudT(2), dvdT(2), dwdT(2)
|
|
2422
|
+
|
|
2423
|
+
COMMON /coefs/ aa(20), qq(20), xx(11)
|
|
2424
|
+
COMMON /crits/ Tc, Dc, Pc, Pcon, Ucon, Scon, dPcon
|
|
2425
|
+
COMMON /deriv/ amu, sss, Pw, Tw, dTw, dM0dT, dP0dT,
|
|
2426
|
+
1 d2PdM2, d2PdMT, d2PdT2, p0th, p1th, xk
|
|
2427
|
+
COMMON /deri2/ dPdD, dPdT
|
|
2428
|
+
*************************************************************
|
|
2429
|
+
COMMON /abc1/ dPdM
|
|
2430
|
+
COMMON /abc2/ r,th
|
|
2431
|
+
COMMON /abc3/ dPdTcd
|
|
2432
|
+
*************************************************************
|
|
2433
|
+
|
|
2434
|
+
SAVE
|
|
2435
|
+
|
|
2436
|
+
EQUIVALENCE (a, aa(10)), (c, aa(1)), (delta, aa(11)),
|
|
2437
|
+
1 (bsq, aa(9)), (P11, qq(9)), (Delta1, qq(14)),
|
|
2438
|
+
2 (P1, aa(5)), (P2, aa(4)), (P3, aa(2)),
|
|
2439
|
+
3 (s00, aa(17)), (s01, aa(19)), (s20, aa(18)),
|
|
2440
|
+
4 (s21, aa(20))
|
|
2441
|
+
|
|
2442
|
+
|
|
2443
|
+
IF (r .EQ. 0.0d0) THEN
|
|
2444
|
+
dalLVS = 1.0d6
|
|
2445
|
+
RETURN
|
|
2446
|
+
END IF
|
|
2447
|
+
|
|
2448
|
+
k(1) = aa(7)
|
|
2449
|
+
k(2) = aa(12)
|
|
2450
|
+
calpha(1) = qq(10)
|
|
2451
|
+
calpha(2) = qq(15)
|
|
2452
|
+
cbeta(1) = aa(6)
|
|
2453
|
+
cbeta(2) = qq(16)
|
|
2454
|
+
cgamma(1) = cbeta(1)*(delta - 1.0d0)
|
|
2455
|
+
cgamma(2) = cgamma(1) - Delta1
|
|
2456
|
+
delT = (T - Tc) / T
|
|
2457
|
+
|
|
2458
|
+
s(1) = s00 + s20*th**2
|
|
2459
|
+
s(2) = s01 + s21*th**2
|
|
2460
|
+
sp(1) = 2.0d0*s20*th
|
|
2461
|
+
sp(2) = 2.0d0*s21*th
|
|
2462
|
+
|
|
2463
|
+
*********************************************************************
|
|
2464
|
+
***
|
|
2465
|
+
*** Compute drdT and d0dT from solution of the linear system
|
|
2466
|
+
***
|
|
2467
|
+
*** ax = b
|
|
2468
|
+
***
|
|
2469
|
+
*** d(dPdM)/dT = -D/Dc*alpha - P11*Tc/T**2 = ar1*drdT + a01*d0dT = b1
|
|
2470
|
+
*** d(delT)/dT = Tc/T**2 = ar2*drdT + a02*d0dT = b2
|
|
2471
|
+
***
|
|
2472
|
+
|
|
2473
|
+
b1 = -D/Dc*alpha - P11*Tc/T/T
|
|
2474
|
+
b2 = Tc/T**2
|
|
2475
|
+
|
|
2476
|
+
ar1 = 0.0d0
|
|
2477
|
+
a01 = 0.0d0
|
|
2478
|
+
DO 10 i = 1,2
|
|
2479
|
+
ar1 = ar1 + k(i) * (cbeta(i)*th*power(r,cbeta(i)-1.0d0) +
|
|
2480
|
+
1 a*c*(1.0d0 - calpha(i))*power(r,-calpha(i))*s(i))
|
|
2481
|
+
a01 = a01 + k(i) * (power(r,cbeta(i)) + a*c*sp(i)*
|
|
2482
|
+
1 power(r,1.0d0-calpha(i)))
|
|
2483
|
+
10 CONTINUE
|
|
2484
|
+
|
|
2485
|
+
ar2 = 1.0d0 - bsq*th**2 - a*c*cbeta(1)*delta*
|
|
2486
|
+
1 (1.0d0 - th**2)*th*power(r,(cbeta(1)*delta - 1.0d0))
|
|
2487
|
+
a02 = 3.0d0*a*c*th**2*power(r,cbeta(1)*delta) -
|
|
2488
|
+
1 2.0d0*bsq*r*th - a*c*power(r,cbeta(1)*delta)
|
|
2489
|
+
|
|
2490
|
+
*********************************************************************
|
|
2491
|
+
*** solve the linear system with simplistic GE w/ partial pivoting
|
|
2492
|
+
*********************************************************************
|
|
2493
|
+
|
|
2494
|
+
IF (DABS(ar1) .GT. DABS(ar2)) THEN
|
|
2495
|
+
amult = -ar2 / ar1
|
|
2496
|
+
d0dT = (b2 + amult*b1) / (a02 + amult*a01)
|
|
2497
|
+
drdT = (b1 - a01*d0dT) / ar1
|
|
2498
|
+
ELSE
|
|
2499
|
+
amult = -ar1 / ar2
|
|
2500
|
+
d0dT = (b1 + amult*b2) / (a01 + amult*a02)
|
|
2501
|
+
drdT = (b2 - a02*d0dT) / ar2
|
|
2502
|
+
END IF
|
|
2503
|
+
|
|
2504
|
+
*********************************************************************
|
|
2505
|
+
***
|
|
2506
|
+
*** Compute theta polynomials and their tempertaure derivatives
|
|
2507
|
+
***
|
|
2508
|
+
|
|
2509
|
+
dsdT(1) = 2.0d0*s20*th*d0dT
|
|
2510
|
+
dsdT(2) = 2.0d0*s21*th*d0dT
|
|
2511
|
+
dspdT(1) = 2.0d0*s20*d0dT
|
|
2512
|
+
dspdT(2) = 2.0d0*s21*d0dT
|
|
2513
|
+
|
|
2514
|
+
q = 1.0d0 + (bsq*(2.0d0*cbeta(1)*delta - 1.0d0) - 3.0d0)*
|
|
2515
|
+
1 th**2 - bsq*(2.0d0*cbeta(1)*delta - 3.0d0)*th**4
|
|
2516
|
+
|
|
2517
|
+
dqdT = 2.0d0*(bsq*(2.0d0*cbeta(1)*delta - 1.0d0) - 3.0d0)*
|
|
2518
|
+
1 th*d0dT - 4.0d0*bsq*(2.0d0*cbeta(1)*delta - 3.0d0)*
|
|
2519
|
+
2 th**3*d0dT
|
|
2520
|
+
|
|
2521
|
+
DO 20 i = 1,2
|
|
2522
|
+
u(i) = (1.0d0 - bsq*(1.0d0 - 2.0d0*cbeta(i))*th**2) / q
|
|
2523
|
+
dudT(i) = (-2.0d0*bsq*(1.0d0 - 2.0d0*cbeta(i))*th*d0dT -
|
|
2524
|
+
1 u(i)*dqdT) / q
|
|
2525
|
+
v(i) = ((cbeta(i) - cbeta(1)*delta)*th +
|
|
2526
|
+
1 (cbeta(1)*delta - 3.0d0*cbeta(i))*th**3) / q
|
|
2527
|
+
dvdT(i) = ((cbeta(i) - cbeta(1)*delta)*d0dT +
|
|
2528
|
+
1 3.0d0*(cbeta(1)*delta - 3.0d0*cbeta(i))*
|
|
2529
|
+
2 th**2*d0dT - v(i)*dqdT) / q
|
|
2530
|
+
w(i) = ((1.0d0 - calpha(i))*(1.0d0 - 3.0d0*th**2)*
|
|
2531
|
+
1 s(i) - cbeta(1)*delta*(th - th**3)*sp(i)) / q
|
|
2532
|
+
dwdT(i) = ((1.0d0 - calpha(i))*((1.0d0 - 3.0d0*th**2)*
|
|
2533
|
+
1 dsdT(i) - 6.0d0*th*s(i)*d0dT) - cbeta(1)*
|
|
2534
|
+
2 delta*((th - th**3)*dspdT(i) + sp(i)*
|
|
2535
|
+
3 (d0dT - 3.0d0*th**2*d0dT)) - w(i)*dqdT) / q
|
|
2536
|
+
20 CONTINUE
|
|
2537
|
+
|
|
2538
|
+
*********************************************************************
|
|
2539
|
+
***
|
|
2540
|
+
*** Compute dP0dTT, ddelMT, dPdTT, dPdMMT, dPdMTT, dPPTT
|
|
2541
|
+
***
|
|
2542
|
+
|
|
2543
|
+
dP0dTT = Tc/T**2 * (2.0d0*P2 + 6.0d0*P3*delT)
|
|
2544
|
+
|
|
2545
|
+
ddelMT = a*power(r,cbeta(1)*delta)* (cbeta(1)*delta*th/r*
|
|
2546
|
+
1 (1.0d0 - th**2)*drdT + (1.0d0 - 3.0d0*th**2)*d0dT)
|
|
2547
|
+
|
|
2548
|
+
dPdTT = 0.0d0
|
|
2549
|
+
dPdMMT = 0.0d0
|
|
2550
|
+
dPdMTT = 0.0d0
|
|
2551
|
+
DO 30 i = 1,2
|
|
2552
|
+
dPdTT = dPdTT + a*k(i) * (power(r,1.0d0-calpha(i))*
|
|
2553
|
+
1 dsdT(i) + s(i)*(1.0d0 - calpha(i))*
|
|
2554
|
+
2 power(r,-calpha(i))*drdT)
|
|
2555
|
+
|
|
2556
|
+
dPdMMT = dPdMMT + k(i) * ((power(r,-cgamma(i))*dudT(i) -
|
|
2557
|
+
1 u(i)*cgamma(i)*power(r,-1.0d0-cgamma(i))*drdT) /
|
|
2558
|
+
2 a + 2.0d0*c*(power(r,cbeta(i)-1.0d0)*dvdT(i) +
|
|
2559
|
+
3 v(i)*(cbeta(i) - 1.0d0)*power(r,cbeta(i)-2.0d0)*
|
|
2560
|
+
4 drdT) + a*c**2*(power(r,-calpha(i))*dwdT(i) -
|
|
2561
|
+
5 calpha(i)*w(i)*power(r,-1.0d0-calpha(i))*drdT))
|
|
2562
|
+
|
|
2563
|
+
dPdMTT = dPdMTT + k(i) * (power(r,cbeta(i)-1.0d0)*dvdT(i) +
|
|
2564
|
+
1 v(i)*(cbeta(i) - 1.0d0)*power(r,cbeta(i)-2.0d0)*
|
|
2565
|
+
2 drdT + a*c*(power(r,-calpha(i))*dwdT(i) -
|
|
2566
|
+
3 calpha(i)*power(r,-1.0d0-calpha(i))*drdT*w(i)))
|
|
2567
|
+
|
|
2568
|
+
30 CONTINUE
|
|
2569
|
+
|
|
2570
|
+
dPPTT = dP0dTT + dPdTT + P11*ddelMT - D/Dc*dPdMTT/d2PdM2 +
|
|
2571
|
+
1 (P11 + d2PdMT)*(D/Dc*alpha/d2PdM2 +
|
|
2572
|
+
2 D/Dc*dPdMMT/d2PdM2**2)
|
|
2573
|
+
|
|
2574
|
+
pterm = P/Pc + dPdTcd
|
|
2575
|
+
|
|
2576
|
+
*** compute (d(alpha)/dT)P
|
|
2577
|
+
|
|
2578
|
+
dalLVS = Tc*Dc**2/D**2/T**2 * (-2.0d0/T*d2PdM2*pterm +
|
|
2579
|
+
1 2.0d0*alpha*d2PdM2*pterm + pterm*dPdMMT +
|
|
2580
|
+
2 d2PdM2*dPPTT)
|
|
2581
|
+
|
|
2582
|
+
RETURN
|
|
2583
|
+
|
|
2584
|
+
END
|
|
2585
|
+
|
|
2586
|
+
*********************************************************************
|
|
2587
|
+
|
|
2588
|
+
*** backup - Save Pfind COMMON values during saturation check.
|
|
2589
|
+
|
|
2590
|
+
SUBROUTINE backup
|
|
2591
|
+
|
|
2592
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
2593
|
+
|
|
2594
|
+
DOUBLE PRECISION s(2), xk(2)
|
|
2595
|
+
|
|
2596
|
+
COMMON /satur/ Dliq, Dvap, DH2O, iphase
|
|
2597
|
+
COMMON /param/ r1, th1
|
|
2598
|
+
COMMON /deriv/ amu, s, Pw, Tw, dTw, dM0dT, dP0dT,
|
|
2599
|
+
1 d2PdM2, d2PdMT, d2PdT2, p0th, p1th, xk
|
|
2600
|
+
COMMON /deri2/ dPdD, dPdT
|
|
2601
|
+
COMMON /store/ sav2, sav3, sav4, sav5, sav6, sav7, sav8,
|
|
2602
|
+
1 sav9, sav10, sav11, sav12, sav13, sav14, sav15,
|
|
2603
|
+
2 sav16, sav17, sav18, sav19, isav1
|
|
2604
|
+
|
|
2605
|
+
SAVE
|
|
2606
|
+
|
|
2607
|
+
|
|
2608
|
+
isav1 = iphase
|
|
2609
|
+
|
|
2610
|
+
sav2 = r1
|
|
2611
|
+
sav3 = th1
|
|
2612
|
+
|
|
2613
|
+
sav4 = amu
|
|
2614
|
+
sav5 = s(1)
|
|
2615
|
+
sav6 = s(2)
|
|
2616
|
+
sav7 = Pw
|
|
2617
|
+
sav8 = Tw
|
|
2618
|
+
sav9 = dTw
|
|
2619
|
+
sav10 = dM0dT
|
|
2620
|
+
sav11 = dP0dT
|
|
2621
|
+
sav12 = d2PdM2
|
|
2622
|
+
sav13 = d2PdMT
|
|
2623
|
+
sav14 = d2PdT2
|
|
2624
|
+
sav15 = p0th
|
|
2625
|
+
sav16 = p1th
|
|
2626
|
+
sav17 = xk(1)
|
|
2627
|
+
sav18 = xk(2)
|
|
2628
|
+
|
|
2629
|
+
sav19 = dPdD
|
|
2630
|
+
|
|
2631
|
+
RETURN
|
|
2632
|
+
END
|
|
2633
|
+
|
|
2634
|
+
*********************************************************************
|
|
2635
|
+
|
|
2636
|
+
*** restor - Restore Pfind COMMON values after saturation check.
|
|
2637
|
+
|
|
2638
|
+
|
|
2639
|
+
SUBROUTINE restor
|
|
2640
|
+
|
|
2641
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
2642
|
+
|
|
2643
|
+
DOUBLE PRECISION s(2), xk(2)
|
|
2644
|
+
|
|
2645
|
+
COMMON /satur/ Dliq, Dvap, DH2O, iphase
|
|
2646
|
+
COMMON /param/ r1, th1
|
|
2647
|
+
COMMON /deriv/ amu, s, Pw, Tw, dTw, dM0dT, dP0dT,
|
|
2648
|
+
1 d2PdM2, d2PdMT, d2PdT2, p0th, p1th, xk
|
|
2649
|
+
COMMON /deri2/ dPdD, dPdT
|
|
2650
|
+
COMMON /store/ sav2, sav3, sav4, sav5, sav6, sav7, sav8,
|
|
2651
|
+
1 sav9, sav10, sav11, sav12, sav13, sav14, sav15,
|
|
2652
|
+
2 sav16, sav17, sav18, sav19, isav1
|
|
2653
|
+
|
|
2654
|
+
SAVE
|
|
2655
|
+
|
|
2656
|
+
|
|
2657
|
+
iphase = isav1
|
|
2658
|
+
|
|
2659
|
+
r1 = sav2
|
|
2660
|
+
th1 = sav3
|
|
2661
|
+
|
|
2662
|
+
amu = sav4
|
|
2663
|
+
s(1) = sav5
|
|
2664
|
+
s(2) = sav6
|
|
2665
|
+
Pw = sav7
|
|
2666
|
+
Tw = sav8
|
|
2667
|
+
dTw = sav9
|
|
2668
|
+
dM0dT = sav10
|
|
2669
|
+
dP0dT = sav11
|
|
2670
|
+
d2PdM2 = sav12
|
|
2671
|
+
d2PdMT = sav13
|
|
2672
|
+
d2PdT2 = sav14
|
|
2673
|
+
p0th = sav15
|
|
2674
|
+
p1th = sav16
|
|
2675
|
+
xk(1) = sav17
|
|
2676
|
+
xk(2) = sav18
|
|
2677
|
+
|
|
2678
|
+
dPdD = sav19
|
|
2679
|
+
|
|
2680
|
+
RETURN
|
|
2681
|
+
END
|
|
2682
|
+
|
|
2683
|
+
**********************************************************************
|
|
2684
|
+
|
|
2685
|
+
*** load - Load thermodynamic and transport property values from
|
|
2686
|
+
* ptemp into props.
|
|
2687
|
+
|
|
2688
|
+
SUBROUTINE load(phase,ptemp,props)
|
|
2689
|
+
|
|
2690
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
2691
|
+
|
|
2692
|
+
PARAMETER (NPROP = 23, NPROP2 = 46)
|
|
2693
|
+
|
|
2694
|
+
DOUBLE PRECISION ptemp(NPROP), props(NPROP2)
|
|
2695
|
+
INTEGER phase, key(NPROP,2)
|
|
2696
|
+
|
|
2697
|
+
SAVE
|
|
2698
|
+
|
|
2699
|
+
DATA key
|
|
2700
|
+
1 / 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23,
|
|
2701
|
+
2 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45,
|
|
2702
|
+
3 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24,
|
|
2703
|
+
4 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46 /
|
|
2704
|
+
|
|
2705
|
+
|
|
2706
|
+
DO 10 i = 1,NPROP
|
|
2707
|
+
10 props(key(i,phase)) = ptemp(i)
|
|
2708
|
+
|
|
2709
|
+
RETURN
|
|
2710
|
+
END
|
|
2711
|
+
|
|
2712
|
+
******************************************************************
|
|
2713
|
+
|
|
2714
|
+
*** tpset - Dimension triple point U, S, H, A, G values (in J/g from
|
|
2715
|
+
* Table 2, Helgeson & Kirkham, 1974a) into user-specified units.
|
|
2716
|
+
|
|
2717
|
+
SUBROUTINE tpset
|
|
2718
|
+
|
|
2719
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
2720
|
+
|
|
2721
|
+
COMMON /units/ ft, fd, fvd, fvk, fs, fp, fh, fst, fc
|
|
2722
|
+
COMMON /tpoint/ Utripl, Stripl, Htripl, Atripl, Gtripl,
|
|
2723
|
+
1 Ttripl, Ptripl, Dltrip, Dvtrip
|
|
2724
|
+
|
|
2725
|
+
SAVE
|
|
2726
|
+
|
|
2727
|
+
DATA Utr, Str, Htr, Atr, Gtr
|
|
2728
|
+
1 / -15766.0d0, 3.5144d0, -15971.0d0, -12870.0d0, -13073.0d0 /
|
|
2729
|
+
|
|
2730
|
+
|
|
2731
|
+
Utripl = Utr * fh
|
|
2732
|
+
Stripl = Str * fh
|
|
2733
|
+
Htripl = Htr * fh
|
|
2734
|
+
Atripl = Atr * fh
|
|
2735
|
+
Gtripl = Gtr * fh
|
|
2736
|
+
|
|
2737
|
+
END
|
|
2738
|
+
|
|
2739
|
+
****************************************************************************
|
|
2740
|
+
|
|
2741
|
+
*** triple - Convert U, S, H, A, G values computed with reference to
|
|
2742
|
+
* zero triple point properties (Haar et al., 1984;
|
|
2743
|
+
* Levelt Sengers et al., 1983) into values referenced to
|
|
2744
|
+
* triple point properties given by Helgeson and Kirkham, 1974a.
|
|
2745
|
+
|
|
2746
|
+
SUBROUTINE triple(T,wpzero)
|
|
2747
|
+
|
|
2748
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
2749
|
+
|
|
2750
|
+
PARAMETER (NPROP = 23)
|
|
2751
|
+
|
|
2752
|
+
DOUBLE PRECISION wpzero(NPROP)
|
|
2753
|
+
INTEGER A, G, S, U, H
|
|
2754
|
+
|
|
2755
|
+
COMMON /tpoint/ Utr, Str, Htr, Atr, Gtr,
|
|
2756
|
+
1 Ttripl, Ptripl, Dltrip, Dvtrip
|
|
2757
|
+
|
|
2758
|
+
SAVE
|
|
2759
|
+
|
|
2760
|
+
DATA A, G, S, U, H
|
|
2761
|
+
1 / 1, 2, 3, 4, 5 /
|
|
2762
|
+
|
|
2763
|
+
|
|
2764
|
+
wpzero(S) = wpzero(S) + Str
|
|
2765
|
+
|
|
2766
|
+
TS = T*wpzero(S) - Ttripl*Str
|
|
2767
|
+
|
|
2768
|
+
wpzero(G) = wpzero(H) - TS + Gtr
|
|
2769
|
+
wpzero(A) = wpzero(U) - TS + Atr
|
|
2770
|
+
|
|
2771
|
+
wpzero(H) = wpzero(H) + Htr
|
|
2772
|
+
wpzero(U) = wpzero(U) + Utr
|
|
2773
|
+
|
|
2774
|
+
END
|
|
2775
|
+
|
|
2776
|
+
*********************************************************************
|
|
2777
|
+
|
|
2778
|
+
*** power - Returns base**exp utilizing the intrinsic FORTRAN
|
|
2779
|
+
* exponentiation function in such a manner so as to
|
|
2780
|
+
* insure computation of machine-independent values
|
|
2781
|
+
* for all defined exponentiations. Attempted undefined
|
|
2782
|
+
* exponentiations produce an error message and cause
|
|
2783
|
+
* program termination.
|
|
2784
|
+
|
|
2785
|
+
DOUBLE PRECISION FUNCTION power(base,exp)
|
|
2786
|
+
|
|
2787
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
2788
|
+
|
|
2789
|
+
INTEGER rterm, wterm, reacf, pronf, tabf, plotf(6)
|
|
2790
|
+
|
|
2791
|
+
COMMON /io/ rterm, wterm, iconf, reacf, pronf, tabf, plotf
|
|
2792
|
+
|
|
2793
|
+
SAVE
|
|
2794
|
+
|
|
2795
|
+
DATA TOL / 1.0d-7 /
|
|
2796
|
+
|
|
2797
|
+
|
|
2798
|
+
IF (base .GT. 0.0d0) THEN
|
|
2799
|
+
power = base**exp
|
|
2800
|
+
ELSE
|
|
2801
|
+
IF (DABS(base) .GT. TOL) THEN
|
|
2802
|
+
IF (DBLE(INT(exp)) .NE. exp) THEN
|
|
2803
|
+
WRITE(wterm,10) base, exp
|
|
2804
|
+
10 FORMAT(/,' neg base ** real exp is complex',
|
|
2805
|
+
1 /,' base,exp: ',2e20.13,/)
|
|
2806
|
+
STOP
|
|
2807
|
+
ELSE
|
|
2808
|
+
IF (MOD(exp,2.0d0) .EQ. 0.0d0) THEN
|
|
2809
|
+
power = (-base)**exp
|
|
2810
|
+
ELSE
|
|
2811
|
+
power = -((-base)**exp)
|
|
2812
|
+
END IF
|
|
2813
|
+
END IF
|
|
2814
|
+
ELSE
|
|
2815
|
+
IF (exp .GT. 0.0d0) THEN
|
|
2816
|
+
power = 0.0d0
|
|
2817
|
+
ELSE
|
|
2818
|
+
WRITE(wterm,20) base, exp
|
|
2819
|
+
20 FORMAT(/,' zero base ** (exp <= 0) is undefined',
|
|
2820
|
+
1 /,' base,exp: ',2e20.13)
|
|
2821
|
+
STOP
|
|
2822
|
+
END IF
|
|
2823
|
+
END IF
|
|
2824
|
+
END IF
|
|
2825
|
+
|
|
2826
|
+
RETURN
|
|
2827
|
+
END
|
|
2828
|
+
|
|
2829
|
+
***********************************************************************
|
|
2830
|
+
|
|
2831
|
+
*** TdegK - Returns input temperature t converted from
|
|
2832
|
+
* user-specified units to degK.
|
|
2833
|
+
|
|
2834
|
+
DOUBLE PRECISION FUNCTION TdegK(it,t)
|
|
2835
|
+
|
|
2836
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
2837
|
+
|
|
2838
|
+
SAVE
|
|
2839
|
+
|
|
2840
|
+
|
|
2841
|
+
GO TO (1,2,3,4), it
|
|
2842
|
+
|
|
2843
|
+
1 TdegK = t
|
|
2844
|
+
RETURN
|
|
2845
|
+
|
|
2846
|
+
2 TdegK = t + 273.15d0
|
|
2847
|
+
RETURN
|
|
2848
|
+
|
|
2849
|
+
3 TdegK = t / 1.8d0
|
|
2850
|
+
RETURN
|
|
2851
|
+
|
|
2852
|
+
4 TdegK = (t + 459.67d0) / 1.8d0
|
|
2853
|
+
RETURN
|
|
2854
|
+
|
|
2855
|
+
END
|
|
2856
|
+
|
|
2857
|
+
***********************************************************************
|
|
2858
|
+
|
|
2859
|
+
*** TdegUS - Returns input temperature t converted
|
|
2860
|
+
* from degK to user-specified units.
|
|
2861
|
+
|
|
2862
|
+
DOUBLE PRECISION FUNCTION TdegUS(it,t)
|
|
2863
|
+
|
|
2864
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
2865
|
+
|
|
2866
|
+
SAVE
|
|
2867
|
+
|
|
2868
|
+
|
|
2869
|
+
GO TO (1,2,3,4), it
|
|
2870
|
+
|
|
2871
|
+
1 TdegUS = t
|
|
2872
|
+
RETURN
|
|
2873
|
+
|
|
2874
|
+
2 TdegUS = t - 273.15d0
|
|
2875
|
+
RETURN
|
|
2876
|
+
|
|
2877
|
+
3 TdegUS = t * 1.8d0
|
|
2878
|
+
RETURN
|
|
2879
|
+
|
|
2880
|
+
4 TdegUS = t * 1.8d0 - 459.67d0
|
|
2881
|
+
RETURN
|
|
2882
|
+
|
|
2883
|
+
END
|
|
2884
|
+
|
|
2885
|
+
*********************************************************************
|
|
2886
|
+
|
|
2887
|
+
*** dim[HGK,LVS] - Dimensioning routines for H2O88.
|
|
2888
|
+
|
|
2889
|
+
*********************************************************************
|
|
2890
|
+
|
|
2891
|
+
*** dimHGK - Dimensions thermodynamic and transport property values
|
|
2892
|
+
* computed from the HGK equation of state per user-specified
|
|
2893
|
+
* choice of units.
|
|
2894
|
+
|
|
2895
|
+
SUBROUTINE dimHGK(isat,itripl,t,p,d,epseqn)
|
|
2896
|
+
|
|
2897
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
2898
|
+
|
|
2899
|
+
PARAMETER (NPROP = 23)
|
|
2900
|
+
|
|
2901
|
+
DOUBLE PRECISION wprops(NPROP), wpliq(NPROP)
|
|
2902
|
+
INTEGER aw, gw, sw, uw, hw, cvw, cpw, vsw, alw, bew,
|
|
2903
|
+
1 diw, viw, tcw, stw, tdw, Prw, vikw, albew,
|
|
2904
|
+
2 ZBw, YBw, QBw, dalwdT, XBw
|
|
2905
|
+
INTEGER epseqn
|
|
2906
|
+
|
|
2907
|
+
COMMON /units/ ft, fd, fvd, fvk, fs, fp, fh, fst, fc
|
|
2908
|
+
COMMON /fcts/ ad, gd, sd, ud, hd, cvd, cpd, dpdt, dvdt, dpdd,
|
|
2909
|
+
1 cjtt, cjth
|
|
2910
|
+
COMMON /aconst/ wm, gascon, tz, aa, z, dz, y, uref, sref
|
|
2911
|
+
COMMON /RTcurr/ rt
|
|
2912
|
+
COMMON /wpvals/ wprops, wpliq
|
|
2913
|
+
|
|
2914
|
+
SAVE
|
|
2915
|
+
|
|
2916
|
+
DATA aw, gw, sw, uw, hw, cvw, cpw, vsw, alw, bew, diw, viw,
|
|
2917
|
+
1 tcw, stw, tdw, Prw, vikw, albew, ZBw, YBw, QBw,
|
|
2918
|
+
2 dalwdT, XBw
|
|
2919
|
+
3 / 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
|
|
2920
|
+
4 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 /
|
|
2921
|
+
|
|
2922
|
+
|
|
2923
|
+
wprops(aw) = ad * rt * fh
|
|
2924
|
+
wprops(gw) = gd * rt * fh
|
|
2925
|
+
wprops(sw) = sd * gascon * fh * ft
|
|
2926
|
+
wprops(uw) = ud * rt * fh
|
|
2927
|
+
wprops(hw) = hd * rt * fh
|
|
2928
|
+
wprops(cvw) = cvd * gascon * fh * ft
|
|
2929
|
+
wprops(cpw) = cpd * gascon * fh * ft
|
|
2930
|
+
wprops(vsw) = DSQRT(DABS(cpd*dpdd*1.0d3/cvd)) * fs
|
|
2931
|
+
wprops(bew) = 1.0d0 / (d * dpdd * fp)
|
|
2932
|
+
wprops(alw) = d * dvdt
|
|
2933
|
+
wprops(dalwdT) = dalHGK(d,t,wprops(alw))
|
|
2934
|
+
|
|
2935
|
+
|
|
2936
|
+
pbars = p*1.0d1
|
|
2937
|
+
dkgm3 = d * 1.0d3
|
|
2938
|
+
betaPa = wprops(bew)*fp / 1.0d6
|
|
2939
|
+
betab = wprops(bew)*fp / 1.0d1
|
|
2940
|
+
CpJKkg = wprops(cpw)/fh/ft * 1.0d3
|
|
2941
|
+
|
|
2942
|
+
wprops(viw) = viscos(t,pbars,dkgm3,betaPa) * fvd
|
|
2943
|
+
wprops(tcw) = thcond(t,pbars,dkgm3,wprops(alw),betaPa) * fc * ft
|
|
2944
|
+
IF ((isat .EQ. 0) .OR. (isat .EQ. 2)) THEN
|
|
2945
|
+
wprops(stw) = 0.0d0
|
|
2946
|
+
ELSE
|
|
2947
|
+
wprops(stw) = surten(t) * fst
|
|
2948
|
+
END IF
|
|
2949
|
+
|
|
2950
|
+
CALL Born92(t,pbars,dkgm3/1.0d3,betab,wprops(alw),wprops(dalwdT),
|
|
2951
|
+
1 wprops(diw),wprops(ZBw),wprops(QBw),wprops(YBw),
|
|
2952
|
+
2 wprops(XBw),epseqn)
|
|
2953
|
+
|
|
2954
|
+
wprops(tdw) = wprops(tcw)/fc/ft / (dkgm3 * CpJKkg) * fvk
|
|
2955
|
+
IF (wprops(tcw) .NE. 0.0d0) THEN
|
|
2956
|
+
wprops(Prw) = wprops(viw)/fvd * CpJKkg / (wprops(tcw)/fc/ft)
|
|
2957
|
+
ELSE
|
|
2958
|
+
wprops(Prw) = 0.0d0
|
|
2959
|
+
END IF
|
|
2960
|
+
wprops(vikw) = wprops(viw)/fvd / dkgm3 * fvk
|
|
2961
|
+
wprops(albew) = wprops(alw) / wprops(bew)
|
|
2962
|
+
|
|
2963
|
+
IF (itripl .EQ. 1) CALL triple(t,wprops)
|
|
2964
|
+
|
|
2965
|
+
END
|
|
2966
|
+
|
|
2967
|
+
*****************************************************************************
|
|
2968
|
+
|
|
2969
|
+
*** dimLVS - Dimension critical region properties per user-specs
|
|
2970
|
+
* and load into tprops.
|
|
2971
|
+
|
|
2972
|
+
SUBROUTINE dimLVS(isat,itripl,theta,T,Pbars,dl,dv,tprops,epseqn)
|
|
2973
|
+
|
|
2974
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
2975
|
+
|
|
2976
|
+
PARAMETER (NPROP = 23)
|
|
2977
|
+
|
|
2978
|
+
DOUBLE PRECISION tprops(NPROP)
|
|
2979
|
+
INTEGER aw, gw, sw, uw, hw, cvw, cpw, vsw, alw, bew,
|
|
2980
|
+
1 diw, viw, tcw, stw, tdw, Prw, vikw, albew,
|
|
2981
|
+
2 ZBw, YBw, QBw, dalwdT, XBw
|
|
2982
|
+
INTEGER epseqn
|
|
2983
|
+
|
|
2984
|
+
|
|
2985
|
+
COMMON /therm/ AE, GE, U, H, Entrop, Cp, Cv, betaw, alphw,
|
|
2986
|
+
1 heat, Speed
|
|
2987
|
+
COMMON /satur/ Dliq, Dvap, DH2O, iphase
|
|
2988
|
+
COMMON /units/ ft, fd, fvd, fvk, fs, fp, fh, fst, fc
|
|
2989
|
+
*****************************************************************
|
|
2990
|
+
COMMON /abc2/ r, th
|
|
2991
|
+
*****************************************************************
|
|
2992
|
+
|
|
2993
|
+
SAVE
|
|
2994
|
+
|
|
2995
|
+
DATA aw, gw, sw, uw, hw, cvw, cpw, vsw, alw, bew, diw, viw,
|
|
2996
|
+
1 tcw, stw, tdw, Prw, vikw, albew, ZBw, YBw, QBw,
|
|
2997
|
+
2 dalwdT, XBw
|
|
2998
|
+
3 / 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
|
|
2999
|
+
4 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 /
|
|
3000
|
+
|
|
3001
|
+
|
|
3002
|
+
IF (isat .EQ. 1) THEN
|
|
3003
|
+
dv = Dvap
|
|
3004
|
+
dl = Dliq
|
|
3005
|
+
END IF
|
|
3006
|
+
|
|
3007
|
+
tprops(aw) = AE * fh
|
|
3008
|
+
tprops(gw) = GE * fh
|
|
3009
|
+
tprops(sw) = Entrop * fh * ft
|
|
3010
|
+
tprops(uw) = U * fh
|
|
3011
|
+
tprops(hw) = H * fh
|
|
3012
|
+
tprops(cvw) = Cv * fh * ft
|
|
3013
|
+
tprops(cpw) = Cp * fh * ft
|
|
3014
|
+
tprops(vsw) = Speed * fs
|
|
3015
|
+
tprops(bew) = betaw / fp
|
|
3016
|
+
tprops(alw) = alphw
|
|
3017
|
+
*****************************************************************
|
|
3018
|
+
th = theta
|
|
3019
|
+
tprops(dalwdT) = dalLVS(DH2O,T,Pbars/1.0d1,tprops(alw))
|
|
3020
|
+
*****************************************************************
|
|
3021
|
+
|
|
3022
|
+
CpJKkg = Cp * 1.0d3
|
|
3023
|
+
betaPa = betaw / 1.0d6
|
|
3024
|
+
betab = betaw / 1.0d1
|
|
3025
|
+
|
|
3026
|
+
IF (DABS(theta) .NE. 1.0d0) THEN
|
|
3027
|
+
dkgm3 = DH2O
|
|
3028
|
+
tprops(stw) = 0.0d0
|
|
3029
|
+
ELSE
|
|
3030
|
+
IF (theta .LT. 0.0d0) THEN
|
|
3031
|
+
dkgm3 = Dvap
|
|
3032
|
+
tprops(stw) = 0.0d0
|
|
3033
|
+
ELSE
|
|
3034
|
+
dkgm3 = Dliq
|
|
3035
|
+
dkgm3 = Dliq
|
|
3036
|
+
tprops(stw) = surten(T) * fst
|
|
3037
|
+
END IF
|
|
3038
|
+
END IF
|
|
3039
|
+
|
|
3040
|
+
CALL Born92(T,Pbars,dkgm3/1.0d3,betab,tprops(alw),tprops(dalwdT),
|
|
3041
|
+
1 tprops(diw),tprops(ZBw),tprops(QBw),tprops(YBw),
|
|
3042
|
+
2 tprops(XBw),epseqn)
|
|
3043
|
+
|
|
3044
|
+
tprops(viw) = viscos(T,Pbars,dkgm3,betaPa) * fvd
|
|
3045
|
+
tprops(tcw) = thcond(T,Pbars,dkgm3,tprops(alw),betaPa) * fc * ft
|
|
3046
|
+
|
|
3047
|
+
tprops(tdw) = tprops(tcw)/fc/ft / (dkgm3 * CpJKkg) * fvk
|
|
3048
|
+
tprops(Prw) = tprops(viw)/fvd * CpJKkg / (tprops(tcw)/fc/ft)
|
|
3049
|
+
tprops(vikw) = tprops(viw)/fvd / dkgm3 * fvk
|
|
3050
|
+
tprops(albew) = tprops(alw) / tprops(bew)
|
|
3051
|
+
|
|
3052
|
+
IF (itripl .EQ. 1) CALL triple(T,tprops)
|
|
3053
|
+
|
|
3054
|
+
END
|
|
3055
|
+
|
|
3056
|
+
**********************************************************************
|
|
3057
|
+
|
|
3058
|
+
*** tran88 - Set of FORTRAN77 functions that compute transport
|
|
3059
|
+
* properties of fluid H2O. Input state parameters
|
|
3060
|
+
* should be computed from the Haar et al. (1984)
|
|
3061
|
+
* and Levelt Sengers et al. (1983) equations of state in
|
|
3062
|
+
* order to facilitate comparision with published tabular
|
|
3063
|
+
* values referenced below for each function.
|
|
3064
|
+
*
|
|
3065
|
+
**********************************************************************
|
|
3066
|
+
|
|
3067
|
+
*** programmer: James W. Johnson
|
|
3068
|
+
*** abandoned: 20 January 1988
|
|
3069
|
+
|
|
3070
|
+
**********************************************************************
|
|
3071
|
+
|
|
3072
|
+
*** viscos - Returns dynamic viscosity of H2O in kg/m*s (= Pa*s)
|
|
3073
|
+
* if Tk, Pbars falls within the validity region (specified
|
|
3074
|
+
* by the initial IF statement) of the Watson et al. (1980)
|
|
3075
|
+
* equation; otherwise returns zero. See equations 3.1-2 and
|
|
3076
|
+
* 4.1-5 and Tables 1, 6, and 8 from Sengers and
|
|
3077
|
+
* Kamgar-Parsi (1984).
|
|
3078
|
+
|
|
3079
|
+
DOUBLE PRECISION FUNCTION viscos(Tk,Pbars,Dkgm3,betaPa)
|
|
3080
|
+
|
|
3081
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
3082
|
+
|
|
3083
|
+
PARAMETER (Tstar = 647.270d0)
|
|
3084
|
+
PARAMETER (Dstar = 317.763d0)
|
|
3085
|
+
PARAMETER (Pstar = 22.1150d6)
|
|
3086
|
+
PARAMETER (ustar = 1.0d-6)
|
|
3087
|
+
|
|
3088
|
+
DOUBLE PRECISION a(4), b(6,7)
|
|
3089
|
+
|
|
3090
|
+
SAVE
|
|
3091
|
+
|
|
3092
|
+
DATA a / 0.0181583d0, 0.0177624d0, 0.0105287d0, -0.0036744d0 /
|
|
3093
|
+
|
|
3094
|
+
DATA b / 0.5132047d0, 0.3205656d0, 0.0d0, 0.0d0,
|
|
3095
|
+
1 -0.7782567d0, 0.1885447d0, 0.2151778d0, 0.7317883d0,
|
|
3096
|
+
2 1.2410440d0, 1.4767830d0, 0.0d0, 0.0d0,
|
|
3097
|
+
3 -0.2818107d0, -1.0707860d0, -1.2631840d0, 0.0d0,
|
|
3098
|
+
4 0.0d0, 0.0d0, 0.1778064d0, 0.4605040d0,
|
|
3099
|
+
5 0.2340379d0, -0.4924179d0, 0.0d0, 0.0d0,
|
|
3100
|
+
6 -0.0417661d0, 0.0d0, 0.0d0, 0.1600435d0,
|
|
3101
|
+
7 0.0d0, 0.0d0, 0.0d0, -0.01578386d0,
|
|
3102
|
+
8 0.0d0, 0.0d0, 0.0d0, 0.0d0,
|
|
3103
|
+
9 0.0d0, 0.0d0, 0.0d0, -0.003629481d0,
|
|
3104
|
+
1 0.0d0, 0.0d0 /
|
|
3105
|
+
|
|
3106
|
+
DATA TOL /1.0d-2/
|
|
3107
|
+
|
|
3108
|
+
|
|
3109
|
+
viscos = 0.0d0
|
|
3110
|
+
TdegC = Tk - 273.15d0
|
|
3111
|
+
|
|
3112
|
+
IF ((Pbars .GT. 5000.0d0+TOL) .OR.
|
|
3113
|
+
1 ((Pbars .GT. 3500.0d0+TOL).AND.(TdegC .GT. 150.0d0+TOL)).OR.
|
|
3114
|
+
2 ((Pbars .GT. 3000.0d0+TOL).AND.(TdegC .GT. 600.0d0+TOL)) .OR.
|
|
3115
|
+
3 (TdegC .GT. 900.0d0+TOL)) RETURN
|
|
3116
|
+
|
|
3117
|
+
T = Tk / Tstar
|
|
3118
|
+
D = Dkgm3 / Dstar
|
|
3119
|
+
|
|
3120
|
+
sum = 0.0d0
|
|
3121
|
+
DO 10 i=0,3
|
|
3122
|
+
10 sum = sum + a(i+1)/T**i
|
|
3123
|
+
u0 = ustar * DSQRT(T) / sum
|
|
3124
|
+
|
|
3125
|
+
sum = 0.0d0
|
|
3126
|
+
DO 20 i=0,5
|
|
3127
|
+
DO 20 j=0,6
|
|
3128
|
+
20 sum = sum + b(i+1,j+1) * (1.0d0/T-1)**i * (D-1)**j
|
|
3129
|
+
u1 = DEXP(D*sum)
|
|
3130
|
+
|
|
3131
|
+
IF ((0.997d0 .LE. T) .AND. (T .LE. 1.0082d0) .AND.
|
|
3132
|
+
1 (0.755d0 .LE. D) .AND. (D .LE. 1.2900d0)) THEN
|
|
3133
|
+
xt = Pstar/Dstar**2 * betaPa * Dkgm3**2
|
|
3134
|
+
IF (xt .LT. 22.0d0) THEN
|
|
3135
|
+
u2 = 1.0d0
|
|
3136
|
+
ELSE
|
|
3137
|
+
u2 = 0.922 * power(xt,0.0263d0)
|
|
3138
|
+
END IF
|
|
3139
|
+
ELSE
|
|
3140
|
+
u2 = 1.0d0
|
|
3141
|
+
END IF
|
|
3142
|
+
|
|
3143
|
+
viscos = u0 * u1 * u2
|
|
3144
|
+
|
|
3145
|
+
RETURN
|
|
3146
|
+
END
|
|
3147
|
+
|
|
3148
|
+
*****************************************************************
|
|
3149
|
+
|
|
3150
|
+
*** thcond - Returns thermal conductivity of H2O in J/m*deg*s (=W/m*deg)
|
|
3151
|
+
* if Tk, Pbars falls within the validity region (specified
|
|
3152
|
+
* by the initial IF statement) of the Sengers et al. (1984)
|
|
3153
|
+
* equation; returns zero otherwise. See equations 3.2-14
|
|
3154
|
+
* and tables 2-5 and I.5-6 from the above reference.
|
|
3155
|
+
|
|
3156
|
+
DOUBLE PRECISION FUNCTION thcond(Tk,Pbars,Dkgm3,alph,betaPa)
|
|
3157
|
+
|
|
3158
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
3159
|
+
|
|
3160
|
+
PARAMETER (Tstar = 647.270d0)
|
|
3161
|
+
PARAMETER (Dstar = 317.763d0)
|
|
3162
|
+
PARAMETER (Pstar = 22.1150d6)
|
|
3163
|
+
PARAMETER (ustar = 1.0d-6)
|
|
3164
|
+
PARAMETER (C = 3.7711d-8)
|
|
3165
|
+
|
|
3166
|
+
DOUBLE PRECISION aL(4), au(4), bL(6,5), bu(5,6), L0, L1, L2
|
|
3167
|
+
|
|
3168
|
+
SAVE
|
|
3169
|
+
|
|
3170
|
+
DATA aL / 0.2022230d1, 0.1411166d2, 0.5255970d1, -0.2018700d1 /
|
|
3171
|
+
|
|
3172
|
+
DATA au / 0.0181583d0, 0.0177624d0, 0.0105287d0, -0.0036744d0 /
|
|
3173
|
+
|
|
3174
|
+
DATA bL / 1.329304600d0, -0.404524370d0, 0.244094900d0,
|
|
3175
|
+
1 0.018660751d0, -0.129610680d0, 0.044809953d0,
|
|
3176
|
+
2 1.701836300d0, -2.215684500d0, 1.651105700d0,
|
|
3177
|
+
3 -0.767360020d0, 0.372833440d0, -0.112031600d0,
|
|
3178
|
+
4 5.224615800d0, -1.012411100d1, 4.987468700d0,
|
|
3179
|
+
5 -0.272976940d0, -0.430833930d0, 0.133338490d0,
|
|
3180
|
+
6 8.712767500d0, -9.500061100d0, 4.378660600d0,
|
|
3181
|
+
7 -0.917837820d0, 0.0d0, 0.0d0,
|
|
3182
|
+
8 -1.852599900d0, 0.934046900d0, 0.0d0,
|
|
3183
|
+
9 0.0d0, 0.0d0, 0.0d0 /
|
|
3184
|
+
|
|
3185
|
+
DATA bu / 0.5019380d0, 0.2356220d0, -0.2746370d0, 0.1458310d0,
|
|
3186
|
+
1 -0.0270448d0, 0.1628880d0, 0.7893930d0, -0.7435390d0,
|
|
3187
|
+
2 0.2631290d0, -0.0253093d0, -0.1303560d0, 0.6736650d0,
|
|
3188
|
+
3 -0.9594560d0, 0.3472470d0, -0.0267758d0, 0.9079190d0,
|
|
3189
|
+
4 1.2075520d0, -0.6873430d0, 0.2134860d0, -0.0822904d0,
|
|
3190
|
+
5 -0.5511190d0, 0.0670665d0, -0.4970890d0, 0.1007540d0,
|
|
3191
|
+
6 0.0602253d0, 0.1465430d0, -0.0843370d0, 0.1952860d0,
|
|
3192
|
+
7 -0.0329320d0, -0.0202595d0 /
|
|
3193
|
+
|
|
3194
|
+
DATA TOL /1.0d-2/
|
|
3195
|
+
|
|
3196
|
+
|
|
3197
|
+
thcond = 0.0d0
|
|
3198
|
+
TdegC = Tk - 273.15d0
|
|
3199
|
+
|
|
3200
|
+
IF ((Pbars .GT. 4000.0d0+TOL) .OR.
|
|
3201
|
+
1 ((Pbars .GT. 2000.0d0+TOL).AND.(TdegC .GT. 125.0d0+TOL)).OR.
|
|
3202
|
+
2 ((Pbars .GT. 1500.0d0+TOL).AND.(TdegC .GT. 400.0d0+TOL)).OR.
|
|
3203
|
+
3 (TdegC .GT. 800.0d0+TOL)) RETURN
|
|
3204
|
+
|
|
3205
|
+
T = Tk / Tstar
|
|
3206
|
+
D = Dkgm3 / Dstar
|
|
3207
|
+
|
|
3208
|
+
sum = 0.0d0
|
|
3209
|
+
DO 10 i=0,3
|
|
3210
|
+
10 sum = sum + aL(i+1)/T**i
|
|
3211
|
+
L0 = DSQRT(T) / sum
|
|
3212
|
+
|
|
3213
|
+
sum = 0.0d0
|
|
3214
|
+
DO 20 i=0,4
|
|
3215
|
+
DO 20 j=0,5
|
|
3216
|
+
20 sum = sum + bL(j+1,i+1) * (1.0d0/T-1)**i * (D-1)**j
|
|
3217
|
+
L1 = DEXP(D*sum)
|
|
3218
|
+
|
|
3219
|
+
sum = 0.0d0
|
|
3220
|
+
DO 40 i=0,3
|
|
3221
|
+
40 sum = sum + au(i+1)/T**i
|
|
3222
|
+
u0 = ustar * DSQRT(T) / sum
|
|
3223
|
+
|
|
3224
|
+
sum = 0.0d0
|
|
3225
|
+
DO 50 i=0,5
|
|
3226
|
+
DO 50 j=0,4
|
|
3227
|
+
50 sum = sum + bu(j+1,i+1) * (1.0d0/T-1)**i * (D-1)**j
|
|
3228
|
+
u1 = DEXP(D*sum)
|
|
3229
|
+
|
|
3230
|
+
xt = Pstar/Dstar**2 * betaPa * Dkgm3**2
|
|
3231
|
+
dPdT = Tstar/Pstar * alph/betaPa
|
|
3232
|
+
|
|
3233
|
+
L2 = C / (u0*u1) * (T/D)**2 * dPdT**2 * power(xt,0.4678d0) *
|
|
3234
|
+
1 DSQRT(D) * DEXP(-18.66d0*(T-1)**2 - (D-1)**4)
|
|
3235
|
+
|
|
3236
|
+
thcond = L0 * L1 + L2
|
|
3237
|
+
|
|
3238
|
+
RETURN
|
|
3239
|
+
END
|
|
3240
|
+
|
|
3241
|
+
******************************************************************
|
|
3242
|
+
|
|
3243
|
+
*** surten - Returns the surface tension of vapor-saturated liquid
|
|
3244
|
+
* H2O in MPa*cm (converted from N/m) as computed from
|
|
3245
|
+
* the Vargaftik et al. (1983) equation. See equations
|
|
3246
|
+
* 10.1-2, Kestin et al. (1984); compare also equation
|
|
3247
|
+
* C.5 and table 11, Haar et al. (1984).
|
|
3248
|
+
|
|
3249
|
+
DOUBLE PRECISION FUNCTION surten(Tsatur)
|
|
3250
|
+
|
|
3251
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
3252
|
+
|
|
3253
|
+
PARAMETER (Ttripl = 273.16d0)
|
|
3254
|
+
PARAMETER (Tcrit = 647.067d0)
|
|
3255
|
+
PARAMETER (Tstar = 647.27d0)
|
|
3256
|
+
PARAMETER (Tcstar = 0.999686d0)
|
|
3257
|
+
PARAMETER (v = 1.256d0)
|
|
3258
|
+
PARAMETER (B = -0.625d0)
|
|
3259
|
+
PARAMETER (stref = 0.2358d0)
|
|
3260
|
+
PARAMETER (FPTOL = 1.0d-10)
|
|
3261
|
+
|
|
3262
|
+
SAVE
|
|
3263
|
+
|
|
3264
|
+
|
|
3265
|
+
IF ((Tsatur .LT. Ttripl) .OR. (Tsatur .GT. Tcrit)) THEN
|
|
3266
|
+
surten = 0.0d0
|
|
3267
|
+
RETURN
|
|
3268
|
+
END IF
|
|
3269
|
+
|
|
3270
|
+
IF (Tsatur .GE. Tcrit-FPTOL) THEN
|
|
3271
|
+
Tnorm = 0.0d0
|
|
3272
|
+
ELSE
|
|
3273
|
+
Tnorm = (Tcstar - Tsatur/Tstar) / Tcstar
|
|
3274
|
+
END IF
|
|
3275
|
+
|
|
3276
|
+
surten = stref * power(Tnorm,v) * (1.0d0 + B*Tnorm)
|
|
3277
|
+
|
|
3278
|
+
RETURN
|
|
3279
|
+
|
|
3280
|
+
END
|
|
3281
|
+
|
|
3282
|
+
******************************************************************
|
|
3283
|
+
|
|
3284
|
+
*** Born92 - Computes the Z, Q, Y, and X Born functions at TK, Pbars.
|
|
3285
|
+
***
|
|
3286
|
+
*** epseqn = 1 ...... use Helgeson-Kirkham (1974) equation
|
|
3287
|
+
*** epseqn = 2 ...... use Pitzer (1983) equation
|
|
3288
|
+
*** epseqn = 3 ...... use Uematsu-Franck (1980) equation
|
|
3289
|
+
*** epseqn = 4 ...... use Johnson-Norton (1991) equation
|
|
3290
|
+
*** epseqn = 5 ...... use Archer-Wang (1990) equation
|
|
3291
|
+
***
|
|
3292
|
+
SUBROUTINE Born92(TK,Pbars,Dgcm3,betab,alphaK,daldT,
|
|
3293
|
+
1 eps,Z,Q,Y,X,epseqn)
|
|
3294
|
+
|
|
3295
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
3296
|
+
|
|
3297
|
+
PARAMETER (TMAX = 1000.0d0, PMAX = 5000.0d0, TOL = 1.0d-3)
|
|
3298
|
+
|
|
3299
|
+
INTEGER epseqn
|
|
3300
|
+
|
|
3301
|
+
SAVE
|
|
3302
|
+
|
|
3303
|
+
|
|
3304
|
+
eps = 0.0d0
|
|
3305
|
+
Z = 0.0d0
|
|
3306
|
+
Y = 0.0d0
|
|
3307
|
+
Q = 0.0d0
|
|
3308
|
+
X = 0.0d0
|
|
3309
|
+
|
|
3310
|
+
TdegC = TK - 273.15d0
|
|
3311
|
+
|
|
3312
|
+
*** The following line can be commented out to facilitate probably
|
|
3313
|
+
*** unreliable, yet potentially useful, predictive calculations
|
|
3314
|
+
*** at state conditions beyond the validity limits of the aqueous
|
|
3315
|
+
*** species equation of state.
|
|
3316
|
+
|
|
3317
|
+
IF ((TdegC .GT. TMAX+TOL) .OR. (Pbars .GT. PMAX+TOL)) RETURN
|
|
3318
|
+
|
|
3319
|
+
* IF (epseqn .EQ. 1) THEN
|
|
3320
|
+
* CALL HK74(TK,Dgcm3,betab,alphaK,daldT,
|
|
3321
|
+
* 1 eps,dedP,dedT,d2edT2)
|
|
3322
|
+
* CALL epsBrn(eps,dedP,dedT,d2edT2,Z,Q,Y,X)
|
|
3323
|
+
* RETURN
|
|
3324
|
+
* END IF
|
|
3325
|
+
|
|
3326
|
+
* IF (epseqn .EQ. 2) THEN
|
|
3327
|
+
* CALL Pitz83(TK,Dgcm3,betab,alphaK,daldT,
|
|
3328
|
+
* 1 eps,dedP,dedT,d2edT2)
|
|
3329
|
+
* CALL epsBrn(eps,dedP,dedT,d2edT2,Z,Q,Y,X)
|
|
3330
|
+
* RETURN
|
|
3331
|
+
* END IF
|
|
3332
|
+
|
|
3333
|
+
* IF (epseqn .EQ. 3) THEN
|
|
3334
|
+
* CALL UF80(TK,Dgcm3,betab,alphaK,daldT,
|
|
3335
|
+
* 1 eps,dedP,dedT,d2edT2)
|
|
3336
|
+
* CALL epsBrn(eps,dedP,dedT,d2edT2,Z,Q,Y,X)
|
|
3337
|
+
* RETURN
|
|
3338
|
+
* END IF
|
|
3339
|
+
|
|
3340
|
+
IF (epseqn .EQ. 4) THEN
|
|
3341
|
+
CALL JN91(TK,Dgcm3,betab,alphaK,daldT,
|
|
3342
|
+
1 eps,dedP,dedT,d2edT2)
|
|
3343
|
+
CALL epsBrn(eps,dedP,dedT,d2edT2,Z,Q,Y,X)
|
|
3344
|
+
RETURN
|
|
3345
|
+
END IF
|
|
3346
|
+
|
|
3347
|
+
* IF (epseqn .EQ. 5) THEN
|
|
3348
|
+
* Dkgm3 = Dgcm3 * 1.0d3
|
|
3349
|
+
* PMPa = Pbars / 1.0d1
|
|
3350
|
+
* betam = betab * 1.0d1
|
|
3351
|
+
* CALL AW90(TK,PMPa,Dkgm3,betam,alphaK,daldT,
|
|
3352
|
+
* 1 eps,dedP,dedT,d2edT2)
|
|
3353
|
+
**** convert dedP FROM MPa**-1 TO bars**-1
|
|
3354
|
+
* dedP = dedP / 1.0d1
|
|
3355
|
+
* CALL epsBrn(eps,dedP,dedT,d2edT2,Z,Q,Y,X)
|
|
3356
|
+
* RETURN
|
|
3357
|
+
* END IF
|
|
3358
|
+
|
|
3359
|
+
END
|
|
3360
|
+
|
|
3361
|
+
*********************************************************************
|
|
3362
|
+
|
|
3363
|
+
*** JN91 - Compute (eps, dedP, dedT, d2edT2)(T,D) using equations
|
|
3364
|
+
*** given by Johnson and Norton (1991); fit parameters
|
|
3365
|
+
*** regressed from least squares fit to dielectric data
|
|
3366
|
+
*** consistent with the HK74 equation and low temperatures,
|
|
3367
|
+
*** and with the Pitz83 equation at high temperatures.
|
|
3368
|
+
***
|
|
3369
|
+
*** Units: T ............... K
|
|
3370
|
+
*** D ............... g/cm**3
|
|
3371
|
+
*** beta, dedP ...... bar**(-1)
|
|
3372
|
+
*** alpha, dedT ..... K**(-1)
|
|
3373
|
+
*** daldT, d2edT2 ... K**(-2)
|
|
3374
|
+
|
|
3375
|
+
|
|
3376
|
+
SUBROUTINE JN91(T,D,beta,alpha,daldT,eps,dedP,dedT,d2edT2)
|
|
3377
|
+
|
|
3378
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
3379
|
+
|
|
3380
|
+
DOUBLE PRECISION a(10), c(5), dcdT(5), dc2dTT(5)
|
|
3381
|
+
|
|
3382
|
+
SAVE
|
|
3383
|
+
|
|
3384
|
+
DATA Tref / 298.15d0 /
|
|
3385
|
+
|
|
3386
|
+
DATA a /
|
|
3387
|
+
1 0.1470333593E+02,
|
|
3388
|
+
2 0.2128462733E+03,
|
|
3389
|
+
3 -0.1154445173E+03,
|
|
3390
|
+
4 0.1955210915E+02,
|
|
3391
|
+
5 -0.8330347980E+02,
|
|
3392
|
+
6 0.3213240048E+02,
|
|
3393
|
+
7 -0.6694098645E+01,
|
|
3394
|
+
8 -0.3786202045E+02,
|
|
3395
|
+
9 0.6887359646E+02,
|
|
3396
|
+
1 -0.2729401652E+02 /
|
|
3397
|
+
|
|
3398
|
+
Tn = T / Tref
|
|
3399
|
+
|
|
3400
|
+
c(1) = 1.0d0
|
|
3401
|
+
dcdT(1) = 0.0d0
|
|
3402
|
+
dc2dTT(1) = 0.0d0
|
|
3403
|
+
|
|
3404
|
+
c(2) = a(1)/Tn
|
|
3405
|
+
dcdT(2) = -a(1)*Tref/T**2
|
|
3406
|
+
dc2dTT(2) = 2.0d0*a(1)*Tref/T**3
|
|
3407
|
+
|
|
3408
|
+
c(3) = a(2)/Tn + a(3) + a(4)*Tn
|
|
3409
|
+
dcdT(3) = -a(2)*Tref/T**2 + a(4)/Tref
|
|
3410
|
+
dc2dTT(3) = 2.0d0*a(2)*Tref/T**3
|
|
3411
|
+
|
|
3412
|
+
c(4) = a(5)/Tn + a(6)*Tn + a(7)*Tn**2
|
|
3413
|
+
dcdT(4) = -a(5)*Tref/T**2 + a(6)/Tref
|
|
3414
|
+
1 + 2.0d0*a(7)*T/Tref**2
|
|
3415
|
+
dc2dTT(4) = 2.0d0*a(5)*Tref/T**3 + 2.0d0*a(7)/Tref**2
|
|
3416
|
+
|
|
3417
|
+
c(5) = a(8)/Tn**2 + a(9)/Tn + a(10)
|
|
3418
|
+
dcdT(5) = -2.0d0*a(8)*Tref**2/T**3 - a(9)*Tref/T**2
|
|
3419
|
+
dc2dTT(5) = 6.0d0*a(8)*Tref**2/T**4 + 2.0d0*a(9)*Tref/T**3
|
|
3420
|
+
|
|
3421
|
+
eps = 0.0d0
|
|
3422
|
+
DO 50 k=1,5
|
|
3423
|
+
50 eps = eps + c(k)*D**(k-1)
|
|
3424
|
+
|
|
3425
|
+
dedP = 0.0d0
|
|
3426
|
+
DO 100 j = 0,4
|
|
3427
|
+
100 dedP = dedP + j*c(j+1)*D**j
|
|
3428
|
+
dedP = beta * dedP
|
|
3429
|
+
|
|
3430
|
+
dedT = 0.0d0
|
|
3431
|
+
DO 200 j = 0,4
|
|
3432
|
+
200 dedT = dedT + D**j*(dcdT(j+1) - j*alpha*c(j+1))
|
|
3433
|
+
|
|
3434
|
+
d2edT2 = 0.0d0
|
|
3435
|
+
DO 300 j = 0,4
|
|
3436
|
+
300 d2edT2 = d2edT2 + D**j*(dc2dTT(j+1) - j*(alpha*dcdT(j+1) +
|
|
3437
|
+
1 c(j+1)*daldT) - j*alpha*(dcdT(j+1) - j*alpha*c(j+1)))
|
|
3438
|
+
|
|
3439
|
+
END
|
|
3440
|
+
|
|
3441
|
+
***************************************************************
|
|
3442
|
+
|
|
3443
|
+
*** epsBrn - Compute the Z, Q, Y, and X Born functions from their
|
|
3444
|
+
*** eps, dedP, dedT, and d2edT2 counterparts.
|
|
3445
|
+
|
|
3446
|
+
SUBROUTINE epsBrn(eps,dedP,dedT,d2edT2,Z,Q,Y,X)
|
|
3447
|
+
|
|
3448
|
+
IMPLICIT DOUBLE PRECISION (a-h,o-z)
|
|
3449
|
+
|
|
3450
|
+
SAVE
|
|
3451
|
+
|
|
3452
|
+
Z = -1.0d0/eps
|
|
3453
|
+
Q = 1.0d0/eps**2 * dedP
|
|
3454
|
+
Y = 1.0d0/eps**2 * dedT
|
|
3455
|
+
X = 1.0d0/eps**2 * d2edT2 - 2.0d0*eps*Y**2
|
|
3456
|
+
|
|
3457
|
+
END
|