Progressively adding potassium feldspar

This page follows Chapter 13 of Bethke (2007) and involves computing the equilibrium system as K-feldspar is added to a hypothetical water.

The initial composition of the water is shown in Table 1. Assume that the temperature is 25C and the initial pH is 5. cm of K-feldspar is slowly added to this system.

Table 1: Initial bulk composition of the hypothetical water

SpeciesConcentration (molal)Approx conc (mg/kg(solvent water))
HCO50
Cl30
Ca15
SO8
Na5
Mg3
SiO(aq)3
K1
Al

MOOSE input file: definition

The GeochemicalModelDefinition specifies the database file to use, and in this case the basis species and equilibrium minerals. 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+ Na+ K+ Ca++ Mg++ Al+++ SiO2(aq) Cl- SO4-- HCO3-"
    equilibrium_minerals = "K-feldspar Kaolinite Muscovite Quartz Phengite"
    piecewise_linear_interpolation = true # for comparison with GWB
  []
[]
(modules/geochemistry/test/tests/time_dependent_reactions/add_feldspar.i)

MOOSE input file: initial conditions and reaction rates

The TimeDependentReactionSolver defines the initial conditions and the desired reaction processes:

  • The pH is defined through specifying the activity for H. Note that at time zero, just after the initial equilibration, this activity constraint is removed via the remove_fixed_activity inputs.

  • The bulk composition of the other chemical species are specified by the moles_bulk_species, as per Table 1.

  • The rate of addition of K-feldspar is defined to be mol/s, which corresponds to cm/s.

  • The other flags are for efficiency and enable an accurate comparison with the Geochemists Workbench software.

[TimeDependentReactionSolver]
  model_definition = definition
  geochemistry_reactor_name = reactor
  charge_balance_species = "Cl-"
  constraint_species = "H2O              H+            Na+              K+               Ca++             Mg++             Al+++            SiO2(aq)         Cl-              SO4--            HCO3-"
  constraint_value = "  1.0              -5            5                1                15               3                1                3                30               8                50"
  constraint_meaning = "kg_solvent_water log10activity bulk_composition bulk_composition bulk_composition bulk_composition bulk_composition bulk_composition bulk_composition bulk_composition bulk_composition"
  constraint_unit = "   kg               dimensionless mg               mg               mg               mg               ug               mg               mg               mg               mg"
  source_species_names = "K-feldspar"
  source_species_rates = "1.37779E-3" # 0.15cm^3 of K-feldspar (molar volume = 108.87 cm^3/mol) = 1.37779E-3 mol
  remove_fixed_activity_name = "H+"
  remove_fixed_activity_time = 0
  ramp_max_ionic_strength_initial = 0 # not needed for this simple problem
  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/time_dependent_reactions/add_feldspar.i)

MOOSE input file: time stepping

A total of 100 steps over the course of 1s is used in this simulation

[Executioner]
  type = Transient
  dt = 0.01
  end_time = 1
[]
(modules/geochemistry/test/tests/time_dependent_reactions/add_feldspar.i)

MOOSE input file: outputs

A set of Postprocessors captures the output, using the AuxVariables added automatically by the TimeDependentReactionSolver:

[Postprocessors]
  [cm3_K-feldspar]
    type = PointValue
    point = '0 0 0'
    variable = 'free_cm3_K-feldspar'
  []
  [cm3_Kaolinite]
    type = PointValue
    point = '0 0 0'
    variable = 'free_cm3_Kaolinite'
  []
  [cm3_Muscovite]
    type = PointValue
    point = '0 0 0'
    variable = 'free_cm3_Muscovite'
  []
  [cm3_Quartz]
    type = PointValue
    point = '0 0 0'
    variable = 'free_cm3_Quartz'
  []
  [cm3_Phengite]
    type = PointValue
    point = '0 0 0'
    variable = 'free_cm3_Phengite'
  []
[]
(modules/geochemistry/test/tests/time_dependent_reactions/add_feldspar.i)

Results

Bethke (2007) predicts that the minerals kaolinite, muscovite, quartz, K-feldspar and phengite all precipitate, and that kaolinite dissolves, as the K-feldspar is gradually added to the solution and the results are presented in Bethke (2007) Figure 13.1. These results are faithfully reproduced by the geochemistry module, as in Figure 1.

Figure 1: Minerals precipitated as K-feldspar is added to the system.

References

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