Berman {CHNOSZ}R Documentation

Thermodynamic Properties of Minerals


Calculate thermodynamic properties of minerals using the equations of Berman (1988).


  Berman(name, T = 298.15, P = 1, check.G = FALSE,
         calc.transition = TRUE, calc.disorder = TRUE)



character, name of mineral


numeric, temperature(s) at which to calculate properties (K)


numeric, pressure(s) at which to calculate properties (bar)


logical, check consistency of G, H, and S?


logical, include calculation of polymorphic transition properties?


logical, include calculation of disordering properties?


This function calculates the thermodynamic properties of minerals at high P and T using equations given by Berman (1988). These minerals should be listed in thermo()$OBIGT with the state ‘⁠cr⁠’ and chemical formula, and optionally an abbreviation and references, but all other properties set to NA.

The standard state thermodynamic properties and parameters for the calculations are stored in data files under extdata/Berman, or can be read from a user-created file specified by thermo()$opt$Berman.

The equation used for heat capacity is CP = k0 + k1*T-0.5 + k2*T-2 + k3*T-3 + k4*T-1 + k5*T + k6*T2. This is an extended form Eq. 4 of Berman (1988) as used in the winTWQ program (Berman, 2007). The equation used for volume is V(P, T) / V(1 bar, 298.15 K) = 1 + v1 * (T - 298.15) + v2 * (T - 298.15)2 + v3 * (P - 1) + v4 * (P - 1)2 (Berman, 1988, Eq. 5, with terms reordered to follow winTWQ format). The equations used for lambda transitions follow Eqs. 8-14 of Berman (1988). The equation used for the disorder contribution between Tmin and Tmax is CP[dis] = d0 + d1*T-0.5 + d2*T-2 + d3*T + d4*T2 (Berman, 1988, Eq. 15). The parameters correspond to Tables 2 (GfPrTr, HfPrTr, SPrTr, VPrTr), 3a (k0 to k3), 4 (v1 to v4), 3b (transition parameters: Tlambda to dTH), and 5 (disorder parameters: Tmax, Tmin, d1 to d4 and Vad) of Berman (1988). Following the winTWQ data format, multipliers are applied to the volume parameters only (see below). Note that VPrTr is tabulated in J bar-1 mol-1, which is equal to 10 cm3 mol-1.

A value for GfPrTr is not required and is only used for optional checks (see below). Numeric values (possibly 0) should be assigned for all of HfPrTr, SPrTr, VPrTr, k0 to k6 and v1 to v4. Missing (or NA) values are permitted for the transition and disorder parameters, for minerals where they are not used. The data files have the following 30 columns:

name mineral name (must match an entry with a formula but NA properties in thermo()$OBIGT)
GfPrTr standard Gibbs energy at 298.15 K and 1 bar (J mol-1) (Benson-Helgeson convention)
HfPrTr standard enthalpy at 298.15 K and 1 bar (J mol-1)
SPrTr standard entropy at 298.15 K and 1 bar (J mol-1 K-1)
VPrTr standard volume at 298.15 K and 1 bar (J bar-1) [1 J bar-1 = 10 cm3]
k0 ... k6 k0 (J mol-1 K-1) to k6
v1 v1 (K-1) * 105
v2 v2 (K-2) * 105
v3 v3 (bar-1) * 105
v4 v4 (bar-2) * 108
Tlambda Tλ (K)
Tref Tref (K)
dTdP dT / dP (K bar-1)
l1 l1 ((J/mol)0.5 K-1)
l2 l2 ((J/mol)0.5 K-2)
DtH ΔTtH (J mol-1)
Tmax temperature at which phase is fully disordered (TD in Berman, 1988) (K)
Tmin reference temperature for onset of disordering (t in Berman, 1988) (K)
d0 ... d4 d0 (J mol-1 K-1) to d4
Vad constant that scales the disordering enthalpy to volume of disorder (d5 in Berman, 1988)

