This vignette was compiled on 2023-06-24 with CHNOSZ version 2.0.0-13.
As one syllable that starts with an sh sound and rhymes with Oz. CHNOSZ and schnoz are homophones.
Answered on 2023-05-22.
info()
to show the reference keys for particular species and
thermo.refs()
to list the bibliographic details:info(info("alanine"))[c("ref1", "ref2")]
## ref1 ref2
## 1714 AH97b DLH06.1
thermo.refs(info("alanine"))
## key author year
## 71 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
## 71 J. Chem. Soc., Faraday Trans. 93, 1927-1941 amino acids GHS
## 154 Biogeosciences 3, 311-336 amino acids HKF parameters
## URL
## 71 https://doi.org/10.1039/A608126F
## 154 https://doi.org/10.5194/bg-3-311-2006
Answered on 2023-05-27.
Answered on 2018-11-13; moved from https://chnosz.net/ on 2023-05-27.
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.
Answered on 2023-05-17.
Many minerals undergo phase transitions upon heating. The stable
phases at different temperatures are called polymorphs. Each polymorph
for a given mineral should have its own entry in OBIGT, including values
of the standard thermodynamic properties (ΔG°, ΔH°,
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
<- "Fe0.877S"
formula <- "PMW87"
ref1 # 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)
<- -25543
G1 <- -25200
H1 <- 14.531
S1 <- 11.922
Cp1 # Heat capacity coefficients for polymorph 1
<- 7.510
a1 <- 0.014798
b1 # For volume, use the value from Helgeson et al. (1978)
<- V2 <- 18.2
V1 # Transition temperature
<- 598
Ttr # Transition enthalpy (cal/mol)
<- 95
DHtr # Heat capacity coefficients for polymorph 2
<- -1.709
a2 <- 0.011746
b2 <- 3073400
c2 # Maximum temperature of polymorph 2
<- 1800 T2
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
.
<- 0 # DON'T CHANGE THIS
DGtr <- DHtr - DGtr # TΔS° = ΔH° - ΔG°
TDStr <- TDStr / Ttr DStr
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° = ΔH° − TΔS° for the
formation properties from the elements for either polymorph, as
indicated by the following messages. We will check again for consistency
of the thermodynamic parameters at the end of the example.
info(info("pyrrhotite_new", "cr"))
check.GHS: calculated G of pyrrhotite_new(cr) differs by 3989 cal mol-1 from database value
info(info("pyrrhotite_new", "cr2"))
check.GHS: calculated G 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°, 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.
<- subcrt("pyrrhotite_new", "cr", P = 1, T = Ttr, use.polymorphs = FALSE)$out[[1]]$S
DS1 <- subcrt("pyrrhotite_new", "cr2", P = 1, T = Ttr)$out[[1]]$S
DS2 <- DS1 + DStr - DS2 DS25
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 + DS25)
<- subcrt("pyrrhotite_new", "cr", P = 1, T = Ttr, use.polymorphs = FALSE)$out[[1]]
D1 <- subcrt("pyrrhotite_new", "cr2", P = 1, T = Ttr)$out[[1]] D2
It’s a good idea to check that the entropy of transition is calculated correctly.
stopifnot(all.equal(D2$S - D1$S, DStr))
Now we’re ready to add up the contributions to ΔG° and ΔH° 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.
<- D1$G + DGtr - D2$G
DG25 <- D1$H + DHtr - D2$H
DH25 mod.OBIGT("pyrrhotite_new", state = "cr", G = G1, H = H1)
mod.OBIGT("pyrrhotite_new", state = "cr2", G = G1 + DG25, H = H1 + DH25)
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.
<- info(info("pyrrhotite_new", "cr"))
cr_parameters stopifnot(abs(check.GHS(cr_parameters)) < 1)
<- info(info("pyrrhotite_new", "cr2")) cr2_parameters
info.numeric: Cp of pyrrhotite_new(cr2) is NA; set by EOS parameters to 36.37 cal K-1 mol-1
stopifnot(abs(check.GHS(cr2_parameters)) < 1)
For the curious, here are the parameter values:
cr_parameters
## name abbrv formula state ref1 ref2 date model E_units G
## 3466 pyrrhotite_new <NA> Fe0.877S cr PMW87 <NA> <NA> CGL cal -25543
## H S Cp V a b c d e f lambda T
## 3466 -25200 14.531 11.922 18.2 7.51 0.014798 0 0 0 0 0 598
cr2_parameters
## name abbrv formula state ref1 ref2 date model E_units
## 3467 pyrrhotite_new <NA> Fe0.877S cr2 PMW87 <NA> <NA> CGL cal
## G H S Cp V a b c d e f
## 3467 -25802.75 -27099.4 9.031592 36.36706 18.2 -1.709 0.011746 3073400 0 0 0
## lambda T
## 3467 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° is a
continuous function – visual confirmation that the parameters yield zero
for DGtr
– but ΔH°, 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.
Answered on 2023-06-23.