Kinetically-controlled dissolution of albite into an acidic solution
Section 16.4 of Bethke (2007) describes the gradual dissolution of albite into an acidic solution, as governed by a kinetic rate law. The reaction is with rate It is assumed that:
there is 1kg of solvent water in addition to:
0.1 molal Cl,
0.1 molal Na,
molal SiO(aq),
molal Al;
the temperature is 70C;
initially 250g (0.953387mol) of "albite low" is added to the water;
the specific surface area is cm/g(albite low);
the rate constant is mol.cm.smol.cm.day;
the pH is fixed at 1.5 for the entire simulation
MOOSE input file
The MOOSE input file defines the model using the GeochemicalModelDefinition. This defines the basis species as well as defining that the dynamics of the mineral Albite
will be controlled by a kinetic rate law.
[definition]
type = GeochemicalModelDefinition
database_file = "../../../database/moose_geochemdb.json"
basis_species = "H2O H+ Cl- Na+ SiO2(aq) Al+++"
kinetic_minerals = "Albite"
kinetic_rate_descriptions = "rate_albite"
(modules/geochemistry/test/tests/kinetics/kinetic_albite.i)The rate law for Albite is defined by a GeochemistryKineticRate UserObject (note the promoting_species
):
[rate_albite]
type = GeochemistryKineticRate
kinetic_species_name = Albite
intrinsic_rate_constant = 5.4432E-8 # 6.3E-13mol/s/cm^2 = 5.4432E-8mol/day/cm^2
multiply_by_mass = true
area_quantity = 1000
promoting_species_names = "H+"
promoting_species_indices = "1.0"
[]
(modules/geochemistry/test/tests/kinetics/kinetic_albite.i)The TimeDependentReactionSolver defines the following.
The initial concentration of the species (see note below)
The initial mole number for Albite
That the system is closed at time zero (by default) so the
free_molality
constraints becomes inactive (no SiO(aq) or Al are added or removed from the system by an external agent after this time)The pH, via the
activity
constraint on H. This constraint is not removed, so this effectively means HCl is continually added or removed from the system to maintain the pH (remember Cl is the charge-balance species)That the kinetic rates are updated during the Newton solve that finds the equilibrium configuration at each time step. This helps with stability since it is an implicit approach. Geochemists Workbench appears to only compute the kinetic rates at the begining of the time step (an explicit approach).
[TimeDependentReactionSolver]
model_definition = definition
geochemistry_reactor_name = reactor
charge_balance_species = "Cl-"
constraint_species = "H2O H+ Cl- Na+ SiO2(aq) Al+++"
constraint_value = " 1.0 -1.5 0.1 0.1 1E-6 1E-6"
constraint_meaning = "kg_solvent_water log10activity bulk_composition bulk_composition free_concentration free_concentration"
constraint_unit = " kg dimensionless moles moles molal molal"
initial_temperature = 70.0
temperature = 70.0
kinetic_species_name = Albite
kinetic_species_initial_value = 250
kinetic_species_unit = g
evaluate_kinetic_rates_always = true # implicit time-marching used for stability
ramp_max_ionic_strength_initial = 0 # max_ionic_strength in such a simple problem does not need ramping
stoichiometric_ionic_str_using_Cl_only = true # for comparison with GWB
execute_console_output_on = '' # only CSV output for this example
[]
(modules/geochemistry/test/tests/kinetics/kinetic_albite.i)The bulk composition for Na+ is 0.1 moles. This means there are 0.1 moles in the aqueous solution (some will be free, others will be bound into secondary species such as NaCl). In addition to this, there is Na+ bound inside the 250g (0.953387 moles) of Albite. If you wish to define the entire bulk composition (aqueous plus kinetic) you should use the bulk_composition_with_kinetic
keyword, which would be set to 1.053387 moles in this case. The other species (HO, Al, SiO(aq) and H) do not have bulk mole number constraints so they aren't impacted by the Albite.
The Executioner
defines the time-stepping (time is measured in days in this input file)
[Executioner]
type = Transient
dt = 5
end_time = 30 # measured in days
[]
(modules/geochemistry/test/tests/kinetics/kinetic_albite.i)An AuxVariable
, AuxKernel
, Postprocessor
and Output
allow the mole number of the Albite mineral to be recorded into a CSV file using the moles_Albite
AuxVariable added automatically by the TimeDependentReactionSolver
[AuxVariables]
[mole_change_albite]
[]
[]
[AuxKernels]
[mole_change_albite]
type = ParsedAux
args = moles_Albite
function = 'moles_Albite - 0.953387'
variable = mole_change_albite
[]
[]
[Postprocessors]
[mole_change_Albite]
type = PointValue
point = '0 0 0'
variable = "mole_change_albite"
[]
[]
[Outputs]
csv = true
[]
(modules/geochemistry/test/tests/kinetics/kinetic_albite.i)GWB input file
The equivalent Geochemists Workbench input file is
# React script that is equivalent to kinetic_albite.i
time begin = 0 days, end = 30 days
T = 70
pH = 1.5
0.1 molal Cl-
0.1 molal Na+
1 umolal SiO2(aq)
1 umolal Al+++
react 250 g "Albite low"
kinetic "Albite low" rate_con = 6.3e-13, apower(H+) = 1 \
surface = 1000
fix pH
go
(modules/geochemistry/test/tests/kinetics/kinetic_albite.rea)Note that the bulk composition for Na+
is 0.1, as mentioned above. When running, GWB increases the bulk composition of Cl-
in order to enforce charge neutrality (which looks strange because the initial composition is uncharged) but that does not impact the results presented below.
Results
The results shown below can be compared with Bethke (2007) Figure 16.2.

Figure 1: Change in mole number of kinetically-controlled albite. Compare with Bethke's Figure 16.2
References
- Craig M. Bethke.
Geochemical and Biogeochemical Reaction Modeling.
Cambridge University Press, 2 edition, 2007.
doi:10.1017/CBO9780511619670.[BibTeX]