- block_idSubdomain id to set for inside of the combinatorial
C++ Type:unsigned short
Description:Subdomain id to set for inside of the combinatorial
 - combinatorial_geometryFunction expression encoding a combinatorial geometry
C++ Type:std::string
Description:Function expression encoding a combinatorial geometry
 - inputThe mesh we want to modify
C++ Type:MeshGeneratorName
Description:The mesh we want to modify
 
ParsedSubdomainMeshGenerator
Uses a parsed expression (combinatorial_geometry) to determine if an element (via its centroid) is inside the region defined by the expression and assigns a new block ID.
Example
The desired example mesh is a 1-by-1 2D square which contains Block 1 (a centered 0.8-by-0.8 square) and Block 2 (a 0.4-by-0.4 square located in the bottom left quarter of Block 1). The remaining edge of the square can be Block 0.
The combinatorial expression that defines Block 1 is below.
x > 0.1 & x < 0.9 & y > 0.1 & y < 0.9
The expression
x < 0.5 & y < 0.5
can partially define Block 2, but the region outside Block 1 also needs to be excluded. The input file syntax needed to generate this example is shown below.
[Mesh]
  [./gmg]
    type = GeneratedMeshGenerator
    dim = 2
    nx = 10
    ny = 10
    xmax = 1
    ymax = 1
    uniform_refine = 2
  []
  [./subdomains]
    type = ParsedSubdomainMeshGenerator
    input = gmg
    combinatorial_geometry = 'x > 0.1 & x < 0.9 & y > 0.1 & y < 0.9'
    block_id = 1
  []
  [./subdomains2]
    type = ParsedSubdomainMeshGenerator
    combinatorial_geometry = 'x < 0.5 & y < 0.5'
    excluded_subdomain_ids = '0'
    block_id = 2
    input = subdomains
  []
[]
(test/tests/meshgenerators/parsed_subdomain_mesh_generator/parsed_subdomain_mg.i)The final mesh output is:

Input Parameters
- block_nameSubdomain name to set for inside of the combinatorial
C++ Type:SubdomainName
Options:
Description:Subdomain name to set for inside of the combinatorial
 - constant_expressionsVector of values for the constants in constant_names (can be an FParser expression)
C++ Type:std::vector<std::string>
Options:
Description:Vector of values for the constants in constant_names (can be an FParser expression)
 - constant_namesVector of constants used in the parsed function (use this for kB etc.)
C++ Type:std::vector<std::string>
Options:
Description:Vector of constants used in the parsed function (use this for kB etc.)
 - excluded_subdomain_idsA set of subdomain ids that will not changed even if they are inside/outside the combinatorial geometry
C++ Type:std::vector<unsigned short>
Options:
Description:A set of subdomain ids that will not changed even if they are inside/outside the combinatorial geometry
 - show_infoFalseWhether or not to show mesh info after generating the mesh (bounding box, element types, sidesets, nodesets, subdomains, etc)
Default:False
C++ Type:bool
Options:
Description:Whether or not to show mesh info after generating the mesh (bounding box, element types, sidesets, nodesets, subdomains, etc)
 
Optional Parameters
- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector<std::string>
Options:
Description:Adds user-defined labels for accessing object parameters via control logic.
 - disable_fpoptimizerFalseDisable the function parser algebraic optimizer
Default:False
C++ Type:bool
Options:
Description:Disable the function parser algebraic optimizer
 - enableTrueSet the enabled status of the MooseObject.
Default:True
C++ Type:bool
Options:
Description:Set the enabled status of the MooseObject.
 - enable_ad_cacheTrueEnable cacheing of function derivatives for faster startup time
Default:True
C++ Type:bool
Options:
Description:Enable cacheing of function derivatives for faster startup time
 - enable_auto_optimizeTrueEnable automatic immediate optimization of derivatives
Default:True
C++ Type:bool
Options:
Description:Enable automatic immediate optimization of derivatives
 - enable_jitTrueEnable just-in-time compilation of function expressions for faster evaluation
Default:True
C++ Type:bool
Options:
Description:Enable just-in-time compilation of function expressions for faster evaluation
 - evalerror_behaviornanWhat to do if evaluation error occurs. Options are to pass a nan, pass a nan with a warning, throw a error, or throw an exception
Default:nan
C++ Type:MooseEnum
Options:nan, nan_warning, error, exception
Description:What to do if evaluation error occurs. Options are to pass a nan, pass a nan with a warning, throw a error, or throw an exception
 
Advanced Parameters
Input Files
- (modules/combined/examples/geochem-porous_flow/geotes_weber_tensleep/aquifer_geochemistry.i)
 - (modules/ray_tracing/test/tests/raykernels/material_integral_ray_kernel/material_integral_ray_kernel.i)
 - (modules/tensor_mechanics/test/tests/shell/static/pinched_cylinder_symm.i)
 - (modules/stochastic_tools/examples/surrogates/combined/trans_diff_2d/trans_diff_sub.i)
 - (modules/combined/examples/geochem-porous_flow/geotes_weber_tensleep/porous_flow.i)
 - (test/tests/mesh_modifiers/parsed_subdomain/parsed_subdomain_mm.i)
 - (modules/ray_tracing/test/tests/raybcs/reflect_ray_bc/reflect_ray_bc_nonplanar.i)
 - (test/tests/meshgenerators/parsed_subdomain_mesh_generator/parsed_subdomain_mg.i)
 - (test/tests/mesh_modifiers/parsed_sideset/parsed_sideset.i)
 - (test/tests/meshgenerators/parsed_generate_sideset/parsed_generate_sideset.i)
 - (test/tests/meshgenerators/show_info/show_info.i)
 - (modules/stochastic_tools/test/tests/transfers/sampler_transfer_vector/sub.i)
 - (modules/ray_tracing/test/tests/userobjects/ray_tracing_study/multiple_subdomains/multiple_subdomains.i)
 
(test/tests/meshgenerators/parsed_subdomain_mesh_generator/parsed_subdomain_mg.i)
[Mesh]
  [./gmg]
    type = GeneratedMeshGenerator
    dim = 2
    nx = 10
    ny = 10
    xmax = 1
    ymax = 1
    uniform_refine = 2
  []
  [./subdomains]
    type = ParsedSubdomainMeshGenerator
    input = gmg
    combinatorial_geometry = 'x > 0.1 & x < 0.9 & y > 0.1 & y < 0.9'
    block_id = 1
  []
  [./subdomains2]
    type = ParsedSubdomainMeshGenerator
    combinatorial_geometry = 'x < 0.5 & y < 0.5'
    excluded_subdomain_ids = '0'
    block_id = 2
    input = subdomains
  []
[]
[Outputs]
  exodus = true
[]
(modules/combined/examples/geochem-porous_flow/geotes_weber_tensleep/aquifer_geochemistry.i)
#########################################
#                                       #
# File written by create_input_files.py #
#                                       #
#########################################
# Simulates geochemistry in the aquifer.  This input file may be run in standalone fashion but it does not do anything of interest.  To simulate something interesting, run the porous_flow.i simulation which couples to this input file using MultiApps.
# This file receives pf_rate_H pf_rate_Cl pf_rate_SO4 pf_rate_HCO3 pf_rate_SiO2aq pf_rate_Al pf_rate_Ca pf_rate_Mg pf_rate_Fe pf_rate_K pf_rate_Na pf_rate_Sr pf_rate_F pf_rate_BOH pf_rate_Br pf_rate_Ba pf_rate_Li pf_rate_NO3 pf_rate_O2aq pf_rate_H2O and temperature as AuxVariables from porous_flow.i
# The pf_rate quantities are kg/s changes of fluid-component mass at each node, but the geochemistry module expects rates-of-changes of moles at every node.  Secondly, since this input file considers just 1 litre of aqueous solution at every node, the nodal_void_volume is used to convert pf_rate_* into rate_*_per_1l, which is measured in mol/s/1_litre_of_aqueous_solution.
# This file sends massfrac_H massfrac_Cl massfrac_SO4 massfrac_HCO3 massfrac_SiO2aq massfrac_Al massfrac_Ca massfrac_Mg massfrac_Fe massfrac_K massfrac_Na massfrac_Sr massfrac_F massfrac_BOH massfrac_Br massfrac_Ba massfrac_Li massfrac_NO3 massfrac_O2aq to porous_flow.i.  These are computed from the corresponding transported_* quantities.
[UserObjects]
  [definition]
    type = GeochemicalModelDefinition
    database_file = '../../../../geochemistry/database/moose_geochemdb.json'
    basis_species = 'H2O H+ Cl- SO4-- HCO3- SiO2(aq) Al+++ Ca++ Mg++ Fe++ K+ Na+ Sr++ F- B(OH)3 Br- Ba++ Li+ NO3- O2(aq)'
    equilibrium_minerals = 'Siderite Pyrrhotite Dolomite Illite Anhydrite Calcite Quartz K-feldspar Kaolinite Barite Celestite Fluorite Albite Chalcedony Goethite'
  []
  [nodal_void_volume_uo]
    type = NodalVoidVolume
    porosity = porosity
    execute_on = 'initial timestep_end' # initial means this is evaluated properly for the first timestep
  []
[]
[SpatialReactionSolver]
  model_definition = definition
  geochemistry_reactor_name = reactor
  charge_balance_species = 'Cl-'
  swap_out_of_basis = 'NO3- H+         Fe++       Ba++   SiO2(aq) Mg++     O2(aq)   Al+++   K+     Ca++      HCO3-'
  swap_into_basis = '  NH3  Pyrrhotite K-feldspar Barite Quartz   Dolomite Siderite Calcite Illite Anhydrite Kaolinite'
# ASSUME that 1 litre of solution contains:
  constraint_species = 'H2O        Quartz     Calcite   K-feldspar Siderite  Dolomite  Anhydrite Pyrrhotite Illite    Kaolinite  Barite       Na+       Cl-       SO4--       Li+         B(OH)3      Br-         F-         Sr++        NH3'
  constraint_value = '  0.99778351 322.177447 12.111108 6.8269499  6.2844304 2.8670301 1.1912027 0.51474767 0.3732507 0.20903322 0.0001865889 1.5876606 1.5059455 0.046792579 0.013110503 0.006663119 0.001238987 0.00032108 0.000159781 0.001937302'
  constraint_meaning = 'kg_solvent_water bulk_composition bulk_composition bulk_composition bulk_composition bulk_composition bulk_composition bulk_composition bulk_composition bulk_composition bulk_composition bulk_composition bulk_composition bulk_composition bulk_composition bulk_composition bulk_composition bulk_composition bulk_composition bulk_composition'
  constraint_unit = "kg moles moles moles moles moles moles moles moles moles moles moles moles moles moles moles moles moles moles moles"
  prevent_precipitation = 'Fluorite Albite Goethite'
  initial_temperature = 92
  temperature = temperature
  source_species_names = 'H+ Cl- SO4-- HCO3- SiO2(aq) Al+++ Ca++ Mg++ Fe++ K+ Na+ Sr++ F- B(OH)3 Br- Ba++ Li+ NO3- O2(aq) H2O'
  source_species_rates = ' rate_H_per_1l rate_Cl_per_1l rate_SO4_per_1l rate_HCO3_per_1l rate_SiO2aq_per_1l rate_Al_per_1l rate_Ca_per_1l rate_Mg_per_1l rate_Fe_per_1l rate_K_per_1l rate_Na_per_1l rate_Sr_per_1l rate_F_per_1l rate_BOH_per_1l rate_Br_per_1l rate_Ba_per_1l rate_Li_per_1l rate_NO3_per_1l rate_O2aq_per_1l rate_H2O_per_1l'
  ramp_max_ionic_strength_initial = 0 # max_ionic_strength in such a simple problem does not need ramping
  execute_console_output_on = '' # only CSV and exodus output for this simulation
  add_aux_molal = false # save some memory and reduce variables in output exodus
  add_aux_mg_per_kg = false # save some memory and reduce variables in output exodus
  add_aux_free_mg = false # save some memory and reduce variables in output exodus
  add_aux_activity = false # save some memory and reduce variables in output exodus
  add_aux_bulk_moles = false # save some memory and reduce variables in output exodus
  adaptive_timestepping = true
