water(property = NULL, T = thermo$opt$Tr, P = "Psat")
water.SUPCRT92(property, T = 298.15, P = 1, isat = 0)
water.IAPWS95(property, T = 298.15, rho = 1000)
idealgas.IAPWS95(p, delta, tau)
residual.IAPWS95(p, delta, tau)
water.WP02(property, T = 298.15)
water.AW90(T = 298.15, rho = 1000, P = 0.1)
water
, water.SUPCRT92
; MPa for water.AW90
, water.IAPWS95
, water.WP02
)water
, water.SUPCRT92
and water.IAPWS
, a dataframe the number of rows of which corresponds to the number of input temperature, pressure and/or density values. water.AW90
returns a numeric vector with length corresponding to the number of temperature values.water
accepts two major computational alternatives. The default option (for thermo$opt$water
equal to SUPCRT) indicates to retrieve thermodynamic and electrostatic properties as a function of temperature and pressure using a FORTRAN subroutine taken from the SUPCRT92 software package (Johnson et al., 1992). If thermo$opt$water
is set to IAPWS, the thermodynamic properties are calculated using a (slower) implementation in Rcode of the IAPWS-95 formulation (Wagner and Pruss, 2002) and electrostatic properties are calculated using the equations of Archer and Wang, 1990. The allowed property
s for water
are one or more of those given below, depending on the computational option (availability is shown by an asterisk). The names of properties in the arguments are not case sensitive, and some of the properties that can actually be calculated using the equations of state are not implemented here.
A
Helmholtz energy cal mol$^{-1}$ * *
G
Gibbs energy cal mol$^{-1}$ * *
S
Entropy cal K$^{-1}$ mol$^{-1}$ * *
U
Internal energy cal mol$^{-1}$ * *
H
Enthalpy cal mol$^{-1}$ * *
Cv
Isochoric heat capacity cal K$^{-1}$ mol$^{-1}$ * *
Cp
Isobaric heat capacity cal K$^{-1}$ mol$^{-1}$ * *
w
(Speed
) Speed of sound cm s$^{-1}$ NA *
E
Isobaric expansivity cm$^3$ K$^{-1}$ NA *
kT
Isothermal compressibility cm$^3$ bar$^{-1}$ NA *
alpha
Coefficient of isobaric expansivity K$^{-1}$ NA *
beta
Coefficient of isothermal compressibility bar$^{-1}$ NA *
epsilon
(diel
) Dielectric constant dimensionless NA *
visc
Dynamic viscosity g cm$^{-1}$ s$^{-1}$ NA *
tcond
Thermal conductivity cal cm$^{-1}$ s$^{-1}$ K$^{-1}$ NA *
tdiff
Thermal diffusivity cm$^2$ s$^{-1}$ NA *
Prndtl
Prandtl number dimensionless NA *
visck
Kinematic viscosity cm$^2$ s$^{-1}$ NA *
albe
Isochoric expansivity bar K$^{-1}$ NA *
-compressibility
Z
(ZBorn
) Z Born function dimensionless NA *
Y
(YBorn
) Y Born function K$^{-1}$ * *
Q
(QBorn
) Q Born function bar$^{-1}$ * *
daldT
Isobaric temperature derivative K$^{-2}$ NA *
of expansibility
X
(XBorn
) X Born function K$^{-2}$ * *
N
N Born function bar$^{-2}$ * NA
UBorn
U Born function bar$^{-1}$ K$^{-1}$ * NA
V
Volume cm$^3$ mol$^{-1}$ * *
rho
Density kg cm$^3$ * *
Psat
Saturation vapor pressure bar * *
P
Pressure bar * NA
de.dT
Temperature derivative K$^{-1}$ * NA
of dielectric constant
de.dP
Pressure derivative bar$^{-1}$ * NA
of dielectric constant
}
UBorn
refers to the $U$ Born function, U to internal energy. The coefficients of isobaric expansivity and of isothermal compressibility are defined as $(1/V)(dV/dT)_P$ and $-(1/V)(dV/dP)_T$ respectively. All of the properties are calculated as a function of temperature and pressure except Psat f(T) (values supplied in the argument P
are ignored) and P f(T,rho). Except for those of rho
, the units used are as in Johnson and Norton, 1991. Names of properties that are used in water.SUPCRT92
(but not in water
) are shown in parentheses.
water.SUPCRT92
interfaces to the FORTRAN subroutine taken from the SUPCRT92 package (H2O92D.F) for calculating properties of water. These calculations are based on data and equations of Levelt-Sengers et al., 1983, Haar et al., 1984, and Johnson and Norton, 1991, among others (see Johnson et al., 1992). If isat
is equal to $1$ (or TRUE
), the values of P
are ignored and values of Psat are returned. Psat refers to one bar below 100 $^{\circ}$C, otherwise to the vapor-liquid saturation pressure at temperatures below the critical point (Psat is not available at temperatures above the critical point). water.SUPCRT92
function provides a limited interface to the FORTRAN subroutine; some functions provided there are not made available here (e.g., using variable density instead of pressure, or calculating the properties of steam). The properties of steam in CHNOSZ, as in SUPCRT92, are calculated using general equations for crystalline, gaseous and liquid species (cgl
). The IAPWS-95 formulation also has provisions for computing the properties of steam, but these are currently not used by CHNOSZ.
water.IAPWS95
provides an implementation of the IAPWS-95 formulation for properties (including pressure) calculated as a function of temperature and density. To compute the thermodynamic and electrostatic properties of water as a function of temperature and pressure using water.IAPWS95
, water
applies a root-finding function (uniroot
) to determine the corresponding values of density. Electrostatic properties in this case are derived from values of the static dielectric constant (epsilon
) calculated using equations given by Archer and Wang, 1990 and coded in water.AW90
. Note that the water.AW90
computes the static dielectric constant at given temperatures and pressures, so water
contains routines for calculating its derivatives with respect to temperature and pressure.
The water.IAPWS95
function returns values of thermodynamic properties in specific units (per gram) which are converted to molar properties by water
. The IAPWS-95 formulation follows the triple point convention used in engineering (values of internal energy and entropy are taken to be zero at the triple point). For compatibility with geochemical modeling conventions, the values of Gibbs energy, enthalpy and entropy output by water.IAPWS95
are converted by water
to the triple point reference state adopted in SUPCRT92
(Johnson and Norton, 1991; Helgeson and Kirkham, 1974). Auxiliary equations to the IAPWS-95 formulation (Wagner and Pruss, 2002) are provided in water.WP02
; the property
for this function can be one of P.sigma (saturation vapor pressure in MPa), dP.sigma.dT (derivative of saturation vapor pressure with respect to temperature), or rho.liquid or rho.vapor (density of liquid or vapor in kg m$^{-3}$).
idealgas.IAPWS95
and residual.IAPWS95
are supporting functions to water.IAPWS95
for calculating the ideal-gas and residual parts in the IAPWS-95 formulation.
The value of p
can be one of phi, phi.delta, phi.delta.delta, phi.tau, phi.tau.tau, or phi.delta.tau, to calculate the specific dimensionless Helmholtz free energy (phi) or one of its respective derivatives.
The stated temperature limits of validity of calculations in water.SUPCRT92
are from the greater of 0 $^{\circ}$C or the melting temperature at pressure, to 2250 $^{\circ}$C (Johnson et al., 1992).
For water.IAPWS
the upper temperature limit of validity is 1000 $^{\circ}$C, but extrapolation to much higher temperatures is possible (Wagner and Pruss, 2002).
Valid pressures are from the greater of zero bar or the melting pressure at temperature to 30000 bar (water.SUPCRT92
) or 10000 bar (water.IAPWS95
; again, with the provision for extrapolation to more extreme conditions).
The present functions do not check these limits and will attempt calculations for any range of input parameters, but may return NA
for properties that fail to be calculated at given temperatures and pressures and/or produce warnings or even errors when problems are encountered.
Haar, L., Gallagher, J. S. and Kell, G. S. (1984) NBS/NRC Steam Tables. Hemisphere, Washington, D. C., 320 p.
Helgeson, H. C. and Kirkham, D. H. (1974) Theoretical prediction of the thermodynamic behavior of aqueous electrolytes at high pressures and temperatures. I. Summary of the thermodynamic/electrostatic properties of the solvent. Am. J. Sci. 274, 1089--1098.
Johnson, J. W. and Norton, D. (1991) Critical phenomena in hydrothermal systems: state, thermodynamic, electrostatic, and transport properties of H$_2$O in the critical region. Am. J. Sci. 291, 541--648.
Johnson, J. W., Oelkers, E. H. and Helgeson, H. C. (1992) SUPCRT92: A software package for calculating the standard molal thermodynamic properties of minerals, gases, aqueous species, and reactions from 1 to 5000 bar and 0 to 1000$^{\circ}$C. Comp. Geosci. 18, 899--947.
Levelt-Sengers, J. M. H., Kamgarparsi, B., Balfour, F. W. and Sengers, J. V. (1983) Thermodynamic properties of steam in the critical region. J. Phys. Chem. Ref. Data 12, 1--28.
Wagner, W. and Pruss, A. (2002) The IAPWS formulation 1995 for the thermodynamic properties of ordinary water substance for general and scientific use. J. Phys. Chem. Ref. Data 31, 387--535.
uniroot
is the root finder used in water
to back out values of the density (rho
) from those of T
and P
when the IAPWS option is set in thermo$opt$water
. Equations of state for species other than water are coded in hkf
and cgl
.data(thermo)
## set temperature, density
T <- 500; rho <- 838.0235
# calculate pressure
P <- as.numeric(water.IAPWS95('P',T=T,rho=rho))
# calculate dielectric constant
water.AW90(T=T,rho=rho,P=P)
# find water density for this T, P
water('rho',T=T,P=convert(P,'bar'))
## density along saturation curve
T <- seq(273.15,623.15,25)
water.WP02(T=T) # liquid from WP02
water.WP02('rho.vapor',T) # steam from WP02
water('rho',T=T,P='Psat') # liquid from SUPCRT92
# values of the density, Psat, Gibbs energy
water(c('rho','psat','G'),T=T,P='Psat')
# derivatives of the dielectric constant (Born functions)
water(c('Q','Y','X','U'),T=T)
# now at constant pressure
water(c('Q','Y','X','U'),T=T,P=2000)
## comparing the computational options
prop <- c("A","G","S","U","H","Cv","Cp","w","epsilon",
"Y","Q","X","rho","Psat")
thermo$opt$water <<- "SUPCRT"
print(water(prop,T=convert(c(25,100,200,300),"K")))
thermo$opt$water <<- "IAPWS"
print(water(c(prop,"N","UBorn"),T=convert(c(25,100,200,300),"K")))
# fixme: things seem to be working except speed of
# sound in our IAPWS calculations
# calculating Q Born function
# after Table 22 of Johnson and Norton, 1991
thermo$opt$water <<- "SUPCRT"
T <- rep(c(375, 400, 425, 450, 475), each=5)
P <- rep(c(250, 300, 350, 400, 450), 5)
w <- water("Q", T=convert(T, "K"), P=P)
# the rest is to make a readable table
w <- as.data.frame(matrix(w[[1]], nrow=5))
colnames(w) <- T[1:5*5]
rownames(w) <- P[1:5]
print(w)
Run the code above in your browser using DataLab