- charge_balance_speciesCharge 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.
C++ Type:std::string
Controllable:No
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.
- constraint_meaningMeanings 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
C++ Type:MultiMooseEnum
Controllable:No
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
- constraint_speciesNames 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.
C++ Type:std::vector<std::string>
Controllable:No
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.
- constraint_unitUnits 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
C++ Type:MultiMooseEnum
Controllable:No
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
- constraint_valueNumerical value of the containts on constraint_species
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:Numerical value of the containts on constraint_species
- model_definitionThe name of the GeochemicalModelDefinition user object.
C++ Type:UserObjectName
Controllable:No
Description:The name of the GeochemicalModelDefinition user object.
GeochemistryTimeDependentReactor
This UserObject is usually added via a TimeDependentReactionSolver Action: please see that page for many examples. This UserObject's purpose is to solve a time-dependent geochemical system.
Advanced users may wish to add GeochemistryTimeDependentReactor
objects manually to their input files. Here is an example of that:
# This example is simple.i but without using an Action
# Simple example of time-dependent reaction path.
# This example involves an HCl solution that is initialized at pH=2, then the pH is controlled via controlled_activity, and finally HCl is titrated into the solution
[GlobalParams<<<{"href": "../../syntax/GlobalParams/index.html"}>>>]
point = '0 0 0'
[]
[Mesh<<<{"href": "../../syntax/Mesh/index.html"}>>>]
type = GeneratedMesh
dim = 1
[]
[Variables<<<{"href": "../../syntax/Variables/index.html"}>>>]
[u]
[]
[]
[Kernels<<<{"href": "../../syntax/Kernels/index.html"}>>>]
[u]
type = Diffusion<<<{"description": "The Laplacian operator ($-\\nabla \\cdot \\nabla u$), with the weak form of $(\\nabla \\phi_i, \\nabla u_h)$.", "href": "../kernels/Diffusion.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = u
[]
[]
[AuxVariables<<<{"href": "../../syntax/AuxVariables/index.html"}>>>]
[act_H+]
[]
[solution_temperature]
[]
[kg_solvent_H2O]
[]
[activity_H2O]
[]
[bulk_moles_H2O]
[]
[pH]
[]
[molal_H+]
[]
[molal_Cl-]
[]
[molal_HCl]
[]
[molal_OH-]
[]
[mg_per_kg_H+]
[]
[mg_per_kg_Cl-]
[]
[mg_per_kg_HCl]
[]
[mg_per_kg_OH-]
[]
[activity_H+]
[]
[activity_Cl-]
[]
[activity_HCl]
[]
[activity_OH-]
[]
[bulk_moles_H+]
[]
[bulk_moles_Cl-]
[]
[bulk_moles_HCl]
[]
[bulk_moles_OH-]
[]
[]
[AuxKernels<<<{"href": "../../syntax/AuxKernels/index.html"}>>>]
[act_H+]
type = FunctionAux<<<{"description": "Auxiliary Kernel that creates and updates a field variable by sampling a function through space and time.", "href": "../auxkernels/FunctionAux.html"}>>>
variable<<<{"description": "The name of the variable that this object applies to"}>>> = act_H+
function<<<{"description": "The function to use as the value"}>>> = '10^(-2 - t)'
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = timestep_begin
[]
[solution_temperature]
type = GeochemistryQuantityAux<<<{"description": "Extracts information from the Reactor and records it in the AuxVariable", "href": "../auxkernels/GeochemistryQuantityAux.html"}>>>
species<<<{"description": "Species name"}>>> = 'H+'
reactor<<<{"description": "The name of the Geochemistry*Reactor user object."}>>> = reactor
variable<<<{"description": "The name of the variable that this object applies to"}>>> = solution_temperature
quantity<<<{"description": "Type of quantity to output. These are available for non-kinetic species: activity (which equals fugacity for gases); bulk moles (this will be zero if the species is not in the basis); neglog10a = -log10(activity); transported_moles_in_original_basis (will throw an error if species is not in original basis). These are available only for non-kinetic non-minerals: molal = mol(species)/kg(solvent_water); mg_per_kg = mg(species)/kg(solvent_water). These are available only for minerals: free_mg = free mg; free_cm3 = free cubic-centimeters; moles_dumped = moles dumped when special dump and flow-through modes are active. These are available for minerals that host sorbing sites: surface_charge (C/m^2); surface_potential (V). These are available for kinetic species: kinetic_moles; kinetic_additions (-dt * rate = mole increment in kinetic species for this timestep). If quantity=temperature, then the 'species' is ignored and the AuxVariable will record the aqueous solution temperature in degC"}>>> = temperature
[]
[kg_solvent_H2O]
type = GeochemistryQuantityAux<<<{"description": "Extracts information from the Reactor and records it in the AuxVariable", "href": "../auxkernels/GeochemistryQuantityAux.html"}>>>
species<<<{"description": "Species name"}>>> = 'H2O'
reactor<<<{"description": "The name of the Geochemistry*Reactor user object."}>>> = reactor
variable<<<{"description": "The name of the variable that this object applies to"}>>> = kg_solvent_H2O
quantity<<<{"description": "Type of quantity to output. These are available for non-kinetic species: activity (which equals fugacity for gases); bulk moles (this will be zero if the species is not in the basis); neglog10a = -log10(activity); transported_moles_in_original_basis (will throw an error if species is not in original basis). These are available only for non-kinetic non-minerals: molal = mol(species)/kg(solvent_water); mg_per_kg = mg(species)/kg(solvent_water). These are available only for minerals: free_mg = free mg; free_cm3 = free cubic-centimeters; moles_dumped = moles dumped when special dump and flow-through modes are active. These are available for minerals that host sorbing sites: surface_charge (C/m^2); surface_potential (V). These are available for kinetic species: kinetic_moles; kinetic_additions (-dt * rate = mole increment in kinetic species for this timestep). If quantity=temperature, then the 'species' is ignored and the AuxVariable will record the aqueous solution temperature in degC"}>>> = molal
[]
[activity_H2O]
type = GeochemistryQuantityAux<<<{"description": "Extracts information from the Reactor and records it in the AuxVariable", "href": "../auxkernels/GeochemistryQuantityAux.html"}>>>
species<<<{"description": "Species name"}>>> = 'H2O'
reactor<<<{"description": "The name of the Geochemistry*Reactor user object."}>>> = reactor
variable<<<{"description": "The name of the variable that this object applies to"}>>> = activity_H2O
quantity<<<{"description": "Type of quantity to output. These are available for non-kinetic species: activity (which equals fugacity for gases); bulk moles (this will be zero if the species is not in the basis); neglog10a = -log10(activity); transported_moles_in_original_basis (will throw an error if species is not in original basis). These are available only for non-kinetic non-minerals: molal = mol(species)/kg(solvent_water); mg_per_kg = mg(species)/kg(solvent_water). These are available only for minerals: free_mg = free mg; free_cm3 = free cubic-centimeters; moles_dumped = moles dumped when special dump and flow-through modes are active. These are available for minerals that host sorbing sites: surface_charge (C/m^2); surface_potential (V). These are available for kinetic species: kinetic_moles; kinetic_additions (-dt * rate = mole increment in kinetic species for this timestep). If quantity=temperature, then the 'species' is ignored and the AuxVariable will record the aqueous solution temperature in degC"}>>> = activity
[]
[bulk_moles_H2O]
type = GeochemistryQuantityAux<<<{"description": "Extracts information from the Reactor and records it in the AuxVariable", "href": "../auxkernels/GeochemistryQuantityAux.html"}>>>
species<<<{"description": "Species name"}>>> = 'H2O'
reactor<<<{"description": "The name of the Geochemistry*Reactor user object."}>>> = reactor
variable<<<{"description": "The name of the variable that this object applies to"}>>> = bulk_moles_H2O
quantity<<<{"description": "Type of quantity to output. These are available for non-kinetic species: activity (which equals fugacity for gases); bulk moles (this will be zero if the species is not in the basis); neglog10a = -log10(activity); transported_moles_in_original_basis (will throw an error if species is not in original basis). These are available only for non-kinetic non-minerals: molal = mol(species)/kg(solvent_water); mg_per_kg = mg(species)/kg(solvent_water). These are available only for minerals: free_mg = free mg; free_cm3 = free cubic-centimeters; moles_dumped = moles dumped when special dump and flow-through modes are active. These are available for minerals that host sorbing sites: surface_charge (C/m^2); surface_potential (V). These are available for kinetic species: kinetic_moles; kinetic_additions (-dt * rate = mole increment in kinetic species for this timestep). If quantity=temperature, then the 'species' is ignored and the AuxVariable will record the aqueous solution temperature in degC"}>>> = bulk_moles
[]
[pH]
type = GeochemistryQuantityAux<<<{"description": "Extracts information from the Reactor and records it in the AuxVariable", "href": "../auxkernels/GeochemistryQuantityAux.html"}>>>
species<<<{"description": "Species name"}>>> = 'H+'
reactor<<<{"description": "The name of the Geochemistry*Reactor user object."}>>> = reactor
variable<<<{"description": "The name of the variable that this object applies to"}>>> = pH
quantity<<<{"description": "Type of quantity to output. These are available for non-kinetic species: activity (which equals fugacity for gases); bulk moles (this will be zero if the species is not in the basis); neglog10a = -log10(activity); transported_moles_in_original_basis (will throw an error if species is not in original basis). These are available only for non-kinetic non-minerals: molal = mol(species)/kg(solvent_water); mg_per_kg = mg(species)/kg(solvent_water). These are available only for minerals: free_mg = free mg; free_cm3 = free cubic-centimeters; moles_dumped = moles dumped when special dump and flow-through modes are active. These are available for minerals that host sorbing sites: surface_charge (C/m^2); surface_potential (V). These are available for kinetic species: kinetic_moles; kinetic_additions (-dt * rate = mole increment in kinetic species for this timestep). If quantity=temperature, then the 'species' is ignored and the AuxVariable will record the aqueous solution temperature in degC"}>>> = neglog10a
[]
[molal_H+]
type = GeochemistryQuantityAux<<<{"description": "Extracts information from the Reactor and records it in the AuxVariable", "href": "../auxkernels/GeochemistryQuantityAux.html"}>>>
species<<<{"description": "Species name"}>>> = 'H+'
reactor<<<{"description": "The name of the Geochemistry*Reactor user object."}>>> = reactor
variable<<<{"description": "The name of the variable that this object applies to"}>>> = 'molal_H+'
quantity<<<{"description": "Type of quantity to output. These are available for non-kinetic species: activity (which equals fugacity for gases); bulk moles (this will be zero if the species is not in the basis); neglog10a = -log10(activity); transported_moles_in_original_basis (will throw an error if species is not in original basis). These are available only for non-kinetic non-minerals: molal = mol(species)/kg(solvent_water); mg_per_kg = mg(species)/kg(solvent_water). These are available only for minerals: free_mg = free mg; free_cm3 = free cubic-centimeters; moles_dumped = moles dumped when special dump and flow-through modes are active. These are available for minerals that host sorbing sites: surface_charge (C/m^2); surface_potential (V). These are available for kinetic species: kinetic_moles; kinetic_additions (-dt * rate = mole increment in kinetic species for this timestep). If quantity=temperature, then the 'species' is ignored and the AuxVariable will record the aqueous solution temperature in degC"}>>> = molal
[]
[molal_Cl-]
type = GeochemistryQuantityAux<<<{"description": "Extracts information from the Reactor and records it in the AuxVariable", "href": "../auxkernels/GeochemistryQuantityAux.html"}>>>
species<<<{"description": "Species name"}>>> = 'Cl-'
reactor<<<{"description": "The name of the Geochemistry*Reactor user object."}>>> = reactor
variable<<<{"description": "The name of the variable that this object applies to"}>>> = 'molal_Cl-'
quantity<<<{"description": "Type of quantity to output. These are available for non-kinetic species: activity (which equals fugacity for gases); bulk moles (this will be zero if the species is not in the basis); neglog10a = -log10(activity); transported_moles_in_original_basis (will throw an error if species is not in original basis). These are available only for non-kinetic non-minerals: molal = mol(species)/kg(solvent_water); mg_per_kg = mg(species)/kg(solvent_water). These are available only for minerals: free_mg = free mg; free_cm3 = free cubic-centimeters; moles_dumped = moles dumped when special dump and flow-through modes are active. These are available for minerals that host sorbing sites: surface_charge (C/m^2); surface_potential (V). These are available for kinetic species: kinetic_moles; kinetic_additions (-dt * rate = mole increment in kinetic species for this timestep). If quantity=temperature, then the 'species' is ignored and the AuxVariable will record the aqueous solution temperature in degC"}>>> = molal
[]
[molal_HCl]
type = GeochemistryQuantityAux<<<{"description": "Extracts information from the Reactor and records it in the AuxVariable", "href": "../auxkernels/GeochemistryQuantityAux.html"}>>>
species<<<{"description": "Species name"}>>> = 'HCl'
reactor<<<{"description": "The name of the Geochemistry*Reactor user object."}>>> = reactor
variable<<<{"description": "The name of the variable that this object applies to"}>>> = 'molal_HCl'
quantity<<<{"description": "Type of quantity to output. These are available for non-kinetic species: activity (which equals fugacity for gases); bulk moles (this will be zero if the species is not in the basis); neglog10a = -log10(activity); transported_moles_in_original_basis (will throw an error if species is not in original basis). These are available only for non-kinetic non-minerals: molal = mol(species)/kg(solvent_water); mg_per_kg = mg(species)/kg(solvent_water). These are available only for minerals: free_mg = free mg; free_cm3 = free cubic-centimeters; moles_dumped = moles dumped when special dump and flow-through modes are active. These are available for minerals that host sorbing sites: surface_charge (C/m^2); surface_potential (V). These are available for kinetic species: kinetic_moles; kinetic_additions (-dt * rate = mole increment in kinetic species for this timestep). If quantity=temperature, then the 'species' is ignored and the AuxVariable will record the aqueous solution temperature in degC"}>>> = molal
[]
[molal_OH-]
type = GeochemistryQuantityAux<<<{"description": "Extracts information from the Reactor and records it in the AuxVariable", "href": "../auxkernels/GeochemistryQuantityAux.html"}>>>
species<<<{"description": "Species name"}>>> = 'OH-'
reactor<<<{"description": "The name of the Geochemistry*Reactor user object."}>>> = reactor
variable<<<{"description": "The name of the variable that this object applies to"}>>> = 'molal_OH-'
quantity<<<{"description": "Type of quantity to output. These are available for non-kinetic species: activity (which equals fugacity for gases); bulk moles (this will be zero if the species is not in the basis); neglog10a = -log10(activity); transported_moles_in_original_basis (will throw an error if species is not in original basis). These are available only for non-kinetic non-minerals: molal = mol(species)/kg(solvent_water); mg_per_kg = mg(species)/kg(solvent_water). These are available only for minerals: free_mg = free mg; free_cm3 = free cubic-centimeters; moles_dumped = moles dumped when special dump and flow-through modes are active. These are available for minerals that host sorbing sites: surface_charge (C/m^2); surface_potential (V). These are available for kinetic species: kinetic_moles; kinetic_additions (-dt * rate = mole increment in kinetic species for this timestep). If quantity=temperature, then the 'species' is ignored and the AuxVariable will record the aqueous solution temperature in degC"}>>> = molal
[]
[mg_per_kg_H+]
type = GeochemistryQuantityAux<<<{"description": "Extracts information from the Reactor and records it in the AuxVariable", "href": "../auxkernels/GeochemistryQuantityAux.html"}>>>
species<<<{"description": "Species name"}>>> = 'H+'
reactor<<<{"description": "The name of the Geochemistry*Reactor user object."}>>> = reactor
variable<<<{"description": "The name of the variable that this object applies to"}>>> = 'mg_per_kg_H+'
quantity<<<{"description": "Type of quantity to output. These are available for non-kinetic species: activity (which equals fugacity for gases); bulk moles (this will be zero if the species is not in the basis); neglog10a = -log10(activity); transported_moles_in_original_basis (will throw an error if species is not in original basis). These are available only for non-kinetic non-minerals: molal = mol(species)/kg(solvent_water); mg_per_kg = mg(species)/kg(solvent_water). These are available only for minerals: free_mg = free mg; free_cm3 = free cubic-centimeters; moles_dumped = moles dumped when special dump and flow-through modes are active. These are available for minerals that host sorbing sites: surface_charge (C/m^2); surface_potential (V). These are available for kinetic species: kinetic_moles; kinetic_additions (-dt * rate = mole increment in kinetic species for this timestep). If quantity=temperature, then the 'species' is ignored and the AuxVariable will record the aqueous solution temperature in degC"}>>> = mg_per_kg
[]
[mg_per_kg_Cl-]
type = GeochemistryQuantityAux<<<{"description": "Extracts information from the Reactor and records it in the AuxVariable", "href": "../auxkernels/GeochemistryQuantityAux.html"}>>>
species<<<{"description": "Species name"}>>> = 'Cl-'
reactor<<<{"description": "The name of the Geochemistry*Reactor user object."}>>> = reactor
variable<<<{"description": "The name of the variable that this object applies to"}>>> = 'mg_per_kg_Cl-'
quantity<<<{"description": "Type of quantity to output. These are available for non-kinetic species: activity (which equals fugacity for gases); bulk moles (this will be zero if the species is not in the basis); neglog10a = -log10(activity); transported_moles_in_original_basis (will throw an error if species is not in original basis). These are available only for non-kinetic non-minerals: molal = mol(species)/kg(solvent_water); mg_per_kg = mg(species)/kg(solvent_water). These are available only for minerals: free_mg = free mg; free_cm3 = free cubic-centimeters; moles_dumped = moles dumped when special dump and flow-through modes are active. These are available for minerals that host sorbing sites: surface_charge (C/m^2); surface_potential (V). These are available for kinetic species: kinetic_moles; kinetic_additions (-dt * rate = mole increment in kinetic species for this timestep). If quantity=temperature, then the 'species' is ignored and the AuxVariable will record the aqueous solution temperature in degC"}>>> = mg_per_kg
[]
[mg_per_kg_HCl]
type = GeochemistryQuantityAux<<<{"description": "Extracts information from the Reactor and records it in the AuxVariable", "href": "../auxkernels/GeochemistryQuantityAux.html"}>>>
species<<<{"description": "Species name"}>>> = 'HCl'
reactor<<<{"description": "The name of the Geochemistry*Reactor user object."}>>> = reactor
variable<<<{"description": "The name of the variable that this object applies to"}>>> = 'mg_per_kg_HCl'
quantity<<<{"description": "Type of quantity to output. These are available for non-kinetic species: activity (which equals fugacity for gases); bulk moles (this will be zero if the species is not in the basis); neglog10a = -log10(activity); transported_moles_in_original_basis (will throw an error if species is not in original basis). These are available only for non-kinetic non-minerals: molal = mol(species)/kg(solvent_water); mg_per_kg = mg(species)/kg(solvent_water). These are available only for minerals: free_mg = free mg; free_cm3 = free cubic-centimeters; moles_dumped = moles dumped when special dump and flow-through modes are active. These are available for minerals that host sorbing sites: surface_charge (C/m^2); surface_potential (V). These are available for kinetic species: kinetic_moles; kinetic_additions (-dt * rate = mole increment in kinetic species for this timestep). If quantity=temperature, then the 'species' is ignored and the AuxVariable will record the aqueous solution temperature in degC"}>>> = mg_per_kg
[]
[mg_per_kg_OH-]
type = GeochemistryQuantityAux<<<{"description": "Extracts information from the Reactor and records it in the AuxVariable", "href": "../auxkernels/GeochemistryQuantityAux.html"}>>>
species<<<{"description": "Species name"}>>> = 'OH-'
reactor<<<{"description": "The name of the Geochemistry*Reactor user object."}>>> = reactor
variable<<<{"description": "The name of the variable that this object applies to"}>>> = 'mg_per_kg_OH-'
quantity<<<{"description": "Type of quantity to output. These are available for non-kinetic species: activity (which equals fugacity for gases); bulk moles (this will be zero if the species is not in the basis); neglog10a = -log10(activity); transported_moles_in_original_basis (will throw an error if species is not in original basis). These are available only for non-kinetic non-minerals: molal = mol(species)/kg(solvent_water); mg_per_kg = mg(species)/kg(solvent_water). These are available only for minerals: free_mg = free mg; free_cm3 = free cubic-centimeters; moles_dumped = moles dumped when special dump and flow-through modes are active. These are available for minerals that host sorbing sites: surface_charge (C/m^2); surface_potential (V). These are available for kinetic species: kinetic_moles; kinetic_additions (-dt * rate = mole increment in kinetic species for this timestep). If quantity=temperature, then the 'species' is ignored and the AuxVariable will record the aqueous solution temperature in degC"}>>> = mg_per_kg
[]
[activity_H+]
type = GeochemistryQuantityAux<<<{"description": "Extracts information from the Reactor and records it in the AuxVariable", "href": "../auxkernels/GeochemistryQuantityAux.html"}>>>
species<<<{"description": "Species name"}>>> = 'H+'
reactor<<<{"description": "The name of the Geochemistry*Reactor user object."}>>> = reactor
variable<<<{"description": "The name of the variable that this object applies to"}>>> = 'activity_H+'
quantity<<<{"description": "Type of quantity to output. These are available for non-kinetic species: activity (which equals fugacity for gases); bulk moles (this will be zero if the species is not in the basis); neglog10a = -log10(activity); transported_moles_in_original_basis (will throw an error if species is not in original basis). These are available only for non-kinetic non-minerals: molal = mol(species)/kg(solvent_water); mg_per_kg = mg(species)/kg(solvent_water). These are available only for minerals: free_mg = free mg; free_cm3 = free cubic-centimeters; moles_dumped = moles dumped when special dump and flow-through modes are active. These are available for minerals that host sorbing sites: surface_charge (C/m^2); surface_potential (V). These are available for kinetic species: kinetic_moles; kinetic_additions (-dt * rate = mole increment in kinetic species for this timestep). If quantity=temperature, then the 'species' is ignored and the AuxVariable will record the aqueous solution temperature in degC"}>>> = activity
[]
[activity_Cl-]
type = GeochemistryQuantityAux<<<{"description": "Extracts information from the Reactor and records it in the AuxVariable", "href": "../auxkernels/GeochemistryQuantityAux.html"}>>>
species<<<{"description": "Species name"}>>> = 'Cl-'
reactor<<<{"description": "The name of the Geochemistry*Reactor user object."}>>> = reactor
variable<<<{"description": "The name of the variable that this object applies to"}>>> = 'activity_Cl-'
quantity<<<{"description": "Type of quantity to output. These are available for non-kinetic species: activity (which equals fugacity for gases); bulk moles (this will be zero if the species is not in the basis); neglog10a = -log10(activity); transported_moles_in_original_basis (will throw an error if species is not in original basis). These are available only for non-kinetic non-minerals: molal = mol(species)/kg(solvent_water); mg_per_kg = mg(species)/kg(solvent_water). These are available only for minerals: free_mg = free mg; free_cm3 = free cubic-centimeters; moles_dumped = moles dumped when special dump and flow-through modes are active. These are available for minerals that host sorbing sites: surface_charge (C/m^2); surface_potential (V). These are available for kinetic species: kinetic_moles; kinetic_additions (-dt * rate = mole increment in kinetic species for this timestep). If quantity=temperature, then the 'species' is ignored and the AuxVariable will record the aqueous solution temperature in degC"}>>> = activity
[]
[activity_HCl]
type = GeochemistryQuantityAux<<<{"description": "Extracts information from the Reactor and records it in the AuxVariable", "href": "../auxkernels/GeochemistryQuantityAux.html"}>>>
species<<<{"description": "Species name"}>>> = 'HCl'
reactor<<<{"description": "The name of the Geochemistry*Reactor user object."}>>> = reactor
variable<<<{"description": "The name of the variable that this object applies to"}>>> = 'activity_HCl'
quantity<<<{"description": "Type of quantity to output. These are available for non-kinetic species: activity (which equals fugacity for gases); bulk moles (this will be zero if the species is not in the basis); neglog10a = -log10(activity); transported_moles_in_original_basis (will throw an error if species is not in original basis). These are available only for non-kinetic non-minerals: molal = mol(species)/kg(solvent_water); mg_per_kg = mg(species)/kg(solvent_water). These are available only for minerals: free_mg = free mg; free_cm3 = free cubic-centimeters; moles_dumped = moles dumped when special dump and flow-through modes are active. These are available for minerals that host sorbing sites: surface_charge (C/m^2); surface_potential (V). These are available for kinetic species: kinetic_moles; kinetic_additions (-dt * rate = mole increment in kinetic species for this timestep). If quantity=temperature, then the 'species' is ignored and the AuxVariable will record the aqueous solution temperature in degC"}>>> = activity
[]
[activity_OH-]
type = GeochemistryQuantityAux<<<{"description": "Extracts information from the Reactor and records it in the AuxVariable", "href": "../auxkernels/GeochemistryQuantityAux.html"}>>>
species<<<{"description": "Species name"}>>> = 'OH-'
reactor<<<{"description": "The name of the Geochemistry*Reactor user object."}>>> = reactor
variable<<<{"description": "The name of the variable that this object applies to"}>>> = 'activity_OH-'
quantity<<<{"description": "Type of quantity to output. These are available for non-kinetic species: activity (which equals fugacity for gases); bulk moles (this will be zero if the species is not in the basis); neglog10a = -log10(activity); transported_moles_in_original_basis (will throw an error if species is not in original basis). These are available only for non-kinetic non-minerals: molal = mol(species)/kg(solvent_water); mg_per_kg = mg(species)/kg(solvent_water). These are available only for minerals: free_mg = free mg; free_cm3 = free cubic-centimeters; moles_dumped = moles dumped when special dump and flow-through modes are active. These are available for minerals that host sorbing sites: surface_charge (C/m^2); surface_potential (V). These are available for kinetic species: kinetic_moles; kinetic_additions (-dt * rate = mole increment in kinetic species for this timestep). If quantity=temperature, then the 'species' is ignored and the AuxVariable will record the aqueous solution temperature in degC"}>>> = activity
[]
[bulk_moles_H+]
type = GeochemistryQuantityAux<<<{"description": "Extracts information from the Reactor and records it in the AuxVariable", "href": "../auxkernels/GeochemistryQuantityAux.html"}>>>
species<<<{"description": "Species name"}>>> = 'H+'
reactor<<<{"description": "The name of the Geochemistry*Reactor user object."}>>> = reactor
variable<<<{"description": "The name of the variable that this object applies to"}>>> = 'bulk_moles_H+'
quantity<<<{"description": "Type of quantity to output. These are available for non-kinetic species: activity (which equals fugacity for gases); bulk moles (this will be zero if the species is not in the basis); neglog10a = -log10(activity); transported_moles_in_original_basis (will throw an error if species is not in original basis). These are available only for non-kinetic non-minerals: molal = mol(species)/kg(solvent_water); mg_per_kg = mg(species)/kg(solvent_water). These are available only for minerals: free_mg = free mg; free_cm3 = free cubic-centimeters; moles_dumped = moles dumped when special dump and flow-through modes are active. These are available for minerals that host sorbing sites: surface_charge (C/m^2); surface_potential (V). These are available for kinetic species: kinetic_moles; kinetic_additions (-dt * rate = mole increment in kinetic species for this timestep). If quantity=temperature, then the 'species' is ignored and the AuxVariable will record the aqueous solution temperature in degC"}>>> = bulk_moles
[]
[bulk_moles_Cl-]
type = GeochemistryQuantityAux<<<{"description": "Extracts information from the Reactor and records it in the AuxVariable", "href": "../auxkernels/GeochemistryQuantityAux.html"}>>>
species<<<{"description": "Species name"}>>> = 'Cl-'
reactor<<<{"description": "The name of the Geochemistry*Reactor user object."}>>> = reactor
variable<<<{"description": "The name of the variable that this object applies to"}>>> = 'bulk_moles_Cl-'
quantity<<<{"description": "Type of quantity to output. These are available for non-kinetic species: activity (which equals fugacity for gases); bulk moles (this will be zero if the species is not in the basis); neglog10a = -log10(activity); transported_moles_in_original_basis (will throw an error if species is not in original basis). These are available only for non-kinetic non-minerals: molal = mol(species)/kg(solvent_water); mg_per_kg = mg(species)/kg(solvent_water). These are available only for minerals: free_mg = free mg; free_cm3 = free cubic-centimeters; moles_dumped = moles dumped when special dump and flow-through modes are active. These are available for minerals that host sorbing sites: surface_charge (C/m^2); surface_potential (V). These are available for kinetic species: kinetic_moles; kinetic_additions (-dt * rate = mole increment in kinetic species for this timestep). If quantity=temperature, then the 'species' is ignored and the AuxVariable will record the aqueous solution temperature in degC"}>>> = bulk_moles
[]
[bulk_moles_HCl]
type = GeochemistryQuantityAux<<<{"description": "Extracts information from the Reactor and records it in the AuxVariable", "href": "../auxkernels/GeochemistryQuantityAux.html"}>>>
species<<<{"description": "Species name"}>>> = 'HCl'
reactor<<<{"description": "The name of the Geochemistry*Reactor user object."}>>> = reactor
variable<<<{"description": "The name of the variable that this object applies to"}>>> = 'bulk_moles_HCl'
quantity<<<{"description": "Type of quantity to output. These are available for non-kinetic species: activity (which equals fugacity for gases); bulk moles (this will be zero if the species is not in the basis); neglog10a = -log10(activity); transported_moles_in_original_basis (will throw an error if species is not in original basis). These are available only for non-kinetic non-minerals: molal = mol(species)/kg(solvent_water); mg_per_kg = mg(species)/kg(solvent_water). These are available only for minerals: free_mg = free mg; free_cm3 = free cubic-centimeters; moles_dumped = moles dumped when special dump and flow-through modes are active. These are available for minerals that host sorbing sites: surface_charge (C/m^2); surface_potential (V). These are available for kinetic species: kinetic_moles; kinetic_additions (-dt * rate = mole increment in kinetic species for this timestep). If quantity=temperature, then the 'species' is ignored and the AuxVariable will record the aqueous solution temperature in degC"}>>> = bulk_moles
[]
[bulk_moles_OH-]
type = GeochemistryQuantityAux<<<{"description": "Extracts information from the Reactor and records it in the AuxVariable", "href": "../auxkernels/GeochemistryQuantityAux.html"}>>>
species<<<{"description": "Species name"}>>> = 'OH-'
reactor<<<{"description": "The name of the Geochemistry*Reactor user object."}>>> = reactor
variable<<<{"description": "The name of the variable that this object applies to"}>>> = 'bulk_moles_OH-'
quantity<<<{"description": "Type of quantity to output. These are available for non-kinetic species: activity (which equals fugacity for gases); bulk moles (this will be zero if the species is not in the basis); neglog10a = -log10(activity); transported_moles_in_original_basis (will throw an error if species is not in original basis). These are available only for non-kinetic non-minerals: molal = mol(species)/kg(solvent_water); mg_per_kg = mg(species)/kg(solvent_water). These are available only for minerals: free_mg = free mg; free_cm3 = free cubic-centimeters; moles_dumped = moles dumped when special dump and flow-through modes are active. These are available for minerals that host sorbing sites: surface_charge (C/m^2); surface_potential (V). These are available for kinetic species: kinetic_moles; kinetic_additions (-dt * rate = mole increment in kinetic species for this timestep). If quantity=temperature, then the 'species' is ignored and the AuxVariable will record the aqueous solution temperature in degC"}>>> = bulk_moles
[]
[]
[Postprocessors<<<{"href": "../../syntax/Postprocessors/index.html"}>>>]
[pH]
type = PointValue<<<{"description": "Compute the value of a variable at a specified location", "href": "../postprocessors/PointValue.html"}>>>
variable<<<{"description": "The name of the variable that this postprocessor operates on."}>>> = 'pH'
[]
[solvent_mass]
type = PointValue<<<{"description": "Compute the value of a variable at a specified location", "href": "../postprocessors/PointValue.html"}>>>
variable<<<{"description": "The name of the variable that this postprocessor operates on."}>>> = 'kg_solvent_H2O'
[]
[molal_Cl-]
type = PointValue<<<{"description": "Compute the value of a variable at a specified location", "href": "../postprocessors/PointValue.html"}>>>
variable<<<{"description": "The name of the variable that this postprocessor operates on."}>>> = 'molal_Cl-'
[]
[mg_per_kg_HCl]
type = PointValue<<<{"description": "Compute the value of a variable at a specified location", "href": "../postprocessors/PointValue.html"}>>>
variable<<<{"description": "The name of the variable that this postprocessor operates on."}>>> = 'mg_per_kg_HCl'
[]
[activity_OH-]
type = PointValue<<<{"description": "Compute the value of a variable at a specified location", "href": "../postprocessors/PointValue.html"}>>>
variable<<<{"description": "The name of the variable that this postprocessor operates on."}>>> = 'activity_OH-'
[]
[bulk_H+]
type = PointValue<<<{"description": "Compute the value of a variable at a specified location", "href": "../postprocessors/PointValue.html"}>>>
variable<<<{"description": "The name of the variable that this postprocessor operates on."}>>> = 'bulk_moles_H+'
[]
[temperature]
type = PointValue<<<{"description": "Compute the value of a variable at a specified location", "href": "../postprocessors/PointValue.html"}>>>
variable<<<{"description": "The name of the variable that this postprocessor operates on."}>>> = 'solution_temperature'
[]
[]
[Executioner<<<{"href": "../../syntax/Executioner/index.html"}>>>]
type = Transient
dt = 1
end_time = 10
[]
[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": "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-"
[]
[reactor]
type = GeochemistryTimeDependentReactor<<<{"description": "UserObject that controls the time-dependent geochemistry reaction processes. Spatial dependence is not possible using this class", "href": "GeochemistryTimeDependentReactor.html"}>>>
model_definition<<<{"description": "The name of the GeochemicalModelDefinition user object."}>>> = 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-"
constraint_value<<<{"description": "Numerical value of the containts on constraint_species"}>>> = " 1.0 -2 1E-2"
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"
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"
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 # max_ionic_strength in such a simple problem does not need ramping
# close the system at time = 0
close_system_at_time<<<{"description": "Time at which to 'close' the system, that is, change a kg_solvent_water constraint to moles_bulk_water, and all free_molality and free_moles_mineral_species to moles_bulk_species"}>>> = 0
# control pH. This sets pH = 2 + t (see the act_H+ AuxKernel)
controlled_activity_name<<<{"description": "The names of the species that have their activity or fugacity constrained. There should be an equal number of these names as values given in controlled_activity_value. NOTE: if these species are not in the basis, or they do not have an activity (or fugacity) constraint then their activity cannot be controlled: in this case MOOSE will ignore the value you prescribe in controlled_activity_value."}>>> = 'H+'
controlled_activity_value<<<{"description": "Values of the activity or fugacity of the species in controlled_activity_name list. These should always be positive"}>>> = 'act_H+'
# remove the constraint on H+ activity at time = 5, when, from the previous time-step, pH = 2 + 4 = 6
remove_fixed_activity_name<<<{"description": "The name of the species that should have their activity or fugacity constraint removed at time given in remove_fixed_activity_time. There should be an equal number of these names as times given in remove_fixed_activity_time. Each of these must be in the basis and have an activity or fugacity constraint"}>>> = 'H+'
remove_fixed_activity_time<<<{"description": "The times at which the species in remove_fixed_activity_name should have their activity or fugacity constraint removed."}>>> = 5
# add 1E-5 moles of HCl every second of the simulation: this has no impact before time = 5 when the fixed-activity constraint it turned off, but then, molality_H+ ~ 1E-6 + 1E-4 * (t - 4), so
# time, approx_pH
# 5, -log10(1E-4) = 4
# 10, -log10(6E-4) = 3.2
source_species_names<<<{"description": "The name of the species that are added at rates given in source_species_rates. There must be an equal number of these as source_species_rates."}>>> = 'HCl'
source_species_rates<<<{"description": "Rates, in mols/time_unit, of addition of the species with names given in source_species_names. A negative value corresponds to removing a species: be careful that you don't cause negative mass problems!"}>>> = '1E-4'
[]
[nnn]
type = NearestNodeNumberUO<<<{"description": "Finds and outputs the nearest node number to a point", "href": "NearestNodeNumberUO.html"}>>>
[]
[]
[Outputs<<<{"href": "../../syntax/Outputs/index.html"}>>>]
csv<<<{"description": "Output the scalar variable and postprocessors to a *.csv file using the default CSV output."}>>> = true
file_base<<<{"description": "Common file base name to be utilized with all output objects"}>>> = simple_out
[console_output]
type = GeochemistryConsoleOutput<<<{"description": "Outputs results from a GeochemistryReactor at a particular point", "href": "../outputs/GeochemistryConsoleOutput.html"}>>>
geochemistry_reactor<<<{"description": "The name of the GeochemistryReactor UserObject"}>>> = reactor
nearest_node_number_UO<<<{"description": "The NearestNodeNumber UserObject that defines the physical point at which to query the GeochemistryReactor"}>>> = nnn
solver_info<<<{"description": "Print information (to the console) from the solver including residuals, swaps, etc"}>>> = true
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'final'
[]
[]
(modules/geochemistry/test/tests/time_dependent_reactions/simple_no_action.i)Input Parameters
- abs_tol1e-10If 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
Default:1e-10
C++ Type:double
Unit:(no unit assumed)
Controllable:No
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
- blockThe list of blocks (ids or names) that this object will be applied
C++ Type:std::vector<SubdomainName>
Controllable:No
Description:The list of blocks (ids or names) that this object will be applied
- boundaryThe list of boundaries (ids or names) from the mesh where this object applies
C++ Type:std::vector<BoundaryName>
Controllable:No
Description:The list of boundaries (ids or names) from the mesh where this object applies
- close_system_at_time0Time at which to 'close' the system, that is, change a kg_solvent_water constraint to moles_bulk_water, and all free_molality and free_moles_mineral_species to moles_bulk_species
Default:0
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Time at which to 'close' the system, that is, change a kg_solvent_water constraint to moles_bulk_water, and all free_molality and free_moles_mineral_species to moles_bulk_species
- cold_temperature25.0This is only used if mode=4, where it is the cold temperature of the heat exchanger.
Default:25.0
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:This is only used if mode=4, where it is the cold temperature of the heat exchanger.
- controlled_activity_nameThe names of the species that have their activity or fugacity constrained. There should be an equal number of these names as values given in controlled_activity_value. NOTE: if these species are not in the basis, or they do not have an activity (or fugacity) constraint then their activity cannot be controlled: in this case MOOSE will ignore the value you prescribe in controlled_activity_value.
C++ Type:std::vector<std::string>
Controllable:No
Description:The names of the species that have their activity or fugacity constrained. There should be an equal number of these names as values given in controlled_activity_value. NOTE: if these species are not in the basis, or they do not have an activity (or fugacity) constraint then their activity cannot be controlled: in this case MOOSE will ignore the value you prescribe in controlled_activity_value.
- controlled_activity_valueValues of the activity or fugacity of the species in controlled_activity_name list. These should always be positive
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:Values of the activity or fugacity of the species in controlled_activity_name list. These should always be positive
- evaluate_kinetic_rates_alwaysTrueIf true, then, evaluate the kinetic rates at every Newton step during the solve using the current values of molality, activity, etc (ie, implement an implicit solve). If false, then evaluate the kinetic rates using the values of molality, activity, etc, at the start of the current time step (ie, implement an explicit solve)
Default:True
C++ Type:bool
Controllable:No
Description:If true, then, evaluate the kinetic rates at every Newton step during the solve using the current values of molality, activity, etc (ie, implement an implicit solve). If false, then evaluate the kinetic rates using the values of molality, activity, etc, at the start of the current time step (ie, implement an explicit solve)
- extra_iterations_to_make_consistent0Extra iterations to make the molalities, activities, etc, consistent before commencing the Newton process to find the aqueous configuration
Default:0
C++ Type:unsigned int
Controllable:No
Description:Extra iterations to make the molalities, activities, etc, consistent before commencing the Newton process to find the aqueous configuration
- heating_increments1This is only used if mode=4. Internal to this object, the temperature is ramped from cold_temperature to temperature in heating_increments increments. This helps difficult problems converge
Default:1
C++ Type:unsigned int
Controllable:No
Description:This is only used if mode=4. Internal to this object, the temperature is ramped from cold_temperature to temperature in heating_increments increments. This helps difficult problems converge
- initial_temperature25The initial aqueous solution is equilibrated at this system before adding reactants, changing temperature, etc.
Default:25
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:The initial aqueous solution is equilibrated at this system before adding reactants, changing temperature, etc.
- ionic_str_using_basis_onlyFalseIf set to true, ionic strength and stoichiometric ionic strength will be computed using only the basis molalities, ignoring molalities of equilibrium species. Since basis molality is usually greater than equilibrium molality, and the whole Debye-Huckel concept of activity coefficients depending on ionic strength is only approximate in practice, setting this parameter true often results in a reasonable approximation. It can aid in convergence since it eliminates problems associated with unphysical huge equilibrium molalities that can occur during Newton iteration to the solution
Default:False
C++ Type:bool
Controllable:No
Description:If set to true, ionic strength and stoichiometric ionic strength will be computed using only the basis molalities, ignoring molalities of equilibrium species. Since basis molality is usually greater than equilibrium molality, and the whole Debye-Huckel concept of activity coefficients depending on ionic strength is only approximate in practice, setting this parameter true often results in a reasonable approximation. It can aid in convergence since it eliminates problems associated with unphysical huge equilibrium molalities that can occur during Newton iteration to the solution
- kinetic_species_initial_valueInitial number of moles, mass or volume (depending on kinetic_species_unit) for each of the species named in kinetic_species_name
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:Initial number of moles, mass or volume (depending on kinetic_species_unit) for each of the species named in kinetic_species_name
- kinetic_species_nameNames of the kinetic species given initial values in kinetic_species_initial_value
C++ Type:std::vector<std::string>
Controllable:No
Description:Names of the kinetic species given initial values in kinetic_species_initial_value
- kinetic_species_unitUnits of the numerical values given in kinetic_species_initial_value. Moles: mole number. kg: kilograms. g: grams. mg: milligrams. ug: micrograms. cm3: cubic centimeters
C++ Type:MultiMooseEnum
Controllable:No
Description:Units of the numerical values given in kinetic_species_initial_value. Moles: mole number. kg: kilograms. g: grams. mg: milligrams. ug: micrograms. cm3: cubic centimeters
- max_initial_residual1000Attempt to alter the initial-guess molalities so that the initial residual for the Newton process (that finds the aqueous configuration) is less than this number of moles
Default:1000
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Attempt to alter the initial-guess molalities so that the initial residual for the Newton process (that finds the aqueous configuration) is less than this number of moles
- max_ionic_strength3Maximum value of ionic strength
Default:3
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Maximum value of ionic strength
- max_iter100Maximum number of Newton iterations allowed when finding the aqueous configuration
Default:100
C++ Type:unsigned int
Controllable:No
Description:Maximum number of Newton iterations allowed when finding the aqueous configuration
- max_swaps_allowed20Maximum number of swaps allowed during a single attempt at finding the aqueous configuration. Usually only a handful of swaps are used: this parameter prevents endless cyclic swapping that prevents the algorithm from progressing
Default:20
C++ Type:unsigned int
Controllable:No
Description:Maximum number of swaps allowed during a single attempt at finding the aqueous configuration. Usually only a handful of swaps are used: this parameter prevents endless cyclic swapping that prevents the algorithm from progressing
- min_initial_molality1e-20Minimum value of the initial-guess molality used in the Newton process to find the aqueous configuration
Default:1e-20
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Minimum value of the initial-guess molality used in the Newton process to find the aqueous configuration
- modeThis may vary temporally. If mode=1 then 'dump' mode is used, which means all non-kinetic mineral masses are removed from the system before the equilibrium solution is sought (ie, removal occurs at the beginning of the time step). If mode=2 then 'flow-through' mode is used, which means all mineral masses are removed from the system after it the equilbrium solution has been found (ie, at the end of a time step). If mode=3 then 'flush' mode is used, then before the equilibrium solution is sought (ie, at the start of a time step) water+species is removed from the system at the same rate as pure water + non-mineral solutes are entering the system (specified in source_species_rates). If mode=4 then 'heat-exchanger' mode is used, which means the entire current aqueous solution is removed, then the source_species are added, then the temperature is set to 'cold_temperature', the system is solved and any precipitated minerals are removed, then the temperature is set to 'temperature', the system re-solved and any precipitated minerals are removed. If mode is any other number, no special mode is active (the system simply responds to the source_species_rates, controlled_activity_value, etc).
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:This may vary temporally. If mode=1 then 'dump' mode is used, which means all non-kinetic mineral masses are removed from the system before the equilibrium solution is sought (ie, removal occurs at the beginning of the time step). If mode=2 then 'flow-through' mode is used, which means all mineral masses are removed from the system after it the equilbrium solution has been found (ie, at the end of a time step). If mode=3 then 'flush' mode is used, then before the equilibrium solution is sought (ie, at the start of a time step) water+species is removed from the system at the same rate as pure water + non-mineral solutes are entering the system (specified in source_species_rates). If mode=4 then 'heat-exchanger' mode is used, which means the entire current aqueous solution is removed, then the source_species are added, then the temperature is set to 'cold_temperature', the system is solved and any precipitated minerals are removed, then the temperature is set to 'temperature', the system re-solved and any precipitated minerals are removed. If mode is any other number, no special mode is active (the system simply responds to the source_species_rates, controlled_activity_value, etc).
- prevent_precipitationMineral species in this list will be prevented from precipitating, irrespective of their saturation index (unless they are initially in the basis)
C++ Type:std::vector<std::string>
Controllable:No
Description:Mineral species in this list will be prevented from precipitating, irrespective of their saturation index (unless they are initially in the basis)
- ramp_max_ionic_strength_initial20The 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.
Default:20
C++ Type:unsigned int
Controllable:No
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.
- ramp_max_ionic_strength_subsequent0The number of iterations over which to progressively increase the maximum ionic strength (from zero to max_ionic_strength) during time-stepping. Unless a great deal occurs in each time step, this parameter can be set quite small
Default:0
C++ Type:unsigned int
Controllable:No
Description:The number of iterations over which to progressively increase the maximum ionic strength (from zero to max_ionic_strength) during time-stepping. Unless a great deal occurs in each time step, this parameter can be set quite small
- rel_tol1e-200If the residual of the algebraic system (measured in mol) is lower than this value times the initial residual, the Newton process (that finds the aqueous configuration) is deemed to have converged
Default:1e-200
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:If the residual of the algebraic system (measured in mol) is lower than this value times the initial residual, the Newton process (that finds the aqueous configuration) is deemed to have converged
- remove_fixed_activity_nameThe name of the species that should have their activity or fugacity constraint removed at time given in remove_fixed_activity_time. There should be an equal number of these names as times given in remove_fixed_activity_time. Each of these must be in the basis and have an activity or fugacity constraint
C++ Type:std::vector<std::string>
Controllable:No
Description:The name of the species that should have their activity or fugacity constraint removed at time given in remove_fixed_activity_time. There should be an equal number of these names as times given in remove_fixed_activity_time. Each of these must be in the basis and have an activity or fugacity constraint
- remove_fixed_activity_timeThe times at which the species in remove_fixed_activity_name should have their activity or fugacity constraint removed.
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:The times at which the species in remove_fixed_activity_name should have their activity or fugacity constraint removed.
- source_species_namesThe name of the species that are added at rates given in source_species_rates. There must be an equal number of these as source_species_rates.
C++ Type:std::vector<std::string>
Controllable:No
Description:The name of the species that are added at rates given in source_species_rates. There must be an equal number of these as source_species_rates.
- source_species_ratesRates, in mols/time_unit, of addition of the species with names given in source_species_names. A negative value corresponds to removing a species: be careful that you don't cause negative mass problems!
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:Rates, in mols/time_unit, of addition of the species with names given in source_species_names. A negative value corresponds to removing a species: be careful that you don't cause negative mass problems!
- stoichiometric_ionic_str_using_Cl_onlyFalseIf 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
Default:False
C++ Type:bool
Controllable:No
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
- stoichiometry_tolerance1e-06Swapping involves inverting matrices via a singular value decomposition. During this process: (1) if abs(singular value) < stoi_tol * L1norm(singular values), then the matrix is deemed singular (so the basis swap is deemed invalid); (2) if abs(any stoichiometric coefficient) < stoi_tol then it is set to zero.
Default:1e-06
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Swapping involves inverting matrices via a singular value decomposition. During this process: (1) if abs(singular value) < stoi_tol * L1norm(singular values), then the matrix is deemed singular (so the basis swap is deemed invalid); (2) if abs(any stoichiometric coefficient) < stoi_tol then it is set to zero.
- swap_into_basisSpecies that should be removed from the model_definition's equilibrium species list and added to the basis. There must be the same number of species in swap_out_of_basis and swap_into_basis. These swaps are performed before any other computations during the initial problem setup. 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
C++ Type:std::vector<std::string>
Controllable:No
Description:Species that should be removed from the model_definition's equilibrium species list and added to the basis. There must be the same number of species in swap_out_of_basis and swap_into_basis. These swaps are performed before any other computations during the initial problem setup. 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
- swap_out_of_basisSpecies that should be removed from the model_definition's basis and be replaced with the swap_into_basis species
C++ Type:std::vector<std::string>
Controllable:No
Description:Species that should be removed from the model_definition's basis and be replaced with the swap_into_basis species
- swap_threshold0.1If the molality of a basis species in the algebraic system falls below swap_threshold * abs_tol then it is swapped out of the basis. The dimensions of swap_threshold are 1/kg(solvent water)
Default:0.1
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:If the molality of a basis species in the algebraic system falls below swap_threshold * abs_tol then it is swapped out of the basis. The dimensions of swap_threshold are 1/kg(solvent water)
- temperature25.0Temperature. This has two different meanings if mode!=4. (1) If no species are being added to the solution (no source_species_rates are positive) then this is the temperature of the aqueous solution. (2) If species are being added, this is the temperature of the species being added. In case (2), the final aqueous-solution temperature is computed assuming the species are added, temperature is equilibrated and then, if species are also being removed, they are removed. If you wish to add species and simultaneously alter the temperature, you will have to use a sequence of heat-add-heat-add, etc steps. In the case that mode=4, temperature is the final temperature of the aqueous solution
Default:25.0
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:Temperature. This has two different meanings if mode!=4. (1) If no species are being added to the solution (no source_species_rates are positive) then this is the temperature of the aqueous solution. (2) If species are being added, this is the temperature of the species being added. In case (2), the final aqueous-solution temperature is computed assuming the species are added, temperature is equilibrated and then, if species are also being removed, they are removed. If you wish to add species and simultaneously alter the temperature, you will have to use a sequence of heat-add-heat-add, etc steps. In the case that mode=4, temperature is the final temperature of the aqueous solution
- unique_node_executeFalseWhen false (default), block restricted objects will have the execute method called multiple times on a single node if the node lies on a interface between two subdomains.
Default:False
C++ Type:bool
Controllable:No
Description:When false (default), block restricted objects will have the execute method called multiple times on a single node if the node lies on a interface between two subdomains.
Optional Parameters
- allow_duplicate_execution_on_initialFalseIn the case where this UserObject is depended upon by an initial condition, allow it to be executed twice during the initial setup (once before the IC and again after mesh adaptivity (if applicable).
Default:False
C++ Type:bool
Controllable:No
Description:In the case where this UserObject is depended upon by an initial condition, allow it to be executed twice during the initial setup (once before the IC and again after mesh adaptivity (if applicable).
- execute_onTIMESTEP_ENDThe list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html.
Default:TIMESTEP_END
C++ Type:ExecFlagEnum
Controllable:No
Description:The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html.
- execution_order_group0Execution order groups are executed in increasing order (e.g., the lowest number is executed first). Note that negative group numbers may be used to execute groups before the default (0) group. Please refer to the user object documentation for ordering of user object execution within a group.
Default:0
C++ Type:int
Controllable:No
Description:Execution order groups are executed in increasing order (e.g., the lowest number is executed first). Note that negative group numbers may be used to execute groups before the default (0) group. Please refer to the user object documentation for ordering of user object execution within a group.
- force_postauxFalseForces the UserObject to be executed in POSTAUX
Default:False
C++ Type:bool
Controllable:No
Description:Forces the UserObject to be executed in POSTAUX
- force_preauxFalseForces the UserObject to be executed in PREAUX
Default:False
C++ Type:bool
Controllable:No
Description:Forces the UserObject to be executed in PREAUX
- force_preicFalseForces the UserObject to be executed in PREIC during initial setup
Default:False
C++ Type:bool
Controllable:No
Description:Forces the UserObject to be executed in PREIC during initial setup
Execution Scheduling Parameters
- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector<std::string>
Controllable:No
Description:Adds user-defined labels for accessing object parameters via control logic.
- enableTrueSet the enabled status of the MooseObject.
Default:True
C++ Type:bool
Controllable:Yes
Description:Set the enabled status of the MooseObject.
- seed0The seed for the master random number generator
Default:0
C++ Type:unsigned int
Controllable:No
Description:The seed for the master random number generator
- use_displaced_meshFalseWhether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Default:False
C++ Type:bool
Controllable:No
Description:Whether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.