Chemical model of seawater

This example closely follows Section 6.1 of Bethke (2007).

A chemical analysis of the major element composition of seawater is shown in Table 1, while Table 2 lists the partial pressures of some gases in the atmosphere.

Table 1: Major element composition of seawater

SpeciesConcentration (mg.kg)
Cl19350
Na10760
SO2710
Mg1290
Ca411
K399
HCO142
SiO(aq)0.1–10
O(aq)0.1–6

Table 2: Partial pressures of some gases in the atmosphere

GasPressure (atm)
N0.78
O0.21
HO0.001–0.23
CO0.0003
CH
CO
SO
NO
H
NO

In this example, we assume that the CO(g) and O(g) fugacities can be set to approximately their partial pressures. Fixing the CO fugacity fixes pH according to the reaction Fixing the fugacity of O(g) defines the oxidation state according to Finally, assume the extent of the system is 1kg of solvent water along with the solutes dissolved in it.

MOOSE input file: no precipitation

The MOOSE input file contains the usual GeochemicalModelDefinition that specifies the database file to use, and in this case the basis species, equilibrium minerals and equilibrium gases. The flag piecewise_linear_interpolation = true in order to compare with the Geochemists Workbench result

[UserObjects]
  [definition]
    type = GeochemicalModelDefinition
    database_file = "../../../database/moose_geochemdb.json"
    basis_species = "H2O H+ Cl- Na+ SO4-- Mg++ Ca++ K+ HCO3- SiO2(aq) O2(aq)"
    equilibrium_minerals = "Antigorite Tremolite Talc Chrysotile Sepiolite Anthophyllite Dolomite Dolomite-ord Huntite Dolomite-dis Magnesite Calcite Aragonite Quartz"
    equilibrium_gases = "O2(g) CO2(g)"
    piecewise_linear_interpolation = true # for comparison with GWB
  []
[]
(modules/geochemistry/test/tests/equilibrium_models/seawater_no_precip.i)

To instruct MOOSE to find the equilibrium configuration, a TimeIndependentReactionSolver is used:

  • The swaps are defined.

  • The fugacity of the gases is fixed as defined above.

  • The bulk mole number of the aqueous species is also fixed appropriately. The numbers are different than the concentration in mg.kg given in the above table, and may be worked out using the TDS.

  • The prevent_precipitation input prevents any minerals from precipitating when finding the equilibrium configuration, even if their saturation indices are positive.

  • The other flags enable an accurate comparison with the Geochemists Workbench software.

[TimeIndependentReactionSolver]
  model_definition = definition
  swap_out_of_basis = "H+     O2(aq)"
  swap_into_basis = "  CO2(g) O2(g)"
  charge_balance_species = "Cl-" # this means the bulk moles of Cl- will not be exactly as set below
  constraint_species = "H2O              CO2(g)    O2(g)         Cl-              Na+              SO4--            Mg++             Ca++             K+               HCO3-            SiO2(aq)"
  constraint_value = "  1.0              0.0003162 0.2           0.566            0.485            0.0292           0.055            0.0106           0.0106           0.00241          0.000103"
  constraint_meaning = "kg_solvent_water fugacity  fugacity      bulk_composition bulk_composition bulk_composition bulk_composition bulk_composition bulk_composition bulk_composition bulk_composition"
  constraint_unit = "   kg          dimensionless  dimensionless moles            moles            moles            moles            moles            moles            moles            moles"
  prevent_precipitation = "Antigorite Tremolite Talc Chrysotile Sepiolite Anthophyllite Dolomite Dolomite-ord Huntite Dolomite-dis Magnesite Calcite Aragonite Quartz"
  ramp_max_ionic_strength_initial = 0 # not needed in this simple problem
  stoichiometric_ionic_str_using_Cl_only = true # for comparison with GWB
  mol_cutoff = 1E-5
  abs_tol = 1E-15
  precision = 7
[]
(modules/geochemistry/test/tests/equilibrium_models/seawater_no_precip.i)

MOOSE input file: with precipitation

The MOOSE input file is very similar to the no-precipitation case. There are two differences:

  • The prevent_precipitation input is changed.

  • The swaps are different, as is the initial condition for MgCO. This is discussed in Bethke (2007).

[TimeIndependentReactionSolver]
  model_definition = definition
  swap_out_of_basis = "H+   "
  swap_into_basis = "  MgCO3"
  charge_balance_species = "Cl-" # this means the bulk moles of Cl- will not be exactly as set below
  constraint_species = "H2O              MgCO3            O2(aq)             Cl-              Na+              SO4--            Mg++             Ca++             K+               HCO3-            SiO2(aq)"