[]
[Mesh]
  [gen]
    type = GeneratedMeshGenerator
    dim = 3
    xmin = -75
    xmax = 75
    ymin = 0
    ymax = 40
    zmin = -25
    zmax = 25
    nx = 15
    ny = 4
    nz = 5
  []
  [aquifer]
    type = ParsedSubdomainMeshGenerator
    input = gen
    block_id = 1
    block_name = aquifer
    combinatorial_geometry = 'z >= -5 & z <= 5'
  []
  [injection_nodes]
    input = aquifer
    type = ExtraNodesetGenerator
    new_boundary = injection_nodes
    coord = '-25 0 -5; -25 0 5'
  []
  [production_nodes]
    input = injection_nodes
    type = ExtraNodesetGenerator
    new_boundary = production_nodes
    coord = '25 0 -5; 25 0 5'
  []
[]
[GlobalParams]
  point = '-25 0 0'
  reactor = reactor
[]
[Executioner]
  type = Transient
  solve_type = Newton
  end_time = 7.76E6 # 90 days
  [TimeStepper]
    type = FunctionDT
    function = 'min(3E4, max(1E4, 0.2 * t))'
  []
[]
[AuxVariables]
  [temperature]
    initial_condition = 92.0
  []
  [porosity]
    initial_condition = 0.1
  []
  [nodal_void_volume]
  []
  [free_cm3_Kfeldspar] # necessary because of the minus sign in K-feldspar which does not parse correctly in the porosity AuxKernel
  []
  [pf_rate_H] # change in H mass (kg/s) at each node provided by the porous-flow simulation
  []
  [pf_rate_Cl] # change in Cl mass (kg/s) at each node provided by the porous-flow simulation
  []
  [pf_rate_SO4] # change in SO4 mass (kg/s) at each node provided by the porous-flow simulation
  []
  [pf_rate_HCO3] # change in HCO3 mass (kg/s) at each node provided by the porous-flow simulation
  []
  [pf_rate_SiO2aq] # change in SiO2aq mass (kg/s) at each node provided by the porous-flow simulation
  []
  [pf_rate_Al] # change in Al mass (kg/s) at each node provided by the porous-flow simulation
  []
  [pf_rate_Ca] # change in Ca mass (kg/s) at each node provided by the porous-flow simulation
  []
  [pf_rate_Mg] # change in Mg mass (kg/s) at each node provided by the porous-flow simulation
  []
  [pf_rate_Fe] # change in Fe mass (kg/s) at each node provided by the porous-flow simulation
  []
  [pf_rate_K] # change in K mass (kg/s) at each node provided by the porous-flow simulation
  []
  [pf_rate_Na] # change in Na mass (kg/s) at each node provided by the porous-flow simulation
  []
  [pf_rate_Sr] # change in Sr mass (kg/s) at each node provided by the porous-flow simulation
  []
  [pf_rate_F] # change in F mass (kg/s) at each node provided by the porous-flow simulation
  []
  [pf_rate_BOH] # change in BOH mass (kg/s) at each node provided by the porous-flow simulation
  []
  [pf_rate_Br] # change in Br mass (kg/s) at each node provided by the porous-flow simulation
  []
  [pf_rate_Ba] # change in Ba mass (kg/s) at each node provided by the porous-flow simulation
  []
  [pf_rate_Li] # change in Li mass (kg/s) at each node provided by the porous-flow simulation
  []
  [pf_rate_NO3] # change in NO3 mass (kg/s) at each node provided by the porous-flow simulation
  []
  [pf_rate_O2aq] # change in O2aq mass (kg/s) at each node provided by the porous-flow simulation
  []
  [pf_rate_H2O] # change in H2O mass (kg/s) at each node provided by the porous-flow simulation
  []
  [rate_H_per_1l]
  []
  [rate_Cl_per_1l]
  []
  [rate_SO4_per_1l]
  []
  [rate_HCO3_per_1l]
  []
  [rate_SiO2aq_per_1l]
  []
  [rate_Al_per_1l]
  []
  [rate_Ca_per_1l]
  []
  [rate_Mg_per_1l]
  []
  [rate_Fe_per_1l]
  []
  [rate_K_per_1l]
  []
  [rate_Na_per_1l]
  []
  [rate_Sr_per_1l]
  []
  [rate_F_per_1l]
  []
  [rate_BOH_per_1l]
  []
  [rate_Br_per_1l]
  []
  [rate_Ba_per_1l]
  []
  [rate_Li_per_1l]
  []
  [rate_NO3_per_1l]
  []
  [rate_O2aq_per_1l]
  []
  [rate_H2O_per_1l]
  []
  [transported_H]
  []
  [transported_Cl]
  []
  [transported_SO4]
  []
  [transported_HCO3]
  []
  [transported_SiO2aq]
  []
  [transported_Al]
  []
  [transported_Ca]
  []
  [transported_Mg]
  []
  [transported_Fe]
  []
  [transported_K]
  []
  [transported_Na]
  []
  [transported_Sr]
  []
  [transported_F]
  []
  [transported_BOH]
  []
  [transported_Br]
  []
  [transported_Ba]
  []
  [transported_Li]
  []
  [transported_NO3]
  []
  [transported_O2aq]
  []
  [transported_H2O]
  []
  [transported_mass]
  []
  [massfrac_H]
  []
  [massfrac_Cl]
  []
  [massfrac_SO4]
  []
  [massfrac_HCO3]
  []
  [massfrac_SiO2aq]
  []
  [massfrac_Al]
  []
  [massfrac_Ca]
  []
  [massfrac_Mg]
  []
  [massfrac_Fe]
  []
  [massfrac_K]
  []
  [massfrac_Na]
  []
  [massfrac_Sr]
  []
  [massfrac_F]
  []
  [massfrac_BOH]
  []
  [massfrac_Br]
  []
  [massfrac_Ba]
  []
  [massfrac_Li]
  []
  [massfrac_NO3]
  []
  [massfrac_O2aq]
  []
  [massfrac_H2O]
  []