The function outputs apparent Gibbs energies according to the Benson-Helgeson convention (ΔG = ΔH - TΔS) using the entropies of the elements in the chemical formula of the mineral to calculate ΔS (cf. Anderson, 2005). If check.G is TRUE, the tabulated value of GfTrPr (Benson-Helgeson) is compared with that calculated from HfPrTr - 298.15*DSPrTr (DSPrTr is the difference between the entropies of the elements in the formula and SPrTr in the table). A warning is produced if the absolute value of the difference between tabulated and calculated GfTrPr is greater than 1000 J/mol.

If the function is called with missing name, the parameters for all available minerals are returned.


A data frame with T (K), P (bar), G, H, S, and Cp (energetic units in Joules), and V (cm3 mol-1).


Anderson, G. M. (2005) Thermodynamics of Natural Systems, 2nd ed., Cambridge University Press, 648 p.

Berman, R. G. (1988) Internally-consistent thermodynamic data for minerals in the system Na2O-K2O-CaO-MgO-FeO-Fe2O3-Al2O3-SiO2-TiO2-H2O-CO2. J. Petrol. 29, 445-522. doi:10.1093/petrology/29.2.445

Berman, R. G. and Aranovich, L. Ya. (1996) Optimized standard state and solution properties of minerals. I. Model calibration for olivine, orthopyroxene, cordierite, garnet, and ilmenite in the system FeO-MgO-CaO-Al2O3-TiO2-SiO2. Contrib. Mineral. Petrol. 126, 1-24. doi:10.1007/s004100050233

Berman, R. G. (2007) winTWQ (version 2.3): A software package for performing internally-consistent thermobarometric calculations. Open File 5462, Geological Survey of Canada, 41 p. doi:10.4095/223425

Helgeson, H. C., Delany, J. M., Nesbitt, H. W. and Bird, D. K. (1978) Summary and critique of the thermodynamic properties of rock-forming minerals. Am. J. Sci. 278-A, 1–229.


# Other than the formula, the parameters aren't stored in
# thermo()$OBIGT, so this shows NAs
info(info("quartz", "cr"))
# Properties of alpha-quartz (aQz) at 298.15 K and 1 bar
# Gibbs energies of aQz and coesite at higher T and P
T <- seq(200, 1300, 100)
P <- seq(22870, 31900, length.out = length(T))
G_aQz <- Berman("quartz", T = T, P = P)$G
G_Cs <- Berman("coesite", T = T, P = P)$G
# That is close to the univariant curve (Ber88 Fig. 4),
# so the difference in G is close to 0
DGrxn <- G_Cs - G_aQz
all(abs(DGrxn) < 100)  # TRUE

# Make a P-T diagram for SiO2 minerals (Ber88 Fig. 4)
basis(c("SiO2", "O2"), c("cr", "gas"))
species(c("quartz", "quartz,beta", "coesite"), "cr")
a <- affinity(T = c(200, 1700, 200), P = c(0, 50000, 200))

## Getting data from a user-supplied file
## Ol-Opx exchange equilibrium, after Berman and Aranovich, 1996
species <- c("fayalite", "enstatite", "ferrosilite", "forsterite")
coeffs <- c(-1, -2, 2, 1)
T <- seq(600, 1500, 50)
Gex_Ber88 <- subcrt(species, coeffs, T = T, P = 1)$out$G
# Add data from BA96
datadir <- system.file("extdata/Berman/testing", package = "CHNOSZ")
add.OBIGT(file.path(datadir, "BA96_OBIGT.csv"))
thermo("opt$Berman" = file.path(datadir, "BA96_Berman.csv"))
Gex_BA96 <- subcrt(species, coeffs, T = seq(600, 1500, 50), P = 1)$out$G
# Ber88 is lower than BA96 at low T
(Gex_BA96 - Gex_Ber88)[1] > 0  # TRUE
# The curves cross at about 725 deg C (BA96 Fig. 8)
# (actually, in our calculation they cross closer to 800 deg C)
T[which.min(abs(Gex_BA96 - Gex_Ber88))]  # 800
# Reset the database (thermo()$OBIGT, and thermo()$opt$Berman)

[Package CHNOSZ version 2.0.0 Index]