# to obtain the constraint on MgCO3: (1) run seawater_no_precip.i to obtain the free molality of MgCO3; (2) then running seawater_no_precip.i with MgCO3 in the basis (in place of H+) with that free molality, to obtain the bulk mole number
  constraint_value = "  1.0              0.0001959        0.2151E-3          0.566            0.485            0.0292           0.055            0.0106           0.0106           0.00241          0.000103"
  constraint_meaning = "kg_solvent_water bulk_composition free_concentration bulk_composition bulk_composition bulk_composition bulk_composition bulk_composition bulk_composition bulk_composition bulk_composition"
  constraint_unit = "   kg               moles            molal              moles            moles            moles            moles            moles            moles            moles            moles"
  prevent_precipitation = "Dolomite-dis Dolomite-ord"
  ramp_max_ionic_strength_initial = 0 # not needed in this simple problem
  stoichiometric_ionic_str_using_Cl_only = true # for comparison with GWB
  mol_cutoff = 1E-5
  abs_tol = 1E-15
[]

[UserObjects]
  [definition]
    type = GeochemicalModelDefinition
    database_file = "../../../database/moose_geochemdb.json"
    basis_species = "H2O H+ Cl- Na+ SO4-- Mg++ Ca++ K+ HCO3- SiO2(aq) O2(aq)"
    equilibrium_minerals = "Antigorite Tremolite Talc Chrysotile Sepiolite Anthophyllite Dolomite Dolomite-ord Huntite Dolomite-dis Magnesite Calcite Aragonite Quartz"
    piecewise_linear_interpolation = true # for comparison with GWB
  []
[]
(modules/geochemistry/test/tests/equilibrium_models/seawater_precip.i)

Geochemists Workbench input files

The Geochemists Workbench input file for the precipitation case is:

# React script that is analogous to the seawater_precip.i MOOSE input file
data = thermo.tdat verify
conductivity = conductivity-USGS.dat
temperature = 25 C
H2O          = 1 free kg
Cl-          = 0.566 mol
balance on Cl-
Na+          = 0.485 mol
SO4--        = 0.0292 mol
Mg++         = 0.055 mol
Ca++         = 0.0106 mol
K+           = 0.0106 mol
HCO3-        = 0.00241 mol
SiO2(aq)     = 0.000103 mol
O2(aq)       = 0.0002151 free molal
swap MgCO3 for H+
MgCO3        = 0.0001959 mol
printout  species = long
epsilon = 1e-15
go
(modules/geochemistry/test/tests/equilibrium_models/seawater_precip.rea)

The non-precipitation case is similar (see the seawater_no_precip.rea file).

Results

The geochemistry results mirror those from Geochemists Workbench exactly.

Error and charge-neutrality error

The geochemistry simulation reports an error of 1.664e-16mol, and that the charge of the solution is 4.467e-17mol.

Solution mass

The solution mass is 1.036kg.

Ionic strength and water activity

The ionic strength is 0.6518mol/kg(solvent water), and the water activity is 0.982.

pH, pe and Eh

After precipitation, the pH is 6.726, the pe is 13.88, and Eh = 0.821V.

Aqueous species distribution

The molalities of the most abundant species results in Table 3.

Table 3: Calculated molalities, activity coefficients and activities of the most abundant species in seawater

SpeciesMolality (mol.kg)Activity coeffloga
Cl0.55030.6276-0.4617
Na0.47550.6717-0.4957
Mg0.3160-1.9000
SO0.1692-2.5661
K0.6276-2.1871
MgCl0.6717-2.2113
NaSO0.6717-2.3679
Ca0.2465-2.8446
MgSO1.0-2.2385
CaCl0.6717-2.6063
NaCl1.0-2.5567
HCO0.6906-3.0938
CaSO1.0-3.0908
NaHCO1.0-3.4463
O(aq)1.1734-3.5979
KSO0.6717-3.9007
MgHCO0.6717-3.9836
SiO(aq)1.1735-3.9993
KCl1.0-4.2364

Minerals

The saturation indices of the equilibrium solution in Table 3 are greater than 0 for a number of minerals, which suggests some minerals will precipitate. Allowing this to occur, the geochemistry simulations and the GWB simulations predict that only dolomite and quartz actually precipitate (both codes produce the same precipitated mass) as shown in Table 4.

Table 4: Calculated initial saturation indices, and the final mass of each precipitate in the stable phase assemblage

MineralInitial SIAmount formed (mg)
Antigorite430
Tremolite7.30
Talc6.50
Chrysotile4.50
Sepiolite3.70
Dolomite-ord3.30
Dolomite3.350.63
Anthophyllite3.00
Huntite1.80
Dolomite-dis1.80
Magnesite0.950
Calcite0.740
Aragonite0.570
Quartz-0.011.028

References

  1. Craig M. Bethke. Geochemical and Biogeochemical Reaction Modeling. Cambridge University Press, 2 edition, 2007. doi:10.1017/CBO9780511619670.[BibTeX]