[]
[AuxKernels]
  [free_cm3_Kfeldspar]
    type = GeochemistryQuantityAux
    variable = free_cm3_Kfeldspar
    species = 'K-feldspar'
    quantity = free_cm3
    execute_on = 'timestep_end'
  []
  [porosity_auxk]
    type = ParsedAux
    args = 'free_cm3_Siderite free_cm3_Pyrrhotite free_cm3_Dolomite free_cm3_Illite free_cm3_Anhydrite free_cm3_Calcite free_cm3_Quartz free_cm3_Kfeldspar free_cm3_Kaolinite free_cm3_Barite free_cm3_Celestite free_cm3_Fluorite free_cm3_Albite free_cm3_Chalcedony free_cm3_Goethite'
    function = '1000.0 / (1000.0 + free_cm3_Siderite + free_cm3_Pyrrhotite + free_cm3_Dolomite + free_cm3_Illite + free_cm3_Anhydrite + free_cm3_Calcite + free_cm3_Quartz + free_cm3_Kfeldspar + free_cm3_Kaolinite + free_cm3_Barite + free_cm3_Celestite + free_cm3_Fluorite + free_cm3_Albite + free_cm3_Chalcedony + free_cm3_Goethite)'
    variable = porosity
    execute_on = 'timestep_end'
  []
  [nodal_void_volume_auxk]
    type = NodalVoidVolumeAux
    variable = nodal_void_volume
    nodal_void_volume_uo = nodal_void_volume_uo
    execute_on = 'initial timestep_end' # initial to ensure it is properly evaluated for the first timestep
  []
  [rate_H_per_1l_auxk]
    type = ParsedAux
    args = 'pf_rate_H nodal_void_volume'
    variable = rate_H_per_1l
    function = 'pf_rate_H / 1.0079 / nodal_void_volume'
    execute_on = 'timestep_end'
  []
  [rate_Cl_per_1l_auxk]
    type = ParsedAux
    args = 'pf_rate_Cl nodal_void_volume'
    variable = rate_Cl_per_1l
    function = 'pf_rate_Cl / 35.453 / nodal_void_volume'
    execute_on = 'timestep_end'
  []
  [rate_SO4_per_1l_auxk]
    type = ParsedAux
    args = 'pf_rate_SO4 nodal_void_volume'
    variable = rate_SO4_per_1l
    function = 'pf_rate_SO4 / 96.0576 / nodal_void_volume'
    execute_on = 'timestep_end'
  []
  [rate_HCO3_per_1l_auxk]
    type = ParsedAux
    args = 'pf_rate_HCO3 nodal_void_volume'
    variable = rate_HCO3_per_1l
    function = 'pf_rate_HCO3 / 61.0171 / nodal_void_volume'
    execute_on = 'timestep_end'
  []
  [rate_SiO2aq_per_1l_auxk]
    type = ParsedAux
    args = 'pf_rate_SiO2aq nodal_void_volume'
    variable = rate_SiO2aq_per_1l
    function = 'pf_rate_SiO2aq / 60.0843 / nodal_void_volume'
    execute_on = 'timestep_end'
  []
  [rate_Al_per_1l_auxk]
    type = ParsedAux
    args = 'pf_rate_Al nodal_void_volume'
    variable = rate_Al_per_1l
    function = 'pf_rate_Al / 26.9815 / nodal_void_volume'
    execute_on = 'timestep_end'
  []
  [rate_Ca_per_1l_auxk]
    type = ParsedAux
    args = 'pf_rate_Ca nodal_void_volume'
    variable = rate_Ca_per_1l
    function = 'pf_rate_Ca / 40.08 / nodal_void_volume'
    execute_on = 'timestep_end'
  []
  [rate_Mg_per_1l_auxk]
    type = ParsedAux
    args = 'pf_rate_Mg nodal_void_volume'
    variable = rate_Mg_per_1l
    function = 'pf_rate_Mg / 24.305 / nodal_void_volume'
    execute_on = 'timestep_end'
  []
  [rate_Fe_per_1l_auxk]
    type = ParsedAux
    args = 'pf_rate_Fe nodal_void_volume'
    variable = rate_Fe_per_1l
    function = 'pf_rate_Fe / 55.847 / nodal_void_volume'
    execute_on = 'timestep_end'
  []
  [rate_K_per_1l_auxk]
    type = ParsedAux
    args = 'pf_rate_K nodal_void_volume'
    variable = rate_K_per_1l
    function = 'pf_rate_K / 39.0983 / nodal_void_volume'
    execute_on = 'timestep_end'
  []
  [rate_Na_per_1l_auxk]
    type = ParsedAux
    args = 'pf_rate_Na nodal_void_volume'
    variable = rate_Na_per_1l
    function = 'pf_rate_Na / 22.9898 / nodal_void_volume'
    execute_on = 'timestep_end'
  []
  [rate_Sr_per_1l_auxk]
    type = ParsedAux
    args = 'pf_rate_Sr nodal_void_volume'
    variable = rate_Sr_per_1l
    function = 'pf_rate_Sr / 87.62 / nodal_void_volume'
    execute_on = 'timestep_end'
  []
  [rate_F_per_1l_auxk]
    type = ParsedAux
    args = 'pf_rate_F nodal_void_volume'
    variable = rate_F_per_1l
    function = 'pf_rate_F / 18.9984 / nodal_void_volume'
    execute_on = 'timestep_end'
  []
  [rate_BOH_per_1l_auxk]
    type = ParsedAux
    args = 'pf_rate_BOH nodal_void_volume'
    variable = rate_BOH_per_1l
    function = 'pf_rate_BOH / 61.8329 / nodal_void_volume'
    execute_on = 'timestep_end'
  []
  [rate_Br_per_1l_auxk]
    type = ParsedAux
    args = 'pf_rate_Br nodal_void_volume'
    variable = rate_Br_per_1l
    function = 'pf_rate_Br / 79.904 / nodal_void_volume'
    execute_on = 'timestep_end'
  []
  [rate_Ba_per_1l_auxk]
    type = ParsedAux
    args = 'pf_rate_Ba nodal_void_volume'
    variable = rate_Ba_per_1l
    function = 'pf_rate_Ba / 137.33 / nodal_void_volume'
    execute_on = 'timestep_end'
  []
  [rate_Li_per_1l_auxk]
    type = ParsedAux
    args = 'pf_rate_Li nodal_void_volume'
    variable = rate_Li_per_1l
    function = 'pf_rate_Li / 6.941 / nodal_void_volume'
    execute_on = 'timestep_end'
  []
  [rate_NO3_per_1l_auxk]
    type = ParsedAux
    args = 'pf_rate_NO3 nodal_void_volume'
    variable = rate_NO3_per_1l
    function = 'pf_rate_NO3 / 62.0049 / nodal_void_volume'
    execute_on = 'timestep_end'
  []
  [rate_O2aq_per_1l_auxk]
    type = ParsedAux
    args = 'pf_rate_O2aq nodal_void_volume'
    variable = rate_O2aq_per_1l
    function = 'pf_rate_O2aq / 31.9988 / nodal_void_volume'
    execute_on = 'timestep_end'
  []
  [rate_H2O_per_1l_auxk]
    type = ParsedAux
    args = 'pf_rate_H2O nodal_void_volume'
    variable = rate_H2O_per_1l
    function = 'pf_rate_H2O / 18.01801802 / nodal_void_volume'
    execute_on = 'timestep_end'
  []
  [transported_H_auxk]
    type = GeochemistryQuantityAux
    variable = transported_H
    species = 'H+'
    quantity = transported_moles_in_original_basis
    execute_on = 'timestep_end'
  []
  [transported_Cl_auxk]
    type = GeochemistryQuantityAux
    variable = transported_Cl
    species = 'Cl-'
    quantity = transported_moles_in_original_basis
    execute_on = 'timestep_end'
  []
  [transported_SO4_auxk]
    type = GeochemistryQuantityAux
    variable = transported_SO4
    species = 'SO4--'
    quantity = transported_moles_in_original_basis
    execute_on = 'timestep_end'
  []
  [transported_HCO3_auxk]
    type = GeochemistryQuantityAux
    variable = transported_HCO3
    species = 'HCO3-'
    quantity = transported_moles_in_original_basis
    execute_on = 'timestep_end'
  []
  [transported_SiO2aq_auxk]
    type = GeochemistryQuantityAux
    variable = transported_SiO2aq
    species = 'SiO2(aq)'
    quantity = transported_moles_in_original_basis
    execute_on = 'timestep_end'
  []
  [transported_Al_auxk]
    type = GeochemistryQuantityAux
    variable = transported_Al
    species = 'Al+++'
    quantity = transported_moles_in_original_basis
    execute_on = 'timestep_end'
  []
  [transported_Ca_auxk]
    type = GeochemistryQuantityAux
    variable = transported_Ca
    species = 'Ca++'
    quantity = transported_moles_in_original_basis
    execute_on = 'timestep_end'
  []
  [transported_Mg_auxk]
    type = GeochemistryQuantityAux
    variable = transported_Mg
    species = 'Mg++'
    quantity = transported_moles_in_original_basis
    execute_on = 'timestep_end'
  []
  [transported_Fe_auxk]
    type = GeochemistryQuantityAux
    variable = transported_Fe
    species = 'Fe++'
    quantity = transported_moles_in_original_basis
    execute_on = 'timestep_end'
  []
  [transported_K_auxk]
    type = GeochemistryQuantityAux
    variable = transported_K
    species = 'K+'
    quantity = transported_moles_in_original_basis
    execute_on = 'timestep_end'
  []
  [transported_Na_auxk]
    type = GeochemistryQuantityAux
    variable = transported_Na
    species = 'Na+'
    quantity = transported_moles_in_original_basis
    execute_on = 'timestep_end'
  []
  [transported_Sr_auxk]
    type = GeochemistryQuantityAux
    variable = transported_Sr
    species = 'Sr++'
    quantity = transported_moles_in_original_basis
    execute_on = 'timestep_end'
  []
  [transported_F_auxk]
    type = GeochemistryQuantityAux
    variable = transported_F
    species = 'F-'
    quantity = transported_moles_in_original_basis
    execute_on = 'timestep_end'
  []
  [transported_BOH_auxk]
    type = GeochemistryQuantityAux
    variable = transported_BOH
    species = 'B(OH)3'
    quantity = transported_moles_in_original_basis
    execute_on = 'timestep_end'
  []
  [transported_Br_auxk]
    type = GeochemistryQuantityAux
    variable = transported_Br
    species = 'Br-'
    quantity = transported_moles_in_original_basis
    execute_on = 'timestep_end'
  []
  [transported_Ba_auxk]
    type = GeochemistryQuantityAux
    variable = transported_Ba
    species = 'Ba++'
    quantity = transported_moles_in_original_basis
    execute_on = 'timestep_end'
  []
  [transported_Li_auxk]
    type = GeochemistryQuantityAux
    variable = transported_Li
    species = 'Li+'
    quantity = transported_moles_in_original_basis
    execute_on = 'timestep_end'
  []
  [transported_NO3_auxk]
    type = GeochemistryQuantityAux
    variable = transported_NO3
    species = 'NO3-'
    quantity = transported_moles_in_original_basis
    execute_on = 'timestep_end'
  []
  [transported_O2aq_auxk]
    type = GeochemistryQuantityAux
    variable = transported_O2aq
    species = 'O2(aq)'
    quantity = transported_moles_in_original_basis
    execute_on = 'timestep_end'
  []
  [transported_H2O_auxk]
    type = GeochemistryQuantityAux
    variable = transported_H2O
    species = 'H2O'
    quantity = transported_moles_in_original_basis
    execute_on = 'timestep_end'
  []
  [transported_mass_auxk]
    type = ParsedAux
    args = ' transported_H transported_Cl transported_SO4 transported_HCO3 transported_SiO2aq transported_Al transported_Ca transported_Mg transported_Fe transported_K transported_Na transported_Sr transported_F transported_BOH transported_Br transported_Ba transported_Li transported_NO3 transported_O2aq transported_H2O'
    variable = transported_mass
    function = 'transported_H * 1.0079 + transported_Cl * 35.453 + transported_SO4 * 96.0576 + transported_HCO3 * 61.0171 + transported_SiO2aq * 60.0843 + transported_Al * 26.9815 + transported_Ca * 40.08 + transported_Mg * 24.305 + transported_Fe * 55.847 + transported_K * 39.0983 + transported_Na * 22.9898 + transported_Sr * 87.62 + transported_F * 18.9984 + transported_BOH * 61.8329 + transported_Br * 79.904 + transported_Ba * 137.33 + transported_Li * 6.941 + transported_NO3 * 62.0049 + transported_O2aq * 31.9988 + transported_H2O * 18.01801802'
    execute_on = 'timestep_end'
  []
  [massfrac_H_auxk]
    type = ParsedAux
    args = 'transported_H transported_mass'
    variable = massfrac_H
    function = 'transported_H * 1.0079 / transported_mass'
    execute_on = 'timestep_end'
  []
  [massfrac_Cl_auxk]
    type = ParsedAux
    args = 'transported_Cl transported_mass'
    variable = massfrac_Cl
    function = 'transported_Cl * 35.453 / transported_mass'
    execute_on = 'timestep_end'
  []
  [massfrac_SO4_auxk]
    type = ParsedAux
    args = 'transported_SO4 transported_mass'
    variable = massfrac_SO4
    function = 'transported_SO4 * 96.0576 / transported_mass'
    execute_on = 'timestep_end'
  []
  [massfrac_HCO3_auxk]
    type = ParsedAux
    args = 'transported_HCO3 transported_mass'
    variable = massfrac_HCO3
    function = 'transported_HCO3 * 61.0171 / transported_mass'
    execute_on = 'timestep_end'
  []
  [massfrac_SiO2aq_auxk]
    type = ParsedAux
    args = 'transported_SiO2aq transported_mass'
    variable = massfrac_SiO2aq
    function = 'transported_SiO2aq * 60.0843 / transported_mass'
    execute_on = 'timestep_end'
  []
  [massfrac_Al_auxk]
    type = ParsedAux
    args = 'transported_Al transported_mass'
    variable = massfrac_Al
    function = 'transported_Al * 26.9815 / transported_mass'
    execute_on = 'timestep_end'
  []
  [massfrac_Ca_auxk]
    type = ParsedAux
    args = 'transported_Ca transported_mass'
    variable = massfrac_Ca
    function = 'transported_Ca * 40.08 / transported_mass'
    execute_on = 'timestep_end'
  []
  [massfrac_Mg_auxk]
    type = ParsedAux
    args = 'transported_Mg transported_mass'
    variable = massfrac_Mg
    function = 'transported_Mg * 24.305 / transported_mass'
    execute_on = 'timestep_end'
  []
  [massfrac_Fe_auxk]
    type = ParsedAux
    args = 'transported_Fe transported_mass'
    variable = massfrac_Fe
    function = 'transported_Fe * 55.847 / transported_mass'
    execute_on = 'timestep_end'
  []
  [massfrac_K_auxk]
    type = ParsedAux
    args = 'transported_K transported_mass'
    variable = massfrac_K
    function = 'transported_K * 39.0983 / transported_mass'
    execute_on = 'timestep_end'
  []
  [massfrac_Na_auxk]
    type = ParsedAux
    args = 'transported_Na transported_mass'
    variable = massfrac_Na
    function = 'transported_Na * 22.9898 / transported_mass'
    execute_on = 'timestep_end'
  []
  [massfrac_Sr_auxk]
    type = ParsedAux
    args = 'transported_Sr transported_mass'
    variable = massfrac_Sr
    function = 'transported_Sr * 87.62 / transported_mass'
    execute_on = 'timestep_end'
  []
  [massfrac_F_auxk]
    type = ParsedAux
    args = 'transported_F transported_mass'
    variable = massfrac_F
    function = 'transported_F * 18.9984 / transported_mass'
    execute_on = 'timestep_end'
  []
  [massfrac_BOH_auxk]
    type = ParsedAux
    args = 'transported_BOH transported_mass'
    variable = massfrac_BOH
    function = 'transported_BOH * 61.8329 / transported_mass'
    execute_on = 'timestep_end'
  []
  [massfrac_Br_auxk]
    type = ParsedAux
    args = 'transported_Br transported_mass'
    variable = massfrac_Br
    function = 'transported_Br * 79.904 / transported_mass'
    execute_on = 'timestep_end'
  []
  [massfrac_Ba_auxk]
    type = ParsedAux
    args = 'transported_Ba transported_mass'
    variable = massfrac_Ba
    function = 'transported_Ba * 137.33 / transported_mass'
    execute_on = 'timestep_end'
  []
  [massfrac_Li_auxk]
    type = ParsedAux
    args = 'transported_Li transported_mass'
    variable = massfrac_Li
    function = 'transported_Li * 6.941 / transported_mass'
    execute_on = 'timestep_end'
  []
  [massfrac_NO3_auxk]
    type = ParsedAux
    args = 'transported_NO3 transported_mass'
    variable = massfrac_NO3
    function = 'transported_NO3 * 62.0049 / transported_mass'
    execute_on = 'timestep_end'
  []
  [massfrac_O2aq_auxk]
    type = ParsedAux
    args = 'transported_O2aq transported_mass'
    variable = massfrac_O2aq
    function = 'transported_O2aq * 31.9988 / transported_mass'
    execute_on = 'timestep_end'
  []
  [massfrac_H2O_auxk]
    type = ParsedAux
    args = 'transported_H2O transported_mass'
    variable = massfrac_H2O
    function = 'transported_H2O * 18.01801802 / transported_mass'
    execute_on = 'timestep_end'
  []
