This vignette was compiled on 2024-11-17 with CHNOSZ version 2.1.0-22.
As one syllable that starts with an sh sound and rhymes with Oz. CHNOSZ and schnoz are homophones.
Added on 2023-05-22.
info()
to show the reference keys for particular species and
thermo.refs()
to list the bibliographic details. The
following example shows the sources of data for aqueous alanine:## ref1 ref2
## 1739 AH97b DLH06.1
## key author year
## 72 AH97b J. P. Amend and H. C. Helgeson 1997
## 154 DLH06.1 J. M. Dick, D. E. LaRowe and H. C. Helgeson 2006
## citation note
## 72 J. Chem. Soc., Faraday Trans. 93, 1927-1941 amino acids GHS
## 154 Biogeosciences 3, 311-336 amino acids HKF parameters
## URL
## 72 https://doi.org/10.1039/A608126F
## 154 https://doi.org/10.5194/bg-3-311-2006
## Fe O S ispecies logact state
## FeS2 1 0 2 2160 0 cr
## FeS 1 0 1 2161 0 cr
## O2 0 2 0 2762 0 gas
## name abbrv formula state ref1 ref2
## 2058 magnetite Mag Fe3O4 cr Ber88 <NA>
## 2160 pyrite Py FeS2 cr HDNB78 RH95.7
## 2161 pyrrhotite Po FeS cr HDNB78 <NA>
## 2762 oxygen O2 O2 gas WEP+82 Kel60
## key author year
## 24 Ber88 R. G. Berman 1988
## 8 HDNB78 H. C. Helgeson, J. M. Delany et al. 1978
## 15 WEP+82 D. D. Wagman, W. H. Evans et al. 1982
## 68 RH95.7 R. A. Robie and B. S. Hemingway 1995
## 1 Kel60 K. K. Kelley 1960
## citation note
## 24 J. Petrol. 29, 445-522 minerals
## 8 Am. J. Sci. 278A, 1-229 minerals
## 15 J. Phys. Chem. Ref. Data 11, Suppl. 2, 1-392 gases GHS
## 68 U. S. Geological Survey Bull. 2131 phase stability limit
## 1 U. S. Bureau of Mines Bull. 584 gases Cp
## URL
## 24 https://doi.org/10.1093/petrology/29.2.445
## 8 https://www.worldcat.org/oclc/13594862
## 15 https://srd.nist.gov/JPCRD/jpcrdS2Vol11.pdf
## 68 https://doi.org/10.3133/b2131
## 1 https://www.worldcat.org/oclc/693388901
add.OBIGT("SUPCRT92")
. When using
these data, it is appropriate to cite Helgeson et
al. (1978) rather than SUPCRT92.Added on 2023-05-27; PPM example added on 2023-11-15.
Added to https://chnosz.net/ website on 2018-11-13; moved to FAQ on 2023-05-27; added references for revised HKF on 2023-11-17.
Short answer: When the species have the same number of the conserved element (let’s take C for example), their activities are raised to the same exponent in reaction quotient, so the activity ratio in the law of mass action becomes unity. But when the species have different numbers of the conserved element (for example, propanoate with 3 C and bicarbonate with 1 C), their activities are raised to different exponents, and the activity ratio does not become unity even when the activities are equal (except for the specific case where the activities themselves are equal to 1). Therefore, in general, the condition of “equal activity” is not sufficient to define boundaries on a relative stability diagram; instead, we need to say “activity of each species equal to x” or alternatively “total activity equal to y”.
Long answer: First, consider a reaction between formate and bicarbonate: HCO2− + 0.5 O2 ⇌ HCO3−. The law of mass action (LMA) is log K = log (aHCO3− / aHCO2−) − 0.5 log fO2. The condition of equal activity is aHCO2− = aHCO3−. Then, the LMA simplifies to log K = − 0.5 log fO2. The total activity of C is given by Ctot = aHCO2− + aHCO3−. According to the LMA, log fO2 is a function only of log K, so dlog fO2/dlog Ctot = 0. In other words, the position of the equal-activity boundary is independent of the value of Ctot.
Next, consider a reaction between propanoate and bicarbonate: C3H5O2− + 7⁄2 O2 ⇌ 3 HCO3− + 2 H+. The LMA is log K = log (a3HCO3− / aC3H5O2−) − pH − 7⁄2 log fO2. The condition of equal activity is aC3H5O2− = aHCO3−. Then, the LMA simplifies to log K = log a2HCO3− − pH − 7⁄2 log fO2. The total activity of C is given by Ctot = 3 aC3H5O2− + aHCO3−; combined with the condition of equal activity, this gives Ctot = 4 aHCO3−. Substituting this into the LMA gives log K = log (Ctot / 4)2 − pH − 7⁄2 log fO2, which can be rearranged to write log fO2 = 2⁄7 (2 log Ctot − log K − log 16 − pH). It follows that dlog fO2/dlog Ctot = 4⁄7, and the position of the equal-activity boundary depends on Ctot.
According to this analysis, increasing Ctot from 0.03 to 3
molal (a 2 log-unit increase) would have no effect on the location of
the formate-bicarbonate equal-activity boundary, but would raise the
propanoate-bicarbonate equal-activity boundary by
8⁄7 units on the
log fO2 scale. Because the reaction between
bicarbonate and CO2 does not involve O2 (but
rather H2O and H+), the same effect should occur
on the propanoate-CO2 equal-activity boundary. The plots
below, which are made using equilibrate()
for species in
the Deep Earth Water (DEW) model, illustrate this effect.
Added on 2023-05-17.
The different crystal forms of a mineral are called polymorphs. Many
minerals undergo polymorphic transitions upon heating. Each polymorph
for a given mineral should have its own entry in OBIGT, including values
of the standard thermodynamic properties
(ΔG°f, ΔH°f,
and S°) at 25 °C. The 25 °C (or 298.15 K) values for
high-temperature polymorphs are often not listed in thermodynamic
tables, but they can be calculated. This thermodynamic cycle shows how:
we calculate the changes of a thermodyamic property (pictured here as
DS1
and DS2
) between 298.15 K and the
transition temperature (Ttr
) for two polymorphs, then
combine those with the property of the polymorphic transition
(DStr
) to obtain the difference of the property between the
polymorphs at 298.15 K (DS298
).
DStr DStr: entropy of transition between polymorphs 1 and 2
Ttr o---------->o Ttr: temperature of transition
^ |
| |
DS1 | | DS2 DS1: entropy change of polymorph 1 from 298.15 K to Ttr
| | DS2: entropy change of polymorph 2 from 298.15 K to Ttr
| v
298.15 K o==========>o DS298: entropy difference between polymorphs 1 and 2 at 298.15 K
DS298 DS298 = DS1 + DStr - DS2
Polymorph 1 2
As an example, let’s add pyrrhotite (Fe0.877S) from Pankratz et al. (1987).
The formula and thermodynamic properties of this pyrrhotite differ from
those of FeS from Helgeson et al. (1978), which is already in OBIGT. We begin
by defining all the input values in the next code block. In addition to
G
, H
, S
, and the heat capacity
coefficients, non-NA values of volume (V
) must be provided
for the polymorph transitions to be calculated correctly by
subcrt()
.
# The formula of the new mineral and literature reference
formula <- "Fe0.877S"
ref1 <- "PMW87"
# Because the properties from Pankratz et al. (1987) are listed in calories,
# we need to change the output of subcrt() to calories (the default is Joules)
E.units("cal")
# Use temperature in Kelvin for the calculations below
T.units("K")
# Thermodynamic properties of polymorph 1 at 25 °C (298.15 K)
G1 <- -25543
H1 <- -25200
S1 <- 14.531
Cp1 <- 11.922
# Heat capacity coefficients for polymorph 1
a1 <- 7.510
b1 <- 0.014798
# For volume, use the value from Helgeson et al. (1978)
V1 <- V2 <- 18.2
# Transition temperature
Ttr <- 598
# Transition enthalpy (cal/mol)
DHtr <- 95
# Heat capacity coefficients for polymorph 2
a2 <- -1.709
b2 <- 0.011746
c2 <- 3073400
# Maximum temperature of polymorph 2
T2 <- 1800
Use the temperature (Ttr
) and enthalpy of transition
(DHtr
) to calculate the entropy of transition
(DStr
). Note that the Gibbs energy of transition
(DGtr
) is zero at Ttr
.
Start new database entries that include basic information, volume,
and heat capacity coefficients for each polymorph. Pankratz et al. (1987)
don’t list Cp° of the high-temperature polymorph
extrapolated to 298.15 K, so leave it out. If the properties were in
Joules, we would omit E_units = "cal"
or change it to
E_units = "J"
.
mod.OBIGT("pyrrhotite_new", formula = formula, state = "cr", ref1 = ref1,
E_units = "cal", G = 0, H = 0, S = 0, V = V1, Cp = Cp1,
a = a1, b = b1, c = 0, d = 0, e = 0, f = 0, lambda = 0, T = Ttr)
mod.OBIGT("pyrrhotite_new", formula = formula, state = "cr2", ref1 = ref1,
E_units = "cal", G = 0, H = 0, S = 0, V = V2,
a = a2, b = b2, c = c2, d = 0, e = 0, f = 0, lambda = 0, T = T2)
For the time being, we set G
, H
, and
S
(i.e., the properties at 25 °C) to zero in order to
easily calculate the temperature integrals of the properties from 298.15
K to Ttr
. Values of zero are placeholders that don’t
satisfy ΔG°f =
ΔH°f −
TΔS°f for either polymorph (the
subscript f represents formation from the elements), as
indicated by the following messages. We will check again for consistency
of the thermodynamic parameters at the end of the example.
check.GHS: calculated ΔG°f of pyrrhotite_new(cr) differs by 3989 cal mol-1 from database value
check.GHS: calculated ΔG°f of pyrrhotite_new(cr2) differs by 3989 cal mol-1 from database value
info.numeric: Cp° of pyrrhotite_new(cr2) is NA; set by EOS parameters to 36.37 cal K-1 mol-1
In order to calculate the temperature integral of
ΔG°f, we need not only the heat capacity
coefficients but also actual values of S°. Therefore, we start
by calculating the entropy changes of each polymorph from 298.15 to 598
K (DS1
and DS2
) and combining those with the
entropy of transition to obtain the difference of entropy between the
polymorphs at 298.15 K. For polymorph 1 (with state = "cr"
)
it’s advisable to include use.polymorphs = FALSE
to prevent
subcrt()
from trying to identify the most stable polymorph
at the indicated temperature.
DS1 <- subcrt("pyrrhotite_new", "cr", P = 1, T = Ttr, use.polymorphs = FALSE)$out[[1]]$S
DS2 <- subcrt("pyrrhotite_new", "cr2", P = 1, T = Ttr)$out[[1]]$S
DS298 <- DS1 + DStr - DS2
Put the values of S° at 298.15 into OBIGT, then calculate
the changes of all thermodynamic properties of each polymorph between
298.15 K and Ttr
.
mod.OBIGT("pyrrhotite_new", state = "cr", S = S1)
mod.OBIGT("pyrrhotite_new", state = "cr2", S = S1 + DS298)
D1 <- subcrt("pyrrhotite_new", "cr", P = 1, T = Ttr, use.polymorphs = FALSE)$out[[1]]
D2 <- subcrt("pyrrhotite_new", "cr2", P = 1, T = Ttr)$out[[1]]
It’s a good idea to check that the entropy of transition is calculated correctly.
Now we’re ready to add up the contributions to ΔG°f and ΔH°f from the left, top, and right sides of the cycle. This gives us the differences between the polymorphs at 298.15 K, which we use to make the final changes to the database.
DG298 <- D1$G + DGtr - D2$G
DH298 <- D1$H + DHtr - D2$H
mod.OBIGT("pyrrhotite_new", state = "cr", G = G1, H = H1)
mod.OBIGT("pyrrhotite_new", state = "cr2", G = G1 + DG298, H = H1 + DH298)
It’s a good idea to check that the values of G
,
H
, and S
at 25 °C for a given polymorph are
consistent with each other. Here we use check.GHS()
to
calculate the difference between the value given for G
and
the value calculated from H
and S
. The
difference of less than 1 cal/mol can probably be attributed to small
differences in the entropies of the elements used by Pankratz et al. (1987)
and in CHNOSZ. We still get a message that the database value of
Cp° at 25 °C for the high-temperature polymorph is
NA; this is OK because the (extrapolated) value can be calculated from
the heat capacity coefficients.
cr_parameters <- info(info("pyrrhotite_new", "cr"))
stopifnot(abs(check.GHS(cr_parameters)) < 1)
cr2_parameters <- info(info("pyrrhotite_new", "cr2"))
info.numeric: Cp° of pyrrhotite_new(cr2) is NA; set by EOS parameters to 36.37 cal K-1 mol-1
For the curious, here are the parameter values:
## name abbrv formula state ref1 ref2 date model E_units G
## 3571 pyrrhotite_new <NA> Fe0.877S cr PMW87 <NA> <NA> CGL cal -25543
## H S Cp V a b c d e f lambda T
## 3571 -25200 14.531 11.922 18.2 7.51 0.014798 0 0 0 0 0 598
## name abbrv formula state ref1 ref2 date model E_units
## 3572 pyrrhotite_new <NA> Fe0.877S cr2 PMW87 <NA> <NA> CGL cal
## G H S Cp V a b c d e f
## 3572 -25802.75 -27099.4 9.031592 36.36706 18.2 -1.709 0.011746 3073400 0 0 0
## lambda T
## 3572 0 1800
Finally, let’s look at the thermodynamic properties of the newly
added pyrrhotite as a function of temperature around Ttr
.
Here, we use the feature of subcrt()
that identifies the
stable polymorph at each temperature. Note that
ΔG°f is a continuous function – visual
confirmation that the parameters yield zero for DGtr
– but
ΔH°f, S°, and
Cp° are discontinuous at the transition
temperature.
For additional polymorphs, we could repeat the above procedure using
polymorph 2 as the starting point to calculate G
,
H
, and S
of polymorph 3, and so on.
Added on 2023-06-23.
A log fO2–pH plot for aqueous sulfur species including S3- was first presented by Pokrovski and Dubrovinsky (2011). Later, Pokrovski and Dubessy (2015) reported parameters in the revised HKF equations of state for S3-, which are available in OBIGT.
The blocks of code are commented here:
basis(c("H2S", "H2O", "oxygen", "H+"))
.Let’s calculate log K for the reaction 2 H2S(aq) + SO4-2 + H+ = S3- + 0.75 O2(gas) + 2.5 H2O.
species <- c("H2S", "SO4-2", "H+", "S3-", "oxygen", "H2O")
coeffs <- c(-2, -1, -1, 1, 0.75, 2.5)
(calclogK <- subcrt(species, coeffs, T = seq(300, 450, 50), P = 5000)$out$logK)
## [1] -16.669685 -14.013206 -11.686722 -9.622529
By using the thermodynamic parameters for S3- in OBIGT that are taken from Pokrovski and Dubessy (2015), log K is calculated to be -16.7, -14.0, -11.7, and -9.6 at 300, 350, 400, and 450 °C and 5000 bar. In contrast, ref. 22 of Pokrovski and Dubrovinsky (2011) lists -9.6 for log K at 350 °C; this is 4.4 log units higher than the calculated value of -14.0. This corresponds to a difference of Gibbs energy of -2.303 * 1.9872 * (350 + 273.15) * 4.4 = -12586 cal/mol.
In the code below, we use the difference of Gibbs energy to temporarily update the OBIGT entry for S3-. Then, we make a new diagram that is more similar to that from Pokrovski and Dubrovinsky (2011). Finally, we reset the OBIGT database so that the temporary parameters don’t interfere with later calculations.
Yes! Just set a new temperature and pressure and activate the DEW
water model and load the DEW aqueous species. You can also use
info()
to see which species are affected by loading the DEW
parameters; it turns out that SO4-2 isn’t. Then,
use similar commands as above to make the diagram. At the end, reset the
water model and OBIGT database.
Here are the three plots that we made:
Added on 2023-09-08.
T
for solids, liquids,
and gases?The value in this column can be one of the following:
T
is positive, it is the phase stability limit (i.e., the temperature of
melting or decomposition of a solid or vaporization of a liquid);T
is
negative, the opposite (positive) value is the T limit for
validity of the Cp equation. (New feature in
development version of CHNOSZ)These cases are handled by subcrt()
as follows. The
units of T
in OBIGT are Kelvin, but subcrt()
by default uses °C:
1. For polymorphic transitions, the properties of specific polymorphs are returned:
info.character: found pyrrhotite(cr) with 2 polymorphic transitions
subcrt: 1 species at 3 values of T (ºC) and P (bar) [energy units: J]
subcrt: 3 polymorphs for pyrrhotite … polymorphs 1,2,3 are stable
## $pyrrhotite
## T P G polymorph
## 1 25 1.000000 -100767.5 1
## 2 150 4.757169 -109734.3 2
## 3 350 165.211289 -129984.5 3
Note: In both SUPCRT92 and OBIGT, tin, sulfur, and selenium are listed as minerals with one or more polymorphic transitions, but the highest-temperature polymorph actually represents the liquid state. Furthermore, quicksilver is listed as a mineral whose polymorphs actually correspond to the liquid and gaseous states.
2. For a phase stability limit, ΔG° is set to NA above the temperature limit:
subcrt: 1 species at 5 values of T (ºC) and P (bar) [energy units: J]
subcrt: G is set to NA for pyrite(cr) above its stability limit of 1015 K (use exceed.Ttr = TRUE to output G)
## $species
## name formula state ispecies model
## 2160 pyrite FeS2 cr 2160 CGL
##
## $out
## $out$pyrite
## T P logK G H S V Cp
## 1 200 1 19.02722 -172355.1 -159662.59 84.11482 23.94 71.72282
## 2 400 1 14.89151 -191911.2 -144868.84 110.15205 23.94 75.71142
## 3 600 1 12.92264 -216018.0 -129487.09 130.14642 23.94 77.95838
## 4 800 1 NA NA -113722.56 146.39738 23.94 79.62872
## 5 1000 1 NA NA -97651.55 160.12626 23.94 81.05409
This feature is intended to make it harder to obtain potentially
unreliable results at temperatures where a mineral (or an organic solid
or liquid) is not stable. If you want the extrapolated ΔG°
above the listed phase stability limit, then add
exceed.Ttr = TRUE
to the function call to
subcrt()
.
OBIGT has a non-exhaustive list of temperatures of melting, decomposition, or other phase change, some of which were taken from SUPCRT92 while others were taken from Robie and Hemingway (1995). These minerals are listed below:
file <- system.file("extdata/OBIGT/inorganic_cr.csv", package = "CHNOSZ")
dat <- read.csv(file)
# Reverse rows so highest-T polymorph for each mineral is listed first
dat <- dat[nrow(dat):1, ]
# Remove low-T polymorphs
dat <- dat[!duplicated(dat$name), ]
# Remove minerals with no T limit for phase stability (+ve) or Cp equation (-ve)
dat <- dat[!is.na(dat$z.T), ]
# Keep minerals with phase stability limit
dat <- dat[dat$z.T > 0, ]
# Get names of minerals and put into original order
rev(dat$name)
## [1] "anhydrite" "bunsenite" "bromellite" "chalcocite"
## [5] "chlorargyrite" "cinnabar" "copper" "covellite"
## [9] "cuprite" "galena" "gold" "halite"
## [13] "iron" "nickel" "pyrite" "pyrrhotite"
## [17] "silver" "sodium oxide" "sphalerite" "strontianite"
## [21] "sylvite" "cassiterite" "uraninite" "zincite"
## [25] "sulfur" "selenium" "manganosite" "wustite"
## [29] "cobalt monoxide" "zinc" "carrollite" "rutherfordine"
## [33] "beta-UO2(OH)2" "Na2U2O7"
OBIGT now uses the decomposition temperature of covellite (780.5 K from Robie and Hemingway,
1995) in contrast to the previous Tmax from SUPCRT92 (1273 K, which is referenced to a equation described as
“estimated” on p. 62 of Kelley, 1960).
Selected organic solids and liquids have melting or vaporization
temperatures listed as well. However, no melting temperatures are listed
for minerals that use the Berman
model.
3. For a Cp equation limit, extrapolated values of ΔG° are shown and a warning is produced:
Warning in subcrt(“muscovite”, T = 850, P = 4500): above T limit of 1000 K for
the Cp equation for muscovite(cr)
## $species
## name formula state ispecies model
## 2063 muscovite KAl2(AlSi3)O10(OH)2 cr 2063 CGL
##
## $out
## $out$muscovite
## T P logK G H S V Cp
## 1 850 4500 280.7978 -6037836 -5533722 864.6487 140.71 523.7196
The warning is similar to that produced by SUPCRT92 (“CAUTION: BEYOND T LIMIT OF CP COEFFS FOR A MINERAL OR GAS”) at temperatures above maximum temperature of validity of the Maier-Kelley equation (Tmax). Notably, SUPCRT92 outputs ΔG° and other standard thermodynamic properties at temperatures higher than Tmax despite the warning.
This is a new feature in CHNOSZ version 2.1.0. In previous versions of CHNOSZ, values of ΔG° above the Cp equation limit were set to NA without a warning, as with the phase stability limit described above.
4. Finally, if T
is NA or 0, then no upper
temerature limit is imposed by subcrt()
.
Added on 2023-11-15.
Unlike mineral redox buffers, the K-feldspar–muscovite–quartz (KMQ)
and muscovite–kaolinite (MC) pH buffers are known as “sliding scale”
buffers because they do not determine pH but rather the activity ratio
of K+ to H+ (Holm and Andersson, 2005). To add these
buffers to a log fO2–pH diagram in CHNOSZ,
choose basis species that include Al+3 (the least mobile
element, which the reactions are balanced on), quartz (this is needed
for the KMQ buffer), the mobile ions K+ and H+,
and the remaining elements in H2O and O2;
oxygen
denotes the gas in OBIGT. The formation reactions
for these minerals don’t involve O2, but it must be present
so that the number of basis species equals the number of elements +1
(i.e. elements plus charge).
## Al H K O Si Z ispecies logact state
## Al+3 1 0 0 0 0 3 741 0 aq
## SiO2 0 0 0 2 1 0 2073 0 cr
## K+ 0 0 1 0 0 1 6 0 aq
## H+ 0 1 0 0 0 1 3 0 aq
## H2O 0 2 0 1 0 0 1 0 liq
## O2 0 0 0 2 0 0 2762 0 gas
## Al+3 SiO2 K+ H+ H2O O2 ispecies logact state name
## 1 2 2 0 -6 5 0 2053 0 cr kaolinite
## 2 3 3 1 -10 6 0 2063 0 cr muscovite
## 3 1 3 1 -4 2 0 2067 0 cr K-feldspar
We could go right ahead and make a
log fO2–pH diagram, but the implied
assumption would be that the K+ activity is unity, which may
not be valid. Instead, we can obtain an independent estimate for
K+ activity based on 1) the activity ratio of Na+
to K+ for the reaction between albite and K-feldspar and 2)
charge balance among Na+, K+, and Cl-
for a given activity of the latter (Heinrich and Candela, 2014). Using the
variables defined below, those conditions are expressed as
K_AK = m_Na / m_K
and m_Na + m_K = m_Cl
, which
combine to give m_K = m_Cl / (K_AK + 1)
. The reason for
writing the equations with molality instead of activity is that ionic
strength (IS
) is provided in the arguments to
subcrt()
, so the function returns a value of log K
adjusted for ionic strength. Furthermore, it is assumed that this is a
chloride-dominated solution, so ionic strength is taken to be equal to
the molality of Cl-.
# Define temperature, pressure, and molality of Cl- (==IS)
T <- 150
P <- 500
IS <- m_Cl <- 1
# Calculate equilibrium constant for Ab-Kfs reaction, corrected for ionic strength
logK_AK <- subcrt(c("albite", "K+", "K-feldspar", "Na+"), c(-1, -1, 1, 1),
T = T, P = P, IS = IS)$out$logK
K_AK <- 10 ^ logK_AK
# Calculate molality of K+
(m_K <- m_Cl / (K_AK + 1))
## [1] 0.07194125
This calculation gives a molality of K+ that is lower than
unity and accordingly makes the buffers less acidic (Heinrich and Candela,
2014). Now we can apply the calculated molality of
K+ to the basis species and add the buffer lines to the
diagram. The IS
argument is also used for
affinity()
so that activities are replaced by molalities
(that is, affinity is calculated with standard Gibbs energies adjusted
for ionic strength; this has the same effect as calculating activity
coefficients).
basis("K+", log10(m_K))
a <- affinity(pH = c(2, 10), O2 = c(-55, -38), T = T, P = P, IS = IS)
diagram(a, srt = 90)
lTP <- as.expression(c(lT(T), lP(P)))
legend("topleft", legend = lTP, bty = "n", inset = c(-0.05, 0), cex = 0.9)
ltxt <- c(quote("Unit molality of Cl"^"-"), "Quartz saturation")
legend("topright", legend = ltxt, bty = "n", cex = 0.9)
title("Mineral data from Berman (1988)\nand Sverjensky et al. (1991) (OBIGT default)",
font.main = 1, cex.main = 0.9)
The gray area, which is automatically drawn by
diagram()
, is below the reducing stability limit of water;
that is, this area is where the equilibrium fugacity of H2
exceeds unity. NOTE: Although the muscovite–kaolinite (MC) buffer was
mentioned by Heinrich and Candela (2014) in the context of “clay-rich but
feldspar-free sediments”, this example uses the feldspathic Ab–Kfs
reaction for calculating K+ molality for both the KMQ and MC
buffers. A more appropriate reaction to constrain the Na/K ratio with
the MC buffer may be that between paragonite and muscovite (e.g., Yardley,
2005).
The diagram in Fig. 4 of Heinrich and Candela
(2014) shows the buffer lines at somewhat
higher pH values of ca. 5 and 6. Removing IS
from the code
moves the lines to lower rather than higher pH (not shown – try it
yourself!), so the calculation of activity coefficients does not
explain the differences. One possible reason for these differences is
the use of different thermodynamic data for the minerals. The parameters
for these minerals in the default OBIGT database come from Berman (1988) and Sverjensky et al. (1991).
## key author year
## 24 Ber88 R. G. Berman 1988
## 40 SHD91 D. A. Sverjensky, J. J. Hemley and W. M. D'Angelo 1991
## citation
## 24 J. Petrol. 29, 445-522
## 40 Geochim. Cosmochim. Acta 55, 989-1004
## note
## 24 minerals
## 40 G and H revisions for K- and Al-bearing silicates
## URL
## 24 https://doi.org/10.1093/petrology/29.2.445
## 40 https://doi.org/10.1016/0016-7037(89)90341-4
CHNOSZ doesn’t implement the thermodynamic model for minerals from Holland and Powell (1998), which is one of the sources cited by Heinrich and Candela (2014). If we use the thermodynamic parameters for minerals from Helgeson et al. (1978; these do not include the revisions for aluminosilicates described by Sverjensky et al., 1991), we get the lines shown in the second plot above, representing a larger stability field for muscovite. This moves the KMQ buffer closer to the value shown by Heinrich and Candela (2014), but the MC buffer further away, so this still doesn’t explain why we get a different result.
add.OBIGT("SUPCRT92")
a <- affinity(pH = c(2, 10), O2 = c(-55, -38), T = T, P = P, IS = IS)
diagram(a, srt = 90)
title("Mineral data from Helgeson et al. (1978)\n(as used in SUPCRT92)",
font.main = 1, cex.main = 0.9)
Added on 2023-11-28.
The reason they are curved has to do with mass balance of elements in aqueous solution. For example, take two reactions between pyrite (FeS2) and pyrrhotite (FeS), one with H2S and the other with HS-:
If a pH 4 solution at 150 °C has 0.001 mol/kg H2S, then raising the pH to 8 would give 0.001 mol/kg of HS- and essentially no H2S. For the remainder of this discussion we will assume that mol/kg is equivalent to activity (i.e., that activity cofficients are unity). If we use the same value (0.001) for H2S and HS- in reactions 1 and 2 (the constant activity constraint), then we will get straight lines on a log fO2–pH diagram. However, this is inconsistent with a constant sum constraint of activities that is sometimes attributed to these diagrams.
The constant activity constraint is compatible with the constant sum constraint only well inside the predominance field of a given aqueous species. The equivalence breaks down near the transitions between aqueous species. For instance, if the total activity of S is 0.001, then at the pKa of H2S (about 6.5 at 150 °C), the activities of H2S and HS- are equal to each other and by mass balance are both 0.0005. The position of the stability boundary should be calculated with these activities to satisfy the constant sum constraint.
The following code defines functions to calculate log fO2 for these two reactions.
At 150 °C and the pKa of H2S, we get log fO2 = -54.68 for aH2S = aHS- = 0.001 but log fO2 = -54.08 for aH2S + aHS- = 0.001. In other words, the constant activity and constant sum constraints produce different results; the former yields two straight lines while the latter yields a curve. This is shown graphically in the plots below.
The plot on the left is made “by hand” (using equilibrium constants
calculated with subcrt()
) while the plot on the right is
made with the mosaic()
and diagram()
functions. The gray area is where water is unstable and is automatically
added by diagram()
. If you’d like to make a plot without
curved lines (i.e., for constant activity instead of
constant sum), then set blend = FALSE
in
mosaic()
.
There are relatively few published log fO2–pH diagrams with curved mineral stability lines. An example of one is in Figure 5 of Cooke et al. (2000). The code below makes a diagram for the minerals shown in that figure:
basis(c("FeO", "SO4-2", "CO3-2", "H2O", "H+", "oxygen"))
basis("SO4-2", -3)
basis("CO3-2", -0.6)
species(c("hematite", "pyrite", "pyrrhotite", "magnetite", "siderite"))
bases <- list( c("SO4-2", "HSO4-", "HS-", "H2S"), c("CO3-2", "HCO3-", "CO2") )
m <- mosaic(bases, pH = c(0, 14, 500), O2 = c(-57, -35, 500), T = 150, IS = 0.77)
d <- diagram(m$A.species, fill = "terrain", dx = c(0, 0, 0, 0, 0.3))
water.lines(d)
This result suggests two improvements to Fig. 5A in Cooke et al. (2000). First, the triangular area above the water stability limit should be labeled as part of the siderite field (which is interrupted by the pyrite wedge), not as pyrrhotite. Second, the boundary between pyrite and magnetite has one kink, not two.
Added on 2024-04-01.
T
for solids, liquids, and
gases?