Computing equilibrium activity ratios
This page follows Chapter 11 of Bethke (2007).
The geochemistry
module can be used to provide activity ratios assuming equilibrium.
Muscovite and kaolinite
Using the standard GWB database and the component kaolinite instead of Al (using a swap), the reaction has an equilibrium constant at 25C. Assuming a water activity of 1, the equilibrium activity ratio can be computed to be
To perform this calculation using the geochemistry
module, a GeochemicalModelDefinition object must be created with the desired mineral species:
[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 K+ Al+++ SiO2(aq) H+"
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"}>>> = "Muscovite Kaolinite"
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 # to get exact logK at 25degC with no best-fit interpolation
[]
[]
(modules/geochemistry/test/tests/interrogate_reactions/muscovite.i)Then a GeochemicalModelInterrogator must be created which specifies the desired swaps and the interrogation = activity
instruction:
[GeochemicalModelInterrogator<<<{"href": "../../../syntax/GeochemicalModelInterrogator/index.html"}>>>]
model_definition<<<{"description": "The name of the GeochemicalModelDefinition user object"}>>> = definition
swap_out_of_basis<<<{"description": "Species that should be removed from the model_definition's basis and be replaced with the swap_into_basis species. There must be the same number of species in swap_out_of_basis and swap_into_basis. If this list contains more than one species, the swapping is performed one-by-one, starting with the first pair (swap_out_of_basis[0] and swap_into_basis[0]), then the next pair, etc"}>>> = "Al+++"
swap_into_basis<<<{"description": "Species that should be removed from the model_definition's equilibrium species list and added to the basis"}>>> = " Kaolinite"
activity_species<<<{"description": "Species that are provided numerical values of activity (or fugacity for gases) in the activity_value input"}>>> = "H2O"
activity_values<<<{"description": "Numerical values for the activity (or fugacity) for the species in the activity_species list. These are activity values, not log10(activity)."}>>> = "1.0"
equilibrium_species<<<{"description": "Only output results for this equilibrium species. If not provided, results for all equilibrium species will be outputted"}>>> = Muscovite
interrogation<<<{"description": "Type of interrogation to perform. reaction: Output equilibrium species reactions and log10K. activity: determine activity products at equilibrium. eqm_temperature: determine temperature to ensure equilibrium"}>>> = activity
[]
(modules/geochemistry/test/tests/interrogate_reactions/muscovite.i)The final line of the output yields the desired information:
(A_K+)^1 (A_Al+++)^3 (A_SiO2(aq))^3 (A_H+)^-10 = 10^14.56
(A_K+)^1 (A_H+)^-1 = 10^3.421
Muscovite and other minerals
The geochemical database can be manipulated to give the following reactions for muscovite: (at 25C). These yield, respectively
To perform this calculation using the geochemistry
module, a GeochemicalModelDefinition object must be created with the desired mineral species:
[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 K+ Al+++ SiO2(aq) H+"
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"}>>> = "Muscovite Quartz Maximum Tridymite Amrph^silica"
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 # to get exact logK at 25degC with no best-fit interpolation
[]
[]
(modules/geochemistry/test/tests/interrogate_reactions/muscovite2.i)Then a GeochemicalModelInterrogator must be created which specifies the desired swaps and the interrogation = activity
instruction:
[GeochemicalModelInterrogator<<<{"href": "../../../syntax/GeochemicalModelInterrogator/index.html"}>>>]
model_definition<<<{"description": "The name of the GeochemicalModelDefinition user object"}>>> = definition
swap_out_of_basis<<<{"description": "Species that should be removed from the model_definition's basis and be replaced with the swap_into_basis species. There must be the same number of species in swap_out_of_basis and swap_into_basis. If this list contains more than one species, the swapping is performed one-by-one, starting with the first pair (swap_out_of_basis[0] and swap_into_basis[0]), then the next pair, etc"}>>> = "SiO2(aq) Al+++ Quartz SiO2(aq) Tridymite SiO2(aq)"
swap_into_basis<<<{"description": "Species that should be removed from the model_definition's equilibrium species list and added to the basis"}>>> = " Quartz Maximum SiO2(aq) Tridymite SiO2(aq) Amrph^silica"
equilibrium_species<<<{"description": "Only output results for this equilibrium species. If not provided, results for all equilibrium species will be outputted"}>>> = Muscovite
interrogation<<<{"description": "Type of interrogation to perform. reaction: Output equilibrium species reactions and log10K. activity: determine activity products at equilibrium. eqm_temperature: determine temperature to ensure equilibrium"}>>> = activity
[]
(modules/geochemistry/test/tests/interrogate_reactions/muscovite2.i)The output yields the desired information
(A_H2O)^6 (A_K+)^1 (A_Al+++)^3 (A_SiO2(aq))^3 (A_H+)^-10 = 10^14.56
(A_H2O)^6 (A_K+)^1 (A_Al+++)^3 (A_H+)^-10 = 10^26.56
(A_K+)^-2 (A_H+)^2 = 10^-9.681
(A_K+)^-2 (A_SiO2(aq))^-6 (A_H+)^2 = 10^14.31
(A_K+)^-2 (A_H+)^2 = 10^-8.686
(A_K+)^-2 (A_SiO2(aq))^-6 (A_H+)^2 = 10^14.31
(A_K+)^-2 (A_H+)^2 = 10^-1.967
Ca-clinoptilolite, prehnite and quartz
Using the standard GWB database, prehnite instead of Al, quartz instead of SiO(aq) (using swaps), the reaction has an equilibrium constant at 200C. Assuming a water activity of 1, the equilibrium activity ratio can be computed to be
To produce this result using the geochemistry
module, a GeochemicalModelDefinition object must be created with the desired mineral species:
[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 Ca++ Al+++ SiO2(aq) H+ K+"
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"}>>> = "Clinoptil-Ca Prehnite Quartz"
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 # to get exact logK at 200degC with no best-fit interpolation
[]
[]
(modules/geochemistry/test/tests/interrogate_reactions/clinoptilolite2.i)Then a GeochemicalModelInterrogator must be created which specifies the desired swaps and the interrogation = activity
instruction:
[GeochemicalModelInterrogator<<<{"href": "../../../syntax/GeochemicalModelInterrogator/index.html"}>>>]
model_definition<<<{"description": "The name of the GeochemicalModelDefinition user object"}>>> = definition
swap_out_of_basis<<<{"description": "Species that should be removed from the model_definition's basis and be replaced with the swap_into_basis species. There must be the same number of species in swap_out_of_basis and swap_into_basis. If this list contains more than one species, the swapping is performed one-by-one, starting with the first pair (swap_out_of_basis[0] and swap_into_basis[0]), then the next pair, etc"}>>> = "Al+++ SiO2(aq)"
swap_into_basis<<<{"description": "Species that should be removed from the model_definition's equilibrium species list and added to the basis"}>>> = " Prehnite Quartz"
activity_species<<<{"description": "Species that are provided numerical values of activity (or fugacity for gases) in the activity_value input"}>>> = "H2O"
activity_values<<<{"description": "Numerical values for the activity (or fugacity) for the species in the activity_species list. These are activity values, not log10(activity)."}>>> = "1"
equilibrium_species<<<{"description": "Only output results for this equilibrium species. If not provided, results for all equilibrium species will be outputted"}>>> = "Clinoptil-Ca"
temperature<<<{"description": "Equilibrium constants will be computed at this temperature [degC]. This is ignored if interrogation=eqm_temperature."}>>> = 200
interrogation<<<{"description": "Type of interrogation to perform. reaction: Output equilibrium species reactions and log10K. activity: determine activity products at equilibrium. eqm_temperature: determine temperature to ensure equilibrium"}>>> = activity
[]
(modules/geochemistry/test/tests/interrogate_reactions/clinoptilolite2.i)The final line of the output yields the desired information:
(A_Ca++)^1 (A_Al+++)^2 (A_SiO2(aq))^10 (A_H+)^-8 = 10^-13.51
(A_Ca++)^-1 (A_SiO2(aq))^7 (A_H+)^2 = 10^-27.22
(A_Ca++)^-1 (A_H+)^2 = 10^-10.23
References
- Craig M. Bethke.
Geochemical and Biogeochemical Reaction Modeling.
Cambridge University Press, 2 edition, 2007.
doi:10.1017/CBO9780511619670.[BibTeX]