[]
[Postprocessors]
  [memory]
    type = MemoryUsage
    outputs = 'console'
  []
  [porosity]
    type = PointValue
    variable = porosity
  []
  [solution_temperature]
    type = PointValue
    variable = solution_temperature
  []
  [massfrac_H]
    type = PointValue
    variable = massfrac_H
  []
  [massfrac_Cl]
    type = PointValue
    variable = massfrac_Cl
  []
  [massfrac_SO4]
    type = PointValue
    variable = massfrac_SO4
  []
  [massfrac_HCO3]
    type = PointValue
    variable = massfrac_HCO3
  []
  [massfrac_SiO2aq]
    type = PointValue
    variable = massfrac_SiO2aq
  []
  [massfrac_Al]
    type = PointValue
    variable = massfrac_Al
  []
  [massfrac_Ca]
    type = PointValue
    variable = massfrac_Ca
  []
  [massfrac_Mg]
    type = PointValue
    variable = massfrac_Mg
  []
  [massfrac_Fe]
    type = PointValue
    variable = massfrac_Fe
  []
  [massfrac_K]
    type = PointValue
    variable = massfrac_K
  []
  [massfrac_Na]
    type = PointValue
    variable = massfrac_Na
  []
  [massfrac_Sr]
    type = PointValue
    variable = massfrac_Sr
  []
  [massfrac_F]
    type = PointValue
    variable = massfrac_F
  []
  [massfrac_BOH]
    type = PointValue
    variable = massfrac_BOH
  []
  [massfrac_Br]
    type = PointValue
    variable = massfrac_Br
  []
  [massfrac_Ba]
    type = PointValue
    variable = massfrac_Ba
  []
  [massfrac_Li]
    type = PointValue
    variable = massfrac_Li
  []
  [massfrac_NO3]
    type = PointValue
    variable = massfrac_NO3
  []
  [massfrac_O2aq]
    type = PointValue
    variable = massfrac_O2aq
  []
  [massfrac_H2O]
    type = PointValue
    variable = massfrac_H2O
  []
  [free_cm3_Siderite]
    type = PointValue
    variable = free_cm3_Siderite
  []
  [free_cm3_Pyrrhotite]
    type = PointValue
    variable = free_cm3_Pyrrhotite
  []
  [free_cm3_Dolomite]
    type = PointValue
    variable = free_cm3_Dolomite
  []
  [free_cm3_Illite]
    type = PointValue
    variable = free_cm3_Illite
  []
  [free_cm3_Anhydrite]
    type = PointValue
    variable = free_cm3_Anhydrite
  []
  [free_cm3_Calcite]
    type = PointValue
    variable = free_cm3_Calcite
  []
  [free_cm3_Quartz]
    type = PointValue
    variable = free_cm3_Quartz
  []
  [free_cm3_K-feldspar]
    type = PointValue
    variable = free_cm3_K-feldspar
  []
  [free_cm3_Kaolinite]
    type = PointValue
    variable = free_cm3_Kaolinite
  []
  [free_cm3_Barite]
    type = PointValue
    variable = free_cm3_Barite
  []
  [free_cm3_Celestite]
    type = PointValue
    variable = free_cm3_Celestite
  []
  [free_cm3_Fluorite]
    type = PointValue
    variable = free_cm3_Fluorite
  []
  [free_cm3_Albite]
    type = PointValue
    variable = free_cm3_Albite
  []
  [free_cm3_Chalcedony]
    type = PointValue
    variable = free_cm3_Chalcedony
  []
  [free_cm3_Goethite]
    type = PointValue
    variable = free_cm3_Goethite
  []
[]
[Outputs]
  exodus = true
  csv = true
[]
(modules/ray_tracing/test/tests/raykernels/material_integral_ray_kernel/material_integral_ray_kernel.i)
[Mesh]
  [gmg]
    type = GeneratedMeshGenerator
    dim = 2
    nx = 5
    ny = 5
    xmax = 5
    ymax = 5
  []
  [modify_subdomain]
    type = ParsedSubdomainMeshGenerator
    input = gmg
    block_id = 1
    combinatorial_geometry = 'x > 2'
  []
[]
[Materials]
  [generic_mat_block0]
    type = GenericFunctionMaterial
    block = 0
    prop_names = 'mat'
    prop_values = 'parsed_block0'
  []
  [generic_mat_block1]
    type = GenericFunctionMaterial
    block = 1
    prop_names = 'mat'
    prop_values = 'parsed_block1'
  []
[]
[Functions]
  [parsed_block0]
    type = ParsedFunction
    value = 'x + 2 * y'
  []
  [parsed_block1] # continuous at the interface
    type = ParsedFunction
    value = '2 * x + 2 * y - 2'
  []
[]
[UserObjects]
  [study]
    type = RepeatableRayStudy
    names = 'diag
             top_across
             bottom_across
             partial'
    start_points = '0 0 0
                    0 5 0
                    0 0 0
                    0.5 0.5 0'
    end_points = '5 5 0
                  5 5 0
                  5 0 0
                  4.5 0.5 0'
  []
[]
[RayKernels]
  [material_integral]
    type = MaterialIntegralRayKernel
    study = study
    mat_prop = mat
  []
[]
[Postprocessors]
  [diag_value]
    type = RayIntegralValue
    ray_kernel = material_integral
    ray = diag
  []
  [top_across_value]
    type = RayIntegralValue
    ray_kernel = material_integral
    ray = top_across
  []
  [bottom_across_value]
    type = RayIntegralValue
    ray_kernel = material_integral
    ray = bottom_across
  []
  [partial_value]
    type = RayIntegralValue
    ray_kernel = material_integral
    ray = partial
  []
[]
[Problem]
  solve = false
[]
[Executioner]
  type = Steady
[]
[Outputs]
  exodus = false
  csv = true
[]
(modules/tensor_mechanics/test/tests/shell/static/pinched_cylinder_symm.i)
# Test for displacement of pinched cylinder
# Ref: Figure 10 and Table 6 from Dvorkin and Bathe, Eng. Comput., Vol. 1, 1984.
# A cylinder of radius 1 m and length 2 m (along Z axis) with clamped ends
# (at z = 0 and 2 m) is pinched at mid-length by placing point loads of 10 N
# at (1, 0, 1) and (-1, 0, 1). Due to the symmetry of the problem, only 1/8th
# of the cylinder needs to be modeled.
# The normalized series solution for the displacement at the loading point is
# w = Wc E t / P = 164.24; where Wc is the displacement in m, E is the Young's
# modulus, t is the thickness and P is the point load.
# For this problem, E = 1e6 Pa, L = 2 m, R = 1 m, t = 0.01 m, P = 10 N and
# Poisson's ratio = 0.3. FEM results from different mesh discretizations are
# presented below. Only the 10x10 mesh is included as a test.
# Mesh of 1/8 cylinder |  FEM/analytical (Moose) | FEM/analytical (Dvorkin)
#                      |ratio of normalized disp.| ratio of normalized disp.
#----------------------|-------------------------|-------------------------
#     10 x 10          |          0.806          |        0.83
#     20 x 20          |          1.06           |        0.96
#     40 x 40          |          0.95           |         -
#     80 x 160         |          0.96           |         -
# The results from FEM analysis matches well with the series solution and with
# the solution presented by Dvorkin and Bathe (1984).
[Mesh]
  [./mesh]
    type = FileMeshGenerator
    file = pinched_cyl_10_10.msh
  [../]
  [./block_100]
    type = ParsedSubdomainMeshGenerator
    input = mesh
    combinatorial_geometry = 'x > -1.1 & x < 1.1 & y > -1.1 & y < 1.1 & z > -0.1 & z < 2.1'
    block_id = 100
  [../]
  [./nodeset_1]
    type = BoundingBoxNodeSetGenerator
    input = block_100
    top_right = '1.1 1.1 0'
    bottom_left = '-1.1 -1.1 0'
    new_boundary = 'CD' #CD
  [../]
  [./nodeset_2]
    type = BoundingBoxNodeSetGenerator
    input = nodeset_1
    top_right = '1.1 1.1 1.0'
    bottom_left = '-1.1 -1.1 1.0'
    new_boundary = 'AB' #AB
  [../]
  [./nodeset_3]
    type = BoundingBoxNodeSetGenerator
    input = nodeset_2
    top_right = '0.02 1.1 1.0'
    bottom_left = '-0.1 0.98 0.0'
    new_boundary = 'AD' #AD
  [../]
  [./nodeset_4]
    type = BoundingBoxNodeSetGenerator
    input = nodeset_3
    top_right = '1.1 0.02 1.0'
    bottom_left = '0.98 -0.1 0.0'
    new_boundary = 'BC' #BC
  [../]
[]
[Variables]
  [./disp_x]
    order = FIRST
    family = LAGRANGE
  [../]
  [./disp_y]
    order = FIRST
    family = LAGRANGE
  [../]
  [./disp_z]
    order = FIRST
    family = LAGRANGE
  [../]
  [./rot_x]
    order = FIRST
    family = LAGRANGE
  [../]
  [./rot_y]
    order = FIRST
    family = LAGRANGE
  [../]
[]
[BCs]
  [./simply_support_x]
    type = DirichletBC
    variable = disp_x
    boundary = 'CD AD'
    value = 0.0
  [../]
  [./simply_support_y]
    type = DirichletBC
    variable = disp_y
    boundary = 'CD BC'
    value = 0.0
  [../]
  [./simply_support_z]
    type = DirichletBC
    variable = disp_z
    boundary = 'CD AB'
    value = 0.0
  [../]
  [./simply_support_rot_x]
    type = DirichletBC
    variable = rot_x
    boundary = 'CD BC'
    value = 0.0
  [../]
  [./simply_support_rot_y]
    type = DirichletBC
    variable = rot_y
    boundary = 'CD AD'
    value = 0.0
  [../]
[]
[DiracKernels]
  [./point1]
    type = ConstantPointSource
    variable = disp_x
    point = '1 0 1'
    value = -2.5 # P = 10
  [../]
[]
[Preconditioning]
  [./smp]
    type = SMP
    full = true
  [../]
[]
[Executioner]
  type = Transient
  solve_type = NEWTON
  line_search = 'none'
  nl_rel_tol = 1e-10
  nl_abs_tol = 1e-8
  dt = 1.0
  dtmin = 1.0
  end_time = 1.0
[]
[Kernels]
  [./solid_disp_x]
    type = ADStressDivergenceShell
    block = '100'
    component = 0
    variable = disp_x
    through_thickness_order = SECOND
  [../]
  [./solid_disp_y]
    type = ADStressDivergenceShell
    block = '100'
    component = 1
    variable = disp_y
    through_thickness_order = SECOND
  [../]
  [./solid_disp_z]
    type = ADStressDivergenceShell
    block = '100'
    component = 2
    variable = disp_z
    through_thickness_order = SECOND
  [../]
  [./solid_rot_x]
    type = ADStressDivergenceShell
    block = '100'
    component = 3
    variable = rot_x
    through_thickness_order = SECOND
  [../]
  [./solid_rot_y]
    type = ADStressDivergenceShell
    block = '100'
    component = 4
    variable = rot_y
    through_thickness_order = SECOND
  [../]
