This page was generated from docs/benchmarking/equilibrium_constants.ipynb. Interactive online version: Binder badge.

Python Notebook Download

Benchmarking models for equilibrium constants

This notebook benchmarks the models for equilibrium constants in VolFe where possible.

The following equilibrium constants and models do not have material available in the original papers for benchmarking:

  • KHOg: ‘Ohmoto97’ Reaction (d) in Table 1 from Ohmoto & Kerrick (1977)

  • KHOSg: ‘Ohmoto97’ Reaction (h) in Table 1 from Ohmoto & Kerrick (1977)

  • KOSg: ‘Ohmoto97’ Reaction (f) in Table 1 from Ohmoto & Kerrick (1977)

  • KOCg: ‘Ohmoto97’ Reaction (c) in Table 1 from Ohmoto & Kerrick (1977)

  • KCOHg: ‘Ohmoto97’ Reaction (e) in Table 1 from Ohmoto & Kerrick (1977)

  • KCOs: ‘Holloway92’ Eq (3) KI in Holloway et al. (1992)

Python set-up

[2]:
import VolFe as vf
import math

Models for equilibrium constant of SO3

option = KOSg2, function = KOSg2

‘ONeill22’ Eq. (6b) from O’Neill & Mavrogenes (2022)

Appendix A. Supplementary material - Supplementary data 2. Tab = Table S6 S redox calculator (sulfate,KSOg2=ONeill22.xlsx).

Cell AI12: -17.61

Matches to 2 decimal places. Note spreadsheet uses +273 to convert to K, rather than 273.15 used in VolFe so T in spreadsheet = 1200.15 ‘C

[3]:
PT = {"P":1000.}
PT["T"]=1200.

my_models = [["KOSg2", "ONeill22"]]
my_models = vf.make_df_and_add_model_defaults(my_models)
math.log(1./vf.KOSg2(PT,models=my_models))
[3]:
-17.606473217676754

Models for equilibrium constant of OCS

option = KOCSg, function = KOCSg

‘Moussallam19’ Eq. (8) for 2CO2 + OCS ⇄ 3CO + SO2 in Moussallam et al. (2019)

From Section 2. Method - Detailed examples of gas oxygen fugacity and equilibrium temperature calculationd - The CO2-CO-OCS-SO2 method

“Given a XSO2 of 0.01, a CO/CO2 molar ratio of 0.043, a CO/OCS molar ratio of 192 and assuming equilibration at atmospheric pressure (∼0.6 bar at Erebus) yields an equilibrium temperature of 1292 K (1019 °C).”

Equation (8):

log P = (-15386.45/T) + 9.24403 - log[((xCO/xCO2)^2)(xCO/xOCS)xSO2]

K = (-15386.45/T) + 9.24403 = log P + log[((xCO/xCO2)^2)(xCO/xOCS)xSO2]

The next cell calculates T from their eq. (17), which they state is 1292 K

[22]:
P = 0.6 # bar
xSO2 = 0.01
xCO_xCO2 = 0.043
xCO_xOCS = 192.

-15386.45/(math.log10(P) - 9.24403 + math.log10((xCO_xCO2**2.)*xCO_xOCS*xSO2))
[22]:
1291.2818121927335

Below we calculate K for their example

[23]:
math.log10(P) + math.log10(xCO_xCO2**2.*xCO_xOCS*xSO2)
[23]:
-2.671610609753634

Which agrees to the first decimal place with VolFe.

[27]:
PT = {"P":0.6}
PT["T"]=1019.

my_models = [["KOCSg", "Moussallam19"]]
my_models = vf.make_df_and_add_model_defaults(my_models)
math.log10(vf.KOCSg(PT,models=my_models))
[27]:
-2.6636045625507876