Saturation indices of halite and anhydrite at Sebkhat El Melah
This example closely follows Section 8.4 of Bethke (2007).
The saturation indices of halite (NaCl) and anhydrite (CaSO) are computed for brine samples from Sebkhat El Melah. The composition of the brine is shown in Table 1. In addition:
the pH is 7.15;
charge balance is performed on Cl.
Table 1: Major element composition of brine in the RZ-2 well at Sebkhat El Melah
Species | Concentration (g.l) |
---|---|
Cl | 195 |
Mg | 52.1 |
Na | 43.1 |
SO | 27.4 |
K | 6.90 |
Br | 2.25 |
Ca | 0.20 |
HCO | 0.14 |
MOOSE input file
The MOOSE input file contains the usual GeochemicalModelDefinition that specifies the database file to use, the basis species and the minerals of interest. The flag piecewise_linear_interpolation = true
in order to compare with the Geochemists Workbench result
[UserObjects<<<{"href": "../../../syntax/UserObjects/index.html"}>>>]
[definition]
type = GeochemicalModelDefinition<<<{"description": "User object that parses a geochemical database file, and only retains information relevant to the current geochemical model", "href": "../../../source/userobjects/GeochemicalModelDefinition.html"}>>>
database_file<<<{"description": "The name of the geochemical database file"}>>> = "../../../database/moose_geochemdb.json"
basis_species<<<{"description": "A list of basis components relevant to the aqueous-equilibrium problem. H2O must appear first in this list. These components must be chosen from the 'basis species' in the database, the sorbing sites (if any) and the decoupled redox states that are in disequilibrium (if any)."}>>> = "H2O H+ Cl- Mg++ Na+ SO4-- K+ Br- Ca++ HCO3-"
equilibrium_minerals<<<{"description": "A list of minerals that are in equilibrium with the aqueous solution. All members of this list must be in the 'minerals' section of the database file"}>>> = "Halite Anhydrite"
piecewise_linear_interpolation<<<{"description": "If true then use a piecewise-linear interpolation of logK and Debye-Huckel parameters, regardless of the interpolation type specified in the database file. This can be useful for comparing with results using other geochemistry software"}>>> = true # for comparison with GWB
[]
[]
(modules/geochemistry/test/tests/solubilities_and_activities/sebkhat_el_melah.i)To instruct MOOSE to find the equilibrium configuration, a TimeIndependentReactionSolver is used:
The bulk mole number of the aqueous species is also appropriately. The numbers are different than the concentration in g.l given in the above table, and may be worked out using the TDS.
The pH is set by providing the relevant activity for H.
The
prevent_precipitation
input prevents any minerals from precipitating when finding the equilibrium configuration, even if their saturation indices are positive.The
max_ionic_strength
is set large in this case in order to match that specified by Bethke (2007) for this example. Bethke (2007) notes that the Debye-Huckel theory is not valid above ionic strengths of about 3molal, and uses this example to demonstrate the resulting large errors when compared with experiment. In this page, the comparison with experiment is not performed: we are just using this example to demonstrate agreement with the Geochemists Workbench software.The other flags enable an accurate comparison with the Geochemists Workbench software.
[TimeIndependentReactionSolver<<<{"href": "../../../syntax/TimeIndependentReactionSolver/index.html"}>>>]
model_definition<<<{"description": "The name of the GeochemicalModelDefinition user object (you must create this UserObject yourself)"}>>> = definition
charge_balance_species<<<{"description": "Charge balance will be enforced on this basis species. This means that its bulk mole number may be changed from the initial value you provide in order to ensure charge neutrality. After the initial swaps have been performed, this must be in the basis, and it must be provided with a bulk_composition constraint_meaning."}>>> = "Cl-"
constraint_species<<<{"description": "Names of the species that have their values fixed to constraint_value with meaning constraint_meaning. All basis species (after swap_into_basis and swap_out_of_basis) must be provided with exactly one constraint. These constraints are used to compute the configuration during the initial problem setup, and in time-dependent simulations they may be modified as time progresses."}>>> = "H2O H+ Cl- Mg++ Na+ SO4-- K+ Br- Ca++ HCO3-"
# assume that g/l means g/kg(solvent water)
constraint_value<<<{"description": "Numerical value of the containts on constraint_species"}>>> = " 1.0 -7.15 5.500 2.1436 1.8747 0.2852 0.17648 0.02816 0.00499 0.00229"
constraint_meaning<<<{"description": "Meanings of the numerical values given in constraint_value. kg_solvent_water: can only be applied to H2O and units must be kg. bulk_composition: can be applied to all non-gas species, and represents the total amount of the basis species contained as free species as well as the amount found in secondary species but not in kinetic species, and units must be moles or mass (kg, g, etc). bulk_composition_with_kinetic: can be applied to all non-gas species, and represents the total amount of the basis species contained as free species as well as the amount found in secondary species and in kinetic species, and units must be moles or mass (kg, g, etc). free_concentration: can be applied to all basis species that are not gas and not H2O and not mineral, and represents the total amount of the basis species existing freely (not as secondary species) within the solution, and units must be molal or mass_per_kg_solvent. free_mineral: can be applied to all mineral basis species, and represents the total amount of the mineral existing freely (precipitated) within the solution, and units must be moles, mass or cm3. activity and log10activity: can be applied to basis species that are not gas and not mineral and not sorbing sites, and represents the activity of the basis species (recall pH = -log10activity), and units must be dimensionless. fugacity and log10fugacity: can be applied to gases, and units must be dimensionless"}>>> = "kg_solvent_water log10activity bulk_composition bulk_composition bulk_composition bulk_composition bulk_composition bulk_composition bulk_composition bulk_composition"
constraint_unit<<<{"description": "Units of the numerical values given in constraint_value. Dimensionless: should only be used for activity or fugacity constraints. Moles: mole number. Molal: moles per kg solvent water. kg: kilograms. g: grams. mg: milligrams. ug: micrograms. kg_per_kg_solvent: kilograms per kg solvent water. g_per_kg_solvent: grams per kg solvent water. mg_per_kg_solvent: milligrams per kg solvent water. ug_per_kg_solvent: micrograms per kg solvent water. cm3: cubic centimeters"}>>> = " kg dimensionless moles moles moles moles moles moles moles moles"
prevent_precipitation<<<{"description": "Mineral species in this list will be prevented from precipitating, irrespective of their saturation index (unless they are initially in the basis)"}>>> = "Halite Anhydrite"
max_ionic_strength<<<{"description": "Maximum value of ionic strength"}>>> = 10.0
ramp_max_ionic_strength_initial<<<{"description": "The number of iterations over which to progressively increase the maximum ionic strength (from zero to max_ionic_strength) during the initial equilibration. Increasing this can help in convergence of the Newton process, at the cost of spending more time finding the aqueous configuration."}>>> = 0 # not needed in this simple example
stoichiometric_ionic_str_using_Cl_only<<<{"description": "If set to true, the stoichiometric ionic strength will be set equal to Cl- molality (or max_ionic_strength if the Cl- molality is too big). This flag overrides ionic_str_using_basis_molality_only"}>>> = true # for comparison with GWB
abs_tol<<<{"description": "If the residual of the algebraic system (measured in mol) is lower than this value, the Newton process (that finds the aqueous configuration) is deemed to have converged"}>>> = 1E-12
[]
(modules/geochemistry/test/tests/solubilities_and_activities/sebkhat_el_melah.i)Geochemists Workbench input file
The Geochemists Workbench input file for the precipitation case is:
# React script that is equivalent to sebkhat_el_melah.i
data = thermo.tdat verify
conductivity = conductivity-USGS.dat
temperature = 25 C
H2O = 1 free kg
Cl- = 5.5 mol
balance on Cl-
H+ = 7.15
Mg++ = 2.1436 mol
Na+ = 1.8747 mol
SO4-- = 0.2852 mol
K+ = 0.17648 mol
Br- = 0.02816 mol
Ca++ = 0.00499 mol
HCO3- = 0.00229 mol
suppress ALL
epsilon = 1E-12
simax = 10
timax = 10
go
(modules/geochemistry/test/tests/solubilities_and_activities/sebkhat_el_melah.rea)Results
The geochemistry
module and the Geochemists Workbench both predict identical results, in agreement with Bethke (2007):
the saturation index of halite is approximately -0.94
the saturation index of anhydrite is approximately -1.7.
References
- Craig M. Bethke.
Geochemical and Biogeochemical Reaction Modeling.
Cambridge University Press, 2 edition, 2007.
doi:10.1017/CBO9780511619670.[BibTeX]