[]
[Materials]
  [./elasticity]
    type = ADComputeIsotropicElasticityTensorShell
    youngs_modulus = 1e6
    poissons_ratio = 0.3
    block = '100'
    through_thickness_order = SECOND
  [../]
  [./strain]
    type = ADComputeIncrementalShellStrain
    block = '100'
    displacements = 'disp_x disp_y disp_z'
    rotations = 'rot_x rot_y'
    thickness = 0.01
    through_thickness_order = SECOND
  [../]
  [./stress]
    type = ADComputeShellStress
    block = '100'
    through_thickness_order = SECOND
  [../]
[]
[Postprocessors]
  [./disp_z2]
    type = PointValue
    point = '1 0 1'
    variable = disp_x
  [../]
[]
[Outputs]
  exodus = true
[]
(modules/stochastic_tools/examples/surrogates/combined/trans_diff_2d/trans_diff_sub.i)
[Functions]
  [src_func]
    type = ParsedFunction
    value = "1000*sin(f*t)"
    vars = 'f'
    vals = '20'
  []
[]
[Mesh]
  [msh]
    type = GeneratedMeshGenerator
    dim = 2
    nx = 100
    xmin = -0.5
    xmax = 0.5
    ny = 100
    ymin = -0.5
    ymax = 0.5
  []
  [source_domain]
    type = ParsedSubdomainMeshGenerator
    input = msh
    combinatorial_geometry = '(x<0.1 & x>-0.1) & (y<0.1 & y>-0.1)'
    block_id=1
  []
[]
[Variables]
  [T]
    initial_condition = 300
  []
[]
[Kernels]
  [diffusion]
    type = MatDiffusion
    variable = T
    diffusivity = diff_coeff
  []
  [source]
    type = BodyForce
    variable = T
    function = src_func
    block = 1
  []
  [time_deriv]
    type = TimeDerivative
    variable = T
  []
[]
[Materials]
  [diff_coeff]
    type = ParsedMaterial
    f_name = diff_coeff
    args = 'T'
    constant_names = 'C'
    constant_expressions = 0.02
    function = 'C * pow(300/T, 2)'
  []
[]
[BCs]
  [neumann_all]
    type = NeumannBC
    variable = T
    boundary = 'left right top bottom'
    value = 0
  []
[]
[Executioner]
  type = Transient
  num_steps = 100
  dt = 0.01
  solve_type = PJFNK
  petsc_options_iname = '-pc_type -pc_hypre_type'
  petsc_options_value = 'hypre boomeramg'
  nl_rel_tol = 1e-6
  l_abs_tol = 1e-6
  timestep_tolerance = 1e-6
[]
[Postprocessors]
  [max]
    type = NodalExtremeValue
    variable = T
  []
  [min]
    type = NodalExtremeValue
    variable = T
    value_type = min
  []
  [time_max]
    type = TimeExtremeValue
    postprocessor = max
  []
  [time_min]
    type = TimeExtremeValue
    postprocessor = min
    value_type = min
  []
[]
(modules/combined/examples/geochem-porous_flow/geotes_weber_tensleep/porous_flow.i)
#########################################
#                                       #
# File written by create_input_files.py #
#                                       #
#########################################
# PorousFlow simulation of injection and production in a simplified GeoTES aquifer
# Much of this file is standard porous-flow stuff.  The unusual aspects are:
# - transfer of the rates of changes of each species (kg.s) to the aquifer_geochemistry.i simulation.  This is achieved by saving these changes from the PorousFlowMassTimeDerivative residuals
# - transfer of the temperature field to the aquifer_geochemistry.i simulation
# Interesting behaviour can be simulated by this file without its 'parent' simulation, exchanger.i.  exchanger.i provides mass-fractions injected via the injection_rate_massfrac_* variables, but since these are more-or-less constant throughout the duration of the exchanger.i simulation, the initial_conditions specified below may be used.  Similar, exchanger.i provides injection_temperature, but that is also constant.
injection_rate = -0.02 # kg/s/m, negative because injection as a source
production_rate = 0.02 # kg/s/m, this is about the maximum that can be sustained by the aquifer, with its fairly low permeability, without porepressure becoming negative
[Mesh]
  [gen]
    type = GeneratedMeshGenerator
    dim = 3
    xmin = -75
    xmax = 75
    ymin = 0
    ymax = 40
    zmin = -25
    zmax = 25
    nx = 15
    ny = 4
    nz = 5
  []
  [aquifer]
    type = ParsedSubdomainMeshGenerator
    input = gen
    block_id = 1
    block_name = aquifer
    combinatorial_geometry = 'z >= -5 & z <= 5'
  []
  [injection_nodes]
    input = aquifer
    type = ExtraNodesetGenerator
    new_boundary = injection_nodes
    coord = '-25 0 -5; -25 0 5'
  []
  [production_nodes]
    input = injection_nodes
    type = ExtraNodesetGenerator
    new_boundary = production_nodes
    coord = '25 0 -5; 25 0 5'
  []
[]
[GlobalParams]
  PorousFlowDictator = dictator
  gravity = '0 0 -10'
[]
[BCs]
  [injection_temperature]
    type = MatchedValueBC
    variable = temperature
    v = injection_temperature
    boundary = injection_nodes
  []
[]
[Modules]
  [FluidProperties]
    [the_simple_fluid]
      type = SimpleFluidProperties
      thermal_expansion = 0
      bulk_modulus = 2E9
      viscosity = 1E-3
      density0 = 1000
      cv = 4000.0
      cp = 4000.0
    []
  []
[]
[PorousFlowFullySaturated]
  coupling_type = ThermoHydro
  porepressure = porepressure
  temperature = temperature
  mass_fraction_vars = 'f_H f_Cl f_SO4 f_HCO3 f_SiO2aq f_Al f_Ca f_Mg f_Fe f_K f_Na f_Sr f_F f_BOH f_Br f_Ba f_Li f_NO3 f_O2aq '
  save_component_rate_in = 'rate_H rate_Cl rate_SO4 rate_HCO3 rate_SiO2aq rate_Al rate_Ca rate_Mg rate_Fe rate_K rate_Na rate_Sr rate_F rate_BOH rate_Br rate_Ba rate_Li rate_NO3 rate_O2aq rate_H2O' # change in kg at every node / dt
  fp = the_simple_fluid
  temperature_unit = Celsius
[]
[Materials]
  [porosity_caps]
    type = PorousFlowPorosityConst # this simulation has no porosity changes from dissolution
    block = 0
    porosity = 0.01
  []
  [porosity_aquifer]
    type = PorousFlowPorosityConst # this simulation has no porosity changes from dissolution
    block = aquifer
    porosity = 0.063
  []
  [permeability_caps]
    type = PorousFlowPermeabilityConst
    block = 0
    permeability = '1E-18 0 0   0 1E-18 0   0 0 1E-18'
  []
  [permeability_aquifer]
    type = PorousFlowPermeabilityConst
    block = aquifer
    permeability = '1.7E-15 0 0   0 1.7E-15 0   0 0 4.1E-16'
  []
  [thermal_conductivity]
    type = PorousFlowThermalConductivityIdeal
    dry_thermal_conductivity = '0 0 0  0 0 0  0 0 0'
  []
  [rock_heat]
    type = PorousFlowMatrixInternalEnergy
    density = 2500.0
    specific_heat_capacity = 1200.0
  []
[]
[Preconditioning]
  active = typically_efficient
  [typically_efficient]
    type = SMP
    full = true
    petsc_options_iname = '-pc_type -pc_hypre_type'
    petsc_options_value = ' hypre    boomeramg'
  []
  [strong]
    type = SMP
    full = true
    petsc_options = '-ksp_diagonal_scale -ksp_diagonal_scale_fix'
    petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
    petsc_options_value = ' asm      ilu           NONZERO                   2'
  []
  [probably_too_strong]
    type = SMP
    full = true
    petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
    petsc_options_value = ' lu       mumps'
  []
[]
[Executioner]
  type = Transient
  solve_type = Newton
  end_time = 7.76E6 # 90 days
  [TimeStepper]
    type = FunctionDT
    function = 'min(3E4, max(1E4, 0.2 * t))'
  []
[]
[Outputs]
  exodus = true
[]
[Variables]
  [f_H]
    initial_condition = -2.952985071156e-06
  []
  [f_Cl]
    initial_condition = 0.04870664551708
  []
  [f_SO4]
    initial_condition = 0.0060359986852517
  []
  [f_HCO3]
    initial_condition = 5.0897287594019e-05
  []
  [f_SiO2aq]
    initial_condition = 3.0246609868421e-05
  []
  [f_Al]
    initial_condition = 3.268028901929e-08
  []
  [f_Ca]
    initial_condition = 0.00082159428184586
  []
  [f_Mg]
    initial_condition = 1.8546347062146e-05
  []
  [f_Fe]
    initial_condition = 4.3291908204093e-05
  []
  [f_K]
    initial_condition = 6.8434768308898e-05
  []
  [f_Na]
    initial_condition = 0.033298053919671
  []
  [f_Sr]
    initial_condition = 1.2771866652177e-05
  []
  [f_F]
    initial_condition = 5.5648860174073e-06
  []
  [f_BOH]
    initial_condition = 0.0003758574621917
  []
  [f_Br]
    initial_condition = 9.0315286107068e-05
  []
  [f_Ba]
    initial_condition = 1.5637460875161e-07
  []
  [f_Li]
    initial_condition = 8.3017067912701e-05
  []
  [f_NO3]
    initial_condition = 0.00010958455036169
  []
  [f_O2aq]
    initial_condition = -7.0806852373351e-05
  []
  [porepressure]
    initial_condition = 30E6
  []
  [temperature]
    initial_condition = 92
    scaling = 1E-6 # fluid enthalpy is roughly 1E6
  []
[]
[DiracKernels]
  [inject_H]
    type = PorousFlowPolyLineSink
    SumQuantityUO = injected_mass
    fluxes = ${injection_rate}
    p_or_t_vals = 0.0
    multiplying_var = injection_rate_massfrac_H
    point_file = injection.bh
    variable = f_H
  []
  [inject_Cl]
    type = PorousFlowPolyLineSink
    SumQuantityUO = injected_mass
    fluxes = ${injection_rate}
    p_or_t_vals = 0.0
    multiplying_var = injection_rate_massfrac_Cl
    point_file = injection.bh
    variable = f_Cl
  []
  [inject_SO4]
    type = PorousFlowPolyLineSink
    SumQuantityUO = injected_mass
    fluxes = ${injection_rate}
    p_or_t_vals = 0.0
    multiplying_var = injection_rate_massfrac_SO4
    point_file = injection.bh
    variable = f_SO4
  []
  [inject_HCO3]
    type = PorousFlowPolyLineSink
    SumQuantityUO = injected_mass
    fluxes = ${injection_rate}
    p_or_t_vals = 0.0
    multiplying_var = injection_rate_massfrac_HCO3
    point_file = injection.bh
    variable = f_HCO3
  []
  [inject_SiO2aq]
    type = PorousFlowPolyLineSink
    SumQuantityUO = injected_mass
    fluxes = ${injection_rate}
    p_or_t_vals = 0.0
    multiplying_var = injection_rate_massfrac_SiO2aq
    point_file = injection.bh
    variable = f_SiO2aq
  []
  [inject_Al]
    type = PorousFlowPolyLineSink
    SumQuantityUO = injected_mass
    fluxes = ${injection_rate}
    p_or_t_vals = 0.0
    multiplying_var = injection_rate_massfrac_Al
    point_file = injection.bh
    variable = f_Al
  []
  [inject_Ca]
    type = PorousFlowPolyLineSink
    SumQuantityUO = injected_mass
    fluxes = ${injection_rate}
    p_or_t_vals = 0.0
    multiplying_var = injection_rate_massfrac_Ca
    point_file = injection.bh
    variable = f_Ca
  []
  [inject_Mg]
    type = PorousFlowPolyLineSink
    SumQuantityUO = injected_mass
    fluxes = ${injection_rate}
    p_or_t_vals = 0.0
    multiplying_var = injection_rate_massfrac_Mg
    point_file = injection.bh
    variable = f_Mg
  []
  [inject_Fe]
    type = PorousFlowPolyLineSink
    SumQuantityUO = injected_mass
    fluxes = ${injection_rate}
    p_or_t_vals = 0.0
    multiplying_var = injection_rate_massfrac_Fe
    point_file = injection.bh
    variable = f_Fe
  []
  [inject_K]
    type = PorousFlowPolyLineSink
    SumQuantityUO = injected_mass
    fluxes = ${injection_rate}
    p_or_t_vals = 0.0
    multiplying_var = injection_rate_massfrac_K
    point_file = injection.bh
    variable = f_K
  []
  [inject_Na]
    type = PorousFlowPolyLineSink
    SumQuantityUO = injected_mass
    fluxes = ${injection_rate}
    p_or_t_vals = 0.0
    multiplying_var = injection_rate_massfrac_Na
    point_file = injection.bh
    variable = f_Na
  []
  [inject_Sr]
    type = PorousFlowPolyLineSink
    SumQuantityUO = injected_mass
    fluxes = ${injection_rate}
    p_or_t_vals = 0.0
    multiplying_var = injection_rate_massfrac_Sr
    point_file = injection.bh
    variable = f_Sr
  []
  [inject_F]
    type = PorousFlowPolyLineSink
    SumQuantityUO = injected_mass
    fluxes = ${injection_rate}
    p_or_t_vals = 0.0
    multiplying_var = injection_rate_massfrac_F
    point_file = injection.bh
    variable = f_F
  []
  [inject_BOH]
    type = PorousFlowPolyLineSink
    SumQuantityUO = injected_mass
    fluxes = ${injection_rate}
    p_or_t_vals = 0.0
    multiplying_var = injection_rate_massfrac_BOH
    point_file = injection.bh
    variable = f_BOH
  []
  [inject_Br]
    type = PorousFlowPolyLineSink
    SumQuantityUO = injected_mass
    fluxes = ${injection_rate}
    p_or_t_vals = 0.0
    multiplying_var = injection_rate_massfrac_Br
    point_file = injection.bh
    variable = f_Br
  []
  [inject_Ba]
    type = PorousFlowPolyLineSink
    SumQuantityUO = injected_mass
    fluxes = ${injection_rate}
    p_or_t_vals = 0.0
    multiplying_var = injection_rate_massfrac_Ba
    point_file = injection.bh
    variable = f_Ba
  []
  [inject_Li]
    type = PorousFlowPolyLineSink
    SumQuantityUO = injected_mass
    fluxes = ${injection_rate}
    p_or_t_vals = 0.0
    multiplying_var = injection_rate_massfrac_Li
    point_file = injection.bh
    variable = f_Li
  []
  [inject_NO3]
    type = PorousFlowPolyLineSink
    SumQuantityUO = injected_mass
    fluxes = ${injection_rate}
    p_or_t_vals = 0.0
    multiplying_var = injection_rate_massfrac_NO3
    point_file = injection.bh
    variable = f_NO3
  []
  [inject_O2aq]
    type = PorousFlowPolyLineSink
    SumQuantityUO = injected_mass
    fluxes = ${injection_rate}
    p_or_t_vals = 0.0
    multiplying_var = injection_rate_massfrac_O2aq
    point_file = injection.bh
    variable = f_O2aq
  []
  [inject_H2O]
    type = PorousFlowPolyLineSink
    SumQuantityUO = injected_mass
    fluxes = ${injection_rate}
    p_or_t_vals = 0.0
    multiplying_var = injection_rate_massfrac_H2O
    point_file = injection.bh
    variable = porepressure
  []
  [produce_H]
    type = PorousFlowPolyLineSink
    SumQuantityUO = produced_mass_H
    fluxes = ${production_rate}
    p_or_t_vals = 0.0
    mass_fraction_component = 0
    point_file = production.bh
    variable = f_H
  []
  [produce_Cl]
    type = PorousFlowPolyLineSink
    SumQuantityUO = produced_mass_Cl
    fluxes = ${production_rate}
    p_or_t_vals = 0.0
    mass_fraction_component = 1
    point_file = production.bh
    variable = f_Cl
  []
  [produce_SO4]
    type = PorousFlowPolyLineSink
    SumQuantityUO = produced_mass_SO4
    fluxes = ${production_rate}
    p_or_t_vals = 0.0
    mass_fraction_component = 2
    point_file = production.bh
    variable = f_SO4
  []
  [produce_HCO3]
    type = PorousFlowPolyLineSink
    SumQuantityUO = produced_mass_HCO3
    fluxes = ${production_rate}
    p_or_t_vals = 0.0
    mass_fraction_component = 3
    point_file = production.bh
    variable = f_HCO3
  []
  [produce_SiO2aq]
    type = PorousFlowPolyLineSink
    SumQuantityUO = produced_mass_SiO2aq
    fluxes = ${production_rate}
    p_or_t_vals = 0.0
    mass_fraction_component = 4
    point_file = production.bh
    variable = f_SiO2aq
  []
  [produce_Al]
    type = PorousFlowPolyLineSink
    SumQuantityUO = produced_mass_Al
    fluxes = ${production_rate}
    p_or_t_vals = 0.0
    mass_fraction_component = 5
    point_file = production.bh
    variable = f_Al
  []
  [produce_Ca]
    type = PorousFlowPolyLineSink
    SumQuantityUO = produced_mass_Ca
    fluxes = ${production_rate}
    p_or_t_vals = 0.0
    mass_fraction_component = 6
    point_file = production.bh
    variable = f_Ca
  []
  [produce_Mg]
    type = PorousFlowPolyLineSink
    SumQuantityUO = produced_mass_Mg
    fluxes = ${production_rate}
    p_or_t_vals = 0.0
    mass_fraction_component = 7
    point_file = production.bh
    variable = f_Mg
  []
  [produce_Fe]
    type = PorousFlowPolyLineSink
    SumQuantityUO = produced_mass_Fe
    fluxes = ${production_rate}
    p_or_t_vals = 0.0
    mass_fraction_component = 8
    point_file = production.bh
    variable = f_Fe
  []
  [produce_K]
    type = PorousFlowPolyLineSink
    SumQuantityUO = produced_mass_K
    fluxes = ${production_rate}
    p_or_t_vals = 0.0
    mass_fraction_component = 9
    point_file = production.bh
    variable = f_K
  []
  [produce_Na]
    type = PorousFlowPolyLineSink
    SumQuantityUO = produced_mass_Na
    fluxes = ${production_rate}
    p_or_t_vals = 0.0
    mass_fraction_component = 10
    point_file = production.bh
    variable = f_Na
  []
  [produce_Sr]
    type = PorousFlowPolyLineSink
    SumQuantityUO = produced_mass_Sr
    fluxes = ${production_rate}
    p_or_t_vals = 0.0
    mass_fraction_component = 11
    point_file = production.bh
    variable = f_Sr
  []
  [produce_F]
    type = PorousFlowPolyLineSink
    SumQuantityUO = produced_mass_F
    fluxes = ${production_rate}
    p_or_t_vals = 0.0
    mass_fraction_component = 12
    point_file = production.bh
    variable = f_F
  []
  [produce_BOH]
    type = PorousFlowPolyLineSink
    SumQuantityUO = produced_mass_BOH
    fluxes = ${production_rate}
    p_or_t_vals = 0.0
    mass_fraction_component = 13
    point_file = production.bh
    variable = f_BOH
  []
  [produce_Br]
    type = PorousFlowPolyLineSink
    SumQuantityUO = produced_mass_Br
    fluxes = ${production_rate}
    p_or_t_vals = 0.0
    mass_fraction_component = 14
    point_file = production.bh
    variable = f_Br
  []
  [produce_Ba]
    type = PorousFlowPolyLineSink
    SumQuantityUO = produced_mass_Ba
    fluxes = ${production_rate}
    p_or_t_vals = 0.0
    mass_fraction_component = 15
    point_file = production.bh
    variable = f_Ba
  []
  [produce_Li]
    type = PorousFlowPolyLineSink
    SumQuantityUO = produced_mass_Li
    fluxes = ${production_rate}
    p_or_t_vals = 0.0
    mass_fraction_component = 16
    point_file = production.bh
    variable = f_Li
  []
  [produce_NO3]
    type = PorousFlowPolyLineSink
    SumQuantityUO = produced_mass_NO3
    fluxes = ${production_rate}
    p_or_t_vals = 0.0
    mass_fraction_component = 17
    point_file = production.bh
    variable = f_NO3
  []
  [produce_O2aq]
    type = PorousFlowPolyLineSink
    SumQuantityUO = produced_mass_O2aq
    fluxes = ${production_rate}
    p_or_t_vals = 0.0
    mass_fraction_component = 18
    point_file = production.bh
    variable = f_O2aq
  []
  [produce_H2O]
    type = PorousFlowPolyLineSink
    SumQuantityUO = produced_mass_H2O
    fluxes = ${production_rate}
    p_or_t_vals = 0.0
    mass_fraction_component = 19
    point_file = production.bh
    variable = porepressure
  []
  [produce_heat]
    type = PorousFlowPolyLineSink
    SumQuantityUO = produced_heat
    fluxes = ${production_rate}
    p_or_t_vals = 0.0
    use_enthalpy = true
    point_file = production.bh
    variable = temperature
  []
[]
[UserObjects]
  [injected_mass]
    type = PorousFlowSumQuantity
  []
  [produced_mass_H]
    type = PorousFlowSumQuantity
  []
  [produced_mass_Cl]
    type = PorousFlowSumQuantity
  []
  [produced_mass_SO4]
    type = PorousFlowSumQuantity
  []
  [produced_mass_HCO3]
    type = PorousFlowSumQuantity
  []
  [produced_mass_SiO2aq]
    type = PorousFlowSumQuantity
  []
  [produced_mass_Al]
    type = PorousFlowSumQuantity
  []
  [produced_mass_Ca]
    type = PorousFlowSumQuantity
  []
  [produced_mass_Mg]
    type = PorousFlowSumQuantity
  []
  [produced_mass_Fe]
    type = PorousFlowSumQuantity
  []
  [produced_mass_K]
    type = PorousFlowSumQuantity
  []
  [produced_mass_Na]
    type = PorousFlowSumQuantity
  []
  [produced_mass_Sr]
    type = PorousFlowSumQuantity
  []
  [produced_mass_F]
    type = PorousFlowSumQuantity
  []
  [produced_mass_BOH]
    type = PorousFlowSumQuantity
  []
  [produced_mass_Br]
    type = PorousFlowSumQuantity
  []
  [produced_mass_Ba]
    type = PorousFlowSumQuantity
  []
  [produced_mass_Li]
    type = PorousFlowSumQuantity
  []
  [produced_mass_NO3]
    type = PorousFlowSumQuantity
  []
  [produced_mass_O2aq]
    type = PorousFlowSumQuantity
  []
  [produced_mass_H2O]
    type = PorousFlowSumQuantity
  []
  [produced_heat]
    type = PorousFlowSumQuantity
  []
[]
[Postprocessors]
  [dt]
    type = TimestepSize
    execute_on = TIMESTEP_BEGIN
  []
  [tot_kg_injected_this_timestep]
    type = PorousFlowPlotQuantity
    uo = injected_mass
  []
  [kg_H_produced_this_timestep]
    type = PorousFlowPlotQuantity
    uo = produced_mass_H
  []
  [kg_Cl_produced_this_timestep]
    type = PorousFlowPlotQuantity
    uo = produced_mass_Cl
  []
  [kg_SO4_produced_this_timestep]
    type = PorousFlowPlotQuantity
    uo = produced_mass_SO4
  []
  [kg_HCO3_produced_this_timestep]
    type = PorousFlowPlotQuantity
    uo = produced_mass_HCO3
  []
  [kg_SiO2aq_produced_this_timestep]
    type = PorousFlowPlotQuantity
    uo = produced_mass_SiO2aq
  []
  [kg_Al_produced_this_timestep]
    type = PorousFlowPlotQuantity
    uo = produced_mass_Al
  []
  [kg_Ca_produced_this_timestep]
    type = PorousFlowPlotQuantity
    uo = produced_mass_Ca
  []
  [kg_Mg_produced_this_timestep]
    type = PorousFlowPlotQuantity
    uo = produced_mass_Mg
  []
  [kg_Fe_produced_this_timestep]
    type = PorousFlowPlotQuantity
    uo = produced_mass_Fe
  []
  [kg_K_produced_this_timestep]
    type = PorousFlowPlotQuantity
    uo = produced_mass_K
  []
  [kg_Na_produced_this_timestep]
    type = PorousFlowPlotQuantity
    uo = produced_mass_Na
  []
  [kg_Sr_produced_this_timestep]
    type = PorousFlowPlotQuantity
    uo = produced_mass_Sr
  []
  [kg_F_produced_this_timestep]
    type = PorousFlowPlotQuantity
    uo = produced_mass_F
  []
  [kg_BOH_produced_this_timestep]
    type = PorousFlowPlotQuantity
    uo = produced_mass_BOH
  []
  [kg_Br_produced_this_timestep]
    type = PorousFlowPlotQuantity
    uo = produced_mass_Br
  []
  [kg_Ba_produced_this_timestep]
    type = PorousFlowPlotQuantity
    uo = produced_mass_Ba
  []
  [kg_Li_produced_this_timestep]
    type = PorousFlowPlotQuantity
    uo = produced_mass_Li
  []
  [kg_NO3_produced_this_timestep]
    type = PorousFlowPlotQuantity
    uo = produced_mass_NO3
  []
  [kg_O2aq_produced_this_timestep]
    type = PorousFlowPlotQuantity
    uo = produced_mass_O2aq
  []
  [kg_H2O_produced_this_timestep]
    type = PorousFlowPlotQuantity
    uo = produced_mass_H2O
  []
  [mole_rate_H_produced]
    type = FunctionValuePostprocessor
    function = moles_H
  []
  [mole_rate_Cl_produced]
    type = FunctionValuePostprocessor
    function = moles_Cl
  []
  [mole_rate_SO4_produced]
    type = FunctionValuePostprocessor
    function = moles_SO4
  []
  [mole_rate_HCO3_produced]
    type = FunctionValuePostprocessor
    function = moles_HCO3
  []
  [mole_rate_SiO2aq_produced]
    type = FunctionValuePostprocessor
    function = moles_SiO2aq
  []
  [mole_rate_Al_produced]
    type = FunctionValuePostprocessor
    function = moles_Al
  []
  [mole_rate_Ca_produced]
    type = FunctionValuePostprocessor
    function = moles_Ca
  []
  [mole_rate_Mg_produced]
    type = FunctionValuePostprocessor
    function = moles_Mg
  []
  [mole_rate_Fe_produced]
    type = FunctionValuePostprocessor
    function = moles_Fe
  []
  [mole_rate_K_produced]
    type = FunctionValuePostprocessor
    function = moles_K
  []
  [mole_rate_Na_produced]
    type = FunctionValuePostprocessor
    function = moles_Na
  []
  [mole_rate_Sr_produced]
    type = FunctionValuePostprocessor
    function = moles_Sr
  []
  [mole_rate_F_produced]
    type = FunctionValuePostprocessor
    function = moles_F
  []
  [mole_rate_BOH_produced]
    type = FunctionValuePostprocessor
    function = moles_BOH
  []
  [mole_rate_Br_produced]
    type = FunctionValuePostprocessor
    function = moles_Br
  []
  [mole_rate_Ba_produced]
    type = FunctionValuePostprocessor
    function = moles_Ba
  []
  [mole_rate_Li_produced]
    type = FunctionValuePostprocessor
    function = moles_Li
  []
  [mole_rate_NO3_produced]
    type = FunctionValuePostprocessor
    function = moles_NO3
  []
  [mole_rate_O2aq_produced]
    type = FunctionValuePostprocessor
    function = moles_O2aq
  []
  [mole_rate_H2O_produced]
    type = FunctionValuePostprocessor
    function = moles_H2O
  []
  [heat_joules_extracted_this_timestep]
    type = PorousFlowPlotQuantity
    uo = produced_heat
  []
  [production_temperature]
    type = AverageNodalVariableValue
    boundary = production_nodes
    variable = temperature
  []
[]
[Functions]
  [moles_H]
    type = ParsedFunction
    vars = 'kg_H dt'
    vals = 'kg_H_produced_this_timestep dt'
    value = 'kg_H * 1000 / 1.0079 / dt'
  []
  [moles_Cl]
    type = ParsedFunction
    vars = 'kg_Cl dt'
    vals = 'kg_Cl_produced_this_timestep dt'
    value = 'kg_Cl * 1000 / 35.453 / dt'
  []
  [moles_SO4]
    type = ParsedFunction
    vars = 'kg_SO4 dt'
    vals = 'kg_SO4_produced_this_timestep dt'
    value = 'kg_SO4 * 1000 / 96.0576 / dt'
  []
  [moles_HCO3]
    type = ParsedFunction
    vars = 'kg_HCO3 dt'
    vals = 'kg_HCO3_produced_this_timestep dt'
    value = 'kg_HCO3 * 1000 / 61.0171 / dt'
  []
  [moles_SiO2aq]
    type = ParsedFunction
    vars = 'kg_SiO2aq dt'
    vals = 'kg_SiO2aq_produced_this_timestep dt'
    value = 'kg_SiO2aq * 1000 / 60.0843 / dt'
  []
  [moles_Al]
    type = ParsedFunction
    vars = 'kg_Al dt'
    vals = 'kg_Al_produced_this_timestep dt'
    value = 'kg_Al * 1000 / 26.9815 / dt'
  []
  [moles_Ca]
    type = ParsedFunction
    vars = 'kg_Ca dt'
    vals = 'kg_Ca_produced_this_timestep dt'
    value = 'kg_Ca * 1000 / 40.08 / dt'
  []
  [moles_Mg]
    type = ParsedFunction
    vars = 'kg_Mg dt'
    vals = 'kg_Mg_produced_this_timestep dt'
    value = 'kg_Mg * 1000 / 24.305 / dt'
  []
  [moles_Fe]
    type = ParsedFunction
    vars = 'kg_Fe dt'
    vals = 'kg_Fe_produced_this_timestep dt'
    value = 'kg_Fe * 1000 / 55.847 / dt'
  []
  [moles_K]
    type = ParsedFunction
    vars = 'kg_K dt'
    vals = 'kg_K_produced_this_timestep dt'
    value = 'kg_K * 1000 / 39.0983 / dt'
  []
  [moles_Na]
    type = ParsedFunction
    vars = 'kg_Na dt'
    vals = 'kg_Na_produced_this_timestep dt'
    value = 'kg_Na * 1000 / 22.9898 / dt'
  []
  [moles_Sr]
    type = ParsedFunction
    vars = 'kg_Sr dt'
    vals = 'kg_Sr_produced_this_timestep dt'
    value = 'kg_Sr * 1000 / 87.62 / dt'
  []
  [moles_F]
    type = ParsedFunction
    vars = 'kg_F dt'
    vals = 'kg_F_produced_this_timestep dt'
    value = 'kg_F * 1000 / 18.9984 / dt'
  []
  [moles_BOH]
    type = ParsedFunction
    vars = 'kg_BOH dt'
    vals = 'kg_BOH_produced_this_timestep dt'
    value = 'kg_BOH * 1000 / 61.8329 / dt'
  []
  [moles_Br]
    type = ParsedFunction
    vars = 'kg_Br dt'
    vals = 'kg_Br_produced_this_timestep dt'
    value = 'kg_Br * 1000 / 79.904 / dt'
  []
  [moles_Ba]
    type = ParsedFunction
    vars = 'kg_Ba dt'
    vals = 'kg_Ba_produced_this_timestep dt'
    value = 'kg_Ba * 1000 / 137.33 / dt'
  []
  [moles_Li]
    type = ParsedFunction
    vars = 'kg_Li dt'
    vals = 'kg_Li_produced_this_timestep dt'
    value = 'kg_Li * 1000 / 6.941 / dt'
  []
  [moles_NO3]
    type = ParsedFunction
    vars = 'kg_NO3 dt'
    vals = 'kg_NO3_produced_this_timestep dt'
    value = 'kg_NO3 * 1000 / 62.0049 / dt'
  []
  [moles_O2aq]
    type = ParsedFunction
    vars = 'kg_O2aq dt'
    vals = 'kg_O2aq_produced_this_timestep dt'
    value = 'kg_O2aq * 1000 / 31.9988 / dt'
  []
  [moles_H2O]
    type = ParsedFunction
    vars = 'kg_H2O dt'
    vals = 'kg_H2O_produced_this_timestep dt'
    value = 'kg_H2O * 1000 / 18.01801802 / dt'
  []
[]
[AuxVariables]
  [injection_temperature]
    initial_condition = 92
  []
  [injection_rate_massfrac_H]
    initial_condition = -2.952985071156e-06
  []
  [injection_rate_massfrac_Cl]
    initial_condition = 0.04870664551708
  []
  [injection_rate_massfrac_SO4]
    initial_condition = 0.0060359986852517
  []
  [injection_rate_massfrac_HCO3]
    initial_condition = 5.0897287594019e-05
  []
  [injection_rate_massfrac_SiO2aq]
    initial_condition = 3.0246609868421e-05
  []
  [injection_rate_massfrac_Al]
    initial_condition = 3.268028901929e-08
  []
  [injection_rate_massfrac_Ca]
    initial_condition = 0.00082159428184586
  []
  [injection_rate_massfrac_Mg]
    initial_condition = 1.8546347062146e-05
  []
  [injection_rate_massfrac_Fe]
    initial_condition = 4.3291908204093e-05
  []
  [injection_rate_massfrac_K]
    initial_condition = 6.8434768308898e-05
  []
  [injection_rate_massfrac_Na]
    initial_condition = 0.033298053919671
  []
  [injection_rate_massfrac_Sr]
    initial_condition = 1.2771866652177e-05
  []
  [injection_rate_massfrac_F]
    initial_condition = 5.5648860174073e-06
  []
  [injection_rate_massfrac_BOH]
    initial_condition = 0.0003758574621917
  []
  [injection_rate_massfrac_Br]
    initial_condition = 9.0315286107068e-05
  []
  [injection_rate_massfrac_Ba]
    initial_condition = 1.5637460875161e-07
  []
  [injection_rate_massfrac_Li]
    initial_condition = 8.3017067912701e-05
  []
  [injection_rate_massfrac_NO3]
    initial_condition = 0.00010958455036169
  []
  [injection_rate_massfrac_O2aq]
    initial_condition = -7.0806852373351e-05
  []
  [injection_rate_massfrac_H2O]
    initial_condition = 0.91032275033842
  []
  [rate_H]
  []
  [rate_Cl]
  []
  [rate_SO4]
  []
  [rate_HCO3]
  []
  [rate_SiO2aq]
  []
  [rate_Al]
  []
  [rate_Ca]
  []
  [rate_Mg]
  []
  [rate_Fe]
  []
  [rate_K]
  []
  [rate_Na]
  []
  [rate_Sr]
  []
  [rate_F]
  []
  [rate_BOH]
  []
  [rate_Br]
  []
  [rate_Ba]
  []
  [rate_Li]
  []
  [rate_NO3]
  []
  [rate_O2aq]
  []
  [rate_H2O]
  []
[]
[MultiApps]
  [react]
    type = TransientMultiApp
    input_files = aquifer_geochemistry.i
    clone_master_mesh = true
    execute_on = 'timestep_end'
  []
[]
[Transfers]
  [changes_due_to_flow]
    type = MultiAppCopyTransfer
    direction = to_multiapp
    source_variable = 'rate_H rate_Cl rate_SO4 rate_HCO3 rate_SiO2aq rate_Al rate_Ca rate_Mg rate_Fe rate_K rate_Na rate_Sr rate_F rate_BOH rate_Br rate_Ba rate_Li rate_NO3 rate_O2aq rate_H2O temperature'
    variable = 'pf_rate_H pf_rate_Cl pf_rate_SO4 pf_rate_HCO3 pf_rate_SiO2aq pf_rate_Al pf_rate_Ca pf_rate_Mg pf_rate_Fe pf_rate_K pf_rate_Na pf_rate_Sr pf_rate_F pf_rate_BOH pf_rate_Br pf_rate_Ba pf_rate_Li pf_rate_NO3 pf_rate_O2aq pf_rate_H2O temperature'
    multi_app = react
  []
  [massfrac_from_geochem]
    type = MultiAppCopyTransfer
    direction = from_multiapp
    source_variable = 'massfrac_H massfrac_Cl massfrac_SO4 massfrac_HCO3 massfrac_SiO2aq massfrac_Al massfrac_Ca massfrac_Mg massfrac_Fe massfrac_K massfrac_Na massfrac_Sr massfrac_F massfrac_BOH massfrac_Br massfrac_Ba massfrac_Li massfrac_NO3 massfrac_O2aq '
    variable = 'f_H f_Cl f_SO4 f_HCO3 f_SiO2aq f_Al f_Ca f_Mg f_Fe f_K f_Na f_Sr f_F f_BOH f_Br f_Ba f_Li f_NO3 f_O2aq '
    multi_app = react
  []
[]
(test/tests/mesh_modifiers/parsed_subdomain/parsed_subdomain_mm.i)
[Mesh]
  uniform_refine = 2
  [gen]
    type = GeneratedMeshGenerator
    dim = 2
    nx = 10
    ny = 10
    xmax = 1
    ymax = 1
  []
  [subdomains]
    type = ParsedSubdomainMeshGenerator
    input = gen
    combinatorial_geometry = 'x > 0.1 & x < 0.9 & y > 0.1 & y < 0.9'
    block_id = 1
  []
  [subdomains2]
    type = ParsedSubdomainMeshGenerator
    input = subdomains
    combinatorial_geometry = 'x < 0.5 & y < 0.5'
    excluded_subdomain_ids = '0'
    block_id = 2
  []
[]
# This input file is intended to be run with the "--mesh-only" option so
# no other sections are required
(modules/ray_tracing/test/tests/raybcs/reflect_ray_bc/reflect_ray_bc_nonplanar.i)
[Mesh]
  [file]
    type = FileMeshGenerator
    file = nonplanar.e
  []
  [subdomains]
    type = ParsedSubdomainMeshGenerator
    input = file
    combinatorial_geometry = 'x > 0.5'
    block_id = 1
  []
  [internal_sideset]
    type = SideSetsBetweenSubdomainsGenerator
    input = subdomains
    primary_block = 0
    paired_block = 1
    new_boundary = internal
  []
[]
[UserObjects/study]
  type = RepeatableRayStudy
  start_points = '0 0 0'
  directions = '1 1 1'
  names = 'ray'
  warn_non_planar = false
  use_internal_sidesets = true
  execute_on = initial
  tolerate_failure = true
[]
[RayBCs]
  [kill]
    type = KillRayBC
    boundary = 'top right bottom left front back'
  []
  [reflect_internal]
    type = ReflectRayBC
    boundary = internal
  []
[]
[RayKernels/null]
  type = NullRayKernel
[]
[Executioner]
  type = Steady
[]
[Problem]
  solve = false
[]
(test/tests/meshgenerators/parsed_subdomain_mesh_generator/parsed_subdomain_mg.i)
[Mesh]
  [./gmg]
    type = GeneratedMeshGenerator
    dim = 2
    nx = 10
    ny = 10
    xmax = 1
    ymax = 1
    uniform_refine = 2
  []
  [./subdomains]
    type = ParsedSubdomainMeshGenerator
    input = gmg
    combinatorial_geometry = 'x > 0.1 & x < 0.9 & y > 0.1 & y < 0.9'
    block_id = 1
  []
  [./subdomains2]
    type = ParsedSubdomainMeshGenerator
    combinatorial_geometry = 'x < 0.5 & y < 0.5'
    excluded_subdomain_ids = '0'
    block_id = 2
    input = subdomains
  []
[]
[Outputs]
  exodus = true
[]
(test/tests/mesh_modifiers/parsed_sideset/parsed_sideset.i)
[Mesh]
  [gen]
    type = GeneratedMeshGenerator
    dim = 3
    nx = 3
    ny = 3
    nz = 3
    xmax = 3
    ymax = 3
    zmax = 3
  []
  [subdomains]
    type = ParsedSubdomainMeshGenerator
    input = gen
    combinatorial_geometry = 'x < 1 & y > 1 & y < 2'
    block_id = 1
  []
  [sideset]
    type = ParsedGenerateSideset
    input = subdomains
    combinatorial_geometry = 'z < 1'
    included_subdomain_ids = '1'
    normal = '1 0 0'
    new_sideset_name = interior
  []
[]
# This input file is intended to be run with the "--mesh-only" option so
# no other sections are required
(test/tests/meshgenerators/parsed_generate_sideset/parsed_generate_sideset.i)
[Mesh]
  [./gmg]
    type = GeneratedMeshGenerator
    dim = 3
    nx = 3
    ny = 3
    nz = 3
    xmax = 3
    ymax = 3
    zmax = 3
  []
  [./subdomains]
    type = ParsedSubdomainMeshGenerator
    input = gmg
    combinatorial_geometry = 'x < 1 & y > 1 & y < 2'
    block_id = 1
  []
  [./sideset]
    type = ParsedGenerateSideset
    input = subdomains
    combinatorial_geometry = 'z < 1'
    included_subdomain_ids = '1'
    normal = '1 0 0'
    new_sideset_name = interior
  []
[]
[Outputs]
  exodus = true
[]
(test/tests/meshgenerators/show_info/show_info.i)
[Mesh]
  [gmg_quad]
    type = GeneratedMeshGenerator
    dim = 2
    nx = 4
    ny = 4
    show_info = true
  []
  [gmg_quad_block1]
    type = ParsedSubdomainMeshGenerator
    input = gmg_quad
    combinatorial_geometry = 'x > 0.5'
    block_name = 'dummy'
    block_id = 1
    show_info = true
  []
  [gmg_tri]
    type = GeneratedMeshGenerator
    dim = 2
    nx = 4
    ny = 4
    elem_type = TRI3
    show_info = true
  []
  [gmg_tri_block2]
    type = ParsedSubdomainMeshGenerator
    input = gmg_tri
    combinatorial_geometry = 'y > 0.5'
    block_id = 2
    block_name = 'dummy2'
    show_info = true
  []
  [gmg_tri_block3]
    type = ParsedSubdomainMeshGenerator
    input = gmg_tri_block2
    combinatorial_geometry = 'y < 0.5'
    block_id = 3
    block_name = 'dummy3'
    show_info = true
  []
  [pmg]
    type = PatternedMeshGenerator
    inputs = 'gmg_quad_block1 gmg_tri_block3'
    pattern = '0 1 0;
               1 1 0'
    show_info = true
  []
  [interior]
    type = ParsedGenerateSideset
    input = pmg
    combinatorial_geometry = 'x > 0.99 & x < 1.01'
    normal = '1 0 0'
    new_sideset_name = interior
    show_info = true
  []
[]
(modules/stochastic_tools/test/tests/transfers/sampler_transfer_vector/sub.i)
[Mesh]
  [gmg]
    type = GeneratedMeshGenerator
    dim = 1
    nx = 10
  []
  # Give the far left element a block so that we can
  # grab its value
  [left_elem_block]
    type = ParsedSubdomainMeshGenerator
    input = gmg
    combinatorial_geometry = 'x < 0.1'
    block_id = 1
  []
[]
[Variables]
  [u]
  []
[]
[AuxVariables]
  [prop_a]
    family = MONOMIAL
    order = CONSTANT
  []
  [prop_b]
    family = MONOMIAL
    order = CONSTANT
  []
[]
[AuxKernels]
  [prop_a]
    type = MaterialRealAux
    variable = prop_a
    property = prop_a
  []
  [prop_b]
    type = MaterialRealAux
    variable = prop_b
    property = prop_b
  []
[]
[Kernels]
  [diff]
    type = Diffusion
    variable = u
  []
  [time]
    type = TimeDerivative
    variable = u
  []
[]
[BCs]
  [left]
    type = DirichletBC
    variable = u
    boundary = left
    value = 0
  []
  [right]
    type = DirichletBC
    variable = u
    boundary = right
    value = 1
  []
[]
[Executioner]
  type = Transient
  num_steps = 5
  dt = 0.01
  solve_type = PJFNK
  petsc_options_iname = '-pc_type -pc_hypre_type'
  petsc_options_value = 'hypre boomeramg'
[]
[Materials]
  [mat]
    type = GenericConstantMaterial
    prop_names = 'prop_a prop_b'
    prop_values = '100    200'
  []
  [mat2]
    type = GenericConstantMaterial
    prop_names = 'prop_c prop_d prop_e'
    prop_values = '300    400    500'
  []
[]
[Controls]
  [stochastic]
    type = SamplerReceiver
  []
[]
[Postprocessors]
  [left_bc]
    type = PointValue
    point = '0 0 0'
    variable = u
  []
  [right_bc]
    type = PointValue
    point = '1 0 0'
    variable = u
  []
  [prop_a]
    type = ElementAverageValue
    variable = prop_a
    block = 1
  []
  [prop_b]
    type = ElementAverageValue
    variable = prop_b
    block = 1
  []
[]
[Outputs]
  csv = true
[]
(modules/ray_tracing/test/tests/userobjects/ray_tracing_study/multiple_subdomains/multiple_subdomains.i)
[Mesh]
  [gmg]
    type = GeneratedMeshGenerator
    dim = 2
    nx = 3
    ny = 5
    xmax = 3
    ymax = 5
  []
  [subdomain1]
    type = ParsedSubdomainMeshGenerator
    input = gmg
    combinatorial_geometry = 'x > 1 & x < 2'
    block_id = 1
  []
  [subdomain2]
    type = ParsedSubdomainMeshGenerator
    input = subdomain1
    combinatorial_geometry = 'x > 2'
    block_id = 2
  []
[]
[AuxVariables/aux]
  order = CONSTANT
  family = MONOMIAL
[]
[RayKernels]
  [aux0] # add the value of 1 to aux for all Rays that pass through block 0
    type = FunctionAuxRayKernelTest
    variable = aux
    function = 1
    block = 0
  []
  [aux1] # add the value of 2 to aux for all Rays that pass through block 1
    type = FunctionAuxRayKernelTest
    variable = aux
    function = 2
    block = 1
  []
  [aux2] # add the value of 3 to aux for all Rays that pass through block 2
    type = FunctionAuxRayKernelTest
    variable = aux
    function = 3
    block = 2
  []
[]
[UserObjects/lots]
  type = LotsOfRaysRayStudy
  execute_on = initial
  vertex_to_vertex = false
  centroid_to_vertex = false
  centroid_to_centroid = true
[]
[Executioner]
  type = Steady
[]
[Problem]
  solve = false
[]
[Outputs]
  exodus = true
[]