https://mooseframework.inl.gov
Loading...
Searching...
No Matches
AddSpatialReactionSolverAction.C
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://mooseframework.inl.gov
3//*
4//* All rights reserved, see COPYRIGHT for full restrictions
5//* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6//*
7//* Licensed under LGPL 2.1, please see LICENSE for details
8//* https://www.gnu.org/licenses/lgpl-2.1.html
9
12#include "FEProblem.h"
13
14registerMooseAction("GeochemistryApp", AddSpatialReactionSolverAction, "create_problem");
15registerMooseAction("GeochemistryApp", AddSpatialReactionSolverAction, "add_output");
16registerMooseAction("GeochemistryApp", AddSpatialReactionSolverAction, "add_user_object");
17registerMooseAction("GeochemistryApp",
19 "add_geochemistry_molality_aux");
20registerMooseAction("GeochemistryApp", AddSpatialReactionSolverAction, "add_geochemistry_reactor");
21
24{
28 "Action that sets up a spatially-dependent reaction solver. This creates creates a "
29 "spatial geochemistry solver, and adds AuxVariables corresonding to the molalities, "
30 "etc");
31
32 return params;
33}
34
39
40void
42{
43 // create Output and Aux objects
45
46 // Create a "solve=false" FEProblem, if appropriate
47 if (_current_task == "create_problem")
48 {
49 const std::string class_name = "FEProblem";
50 InputParameters params = _factory.getValidParams(class_name);
51 params.set<MooseMesh *>("mesh") = _mesh.get();
52 params.set<bool>("use_nonlinear") = true;
53 params.set<bool>("solve") = getParam<bool>("include_moose_solve");
54 _problem = _factory.create<FEProblemBase>(class_name, "Problem", params);
55 _problem->setKernelCoverageCheck(getParam<bool>("include_moose_solve")
56 ? FEProblemBase::CoverageCheckMode::TRUE
57 : FEProblemBase::CoverageCheckMode::FALSE);
58 }
59 else if (_current_task == "add_geochemistry_reactor")
60 {
61 const std::string class_name = "GeochemistrySpatialReactor";
62 auto params = _factory.getValidParams(class_name);
63 // Only pass parameters that were supplied to this action
64
65 // Block and Boundary params
66 if (isParamValid("block"))
67 params.set<std::vector<SubdomainName>>("block") =
68 getParam<std::vector<SubdomainName>>("block");
69 if (isParamValid("boundary"))
70 params.set<std::vector<BoundaryName>>("boundary") =
71 getParam<std::vector<BoundaryName>>("boundary");
72
73 // GeochemistryReactorBase::sharedParams
74 if (isParamValid("swap_out_of_basis"))
75 params.set<std::vector<std::string>>("swap_out_of_basis") =
76 getParam<std::vector<std::string>>("swap_out_of_basis");
77 if (isParamValid("swap_into_basis"))
78 params.set<std::vector<std::string>>("swap_into_basis") =
79 getParam<std::vector<std::string>>("swap_into_basis");
80 params.set<MultiMooseEnum>("constraint_meaning") =
81 getParam<MultiMooseEnum>("constraint_meaning");
82 params.set<std::vector<std::string>>("constraint_species") =
83 getParam<std::vector<std::string>>("constraint_species");
84 params.set<std::vector<Real>>("constraint_value") =
85 getParam<std::vector<Real>>("constraint_value");
86 params.set<MultiMooseEnum>("constraint_unit") = getParam<MultiMooseEnum>("constraint_unit");
87 params.set<Real>("max_ionic_strength") = getParam<Real>("max_ionic_strength");
88 params.set<unsigned>("extra_iterations_to_make_consistent") =
89 getParam<unsigned>("extra_iterations_to_make_consistent");
90 params.set<std::string>("charge_balance_species") =
91 getParam<std::string>("charge_balance_species");
92 if (isParamValid("prevent_precipitation"))
93 params.set<std::vector<std::string>>("prevent_precipitation") =
94 getParam<std::vector<std::string>>("prevent_precipitation");
95 params.set<Real>("abs_tol") = getParam<Real>("abs_tol");
96 params.set<Real>("rel_tol") = getParam<Real>("rel_tol");
97 params.set<Real>("min_initial_molality") = getParam<Real>("min_initial_molality");
98 params.set<unsigned>("max_iter") = getParam<unsigned>("max_iter");
99 params.set<Real>("max_initial_residual") = getParam<Real>("max_initial_residual");
100 params.set<Real>("swap_threshold") = getParam<Real>("swap_threshold");
101 params.set<unsigned>("max_swaps_allowed") = getParam<unsigned>("max_swaps_allowed");
102 params.set<unsigned>("ramp_max_ionic_strength_initial") =
103 getParam<unsigned>("ramp_max_ionic_strength_initial");
104 params.set<bool>("ionic_str_using_basis_only") = getParam<bool>("ionic_str_using_basis_only");
105 params.set<bool>("stoichiometric_ionic_str_using_Cl_only") =
106 getParam<bool>("stoichiometric_ionic_str_using_Cl_only");
107
108 // GeochemistryReactorBase non-shared params
109 params.set<UserObjectName>("model_definition") = getParam<UserObjectName>("model_definition");
110 params.set<Real>("stoichiometry_tolerance") = getParam<Real>("stoichiometry_tolerance");
111
112 // GeochemistrySpatialReactor::sharedParams
113 params.set<unsigned>("ramp_max_ionic_strength_subsequent") =
114 getParam<unsigned>("ramp_max_ionic_strength_subsequent");
115 params.set<Real>("initial_temperature") = getParam<Real>("initial_temperature");
116 params.applySpecificParameters(parameters(), {"temperature"});
117 params.set<Real>("close_system_at_time") = getParam<Real>("close_system_at_time");
118 if (isParamValid("remove_fixed_activity_name"))
119 params.set<std::vector<std::string>>("remove_fixed_activity_name") =
120 getParam<std::vector<std::string>>("remove_fixed_activity_name");
121 if (isParamValid("remove_fixed_activity_time"))
122 params.set<std::vector<Real>>("remove_fixed_activity_time") =
123 getParam<std::vector<Real>>("remove_fixed_activity_time");
124 if (isParamValid("source_species_names"))
125 params.set<std::vector<std::string>>("source_species_names") =
126 getParam<std::vector<std::string>>("source_species_names");
127 if (isParamValid("source_species_rates"))
128 params.applySpecificParameters(parameters(), {"source_species_rates"});
129 if (isParamValid("controlled_activity_name"))
130 params.set<std::vector<std::string>>("controlled_activity_name") =
131 getParam<std::vector<std::string>>("controlled_activity_name");
132 if (isParamValid("controlled_activity_value"))
133 params.applySpecificParameters(parameters(), {"controlled_activity_value"});
134 params.set<bool>("evaluate_kinetic_rates_always") =
135 getParam<bool>("evaluate_kinetic_rates_always");
136 if (isParamValid("kinetic_species_name"))
137 params.set<std::vector<std::string>>("kinetic_species_name") =
138 getParam<std::vector<std::string>>("kinetic_species_name");
139 if (isParamValid("kinetic_species_initial_value"))
140 params.set<std::vector<Real>>("kinetic_species_initial_value") =
141 getParam<std::vector<Real>>("kinetic_species_initial_value");
142 if (isParamValid("kinetic_species_unit"))
143 params.set<MultiMooseEnum>("kinetic_species_unit") =
144 getParam<MultiMooseEnum>("kinetic_species_unit");
145 params.set<bool>("adaptive_timestepping") = getParam<bool>("adaptive_timestepping");
146 params.set<Real>("dt_min") = getParam<Real>("dt_min");
147 params.set<Real>("dt_dec") = getParam<Real>("dt_dec");
148 params.set<Real>("dt_inc") = getParam<Real>("dt_inc");
149 params.set<ExecFlagEnum>("execute_on") = {EXEC_TIMESTEP_END};
150 _problem->addUserObject(
151 class_name, getParam<UserObjectName>("geochemistry_reactor_name"), params);
152 }
153}
registerMooseAction("GeochemistryApp", AddSpatialReactionSolverAction, "create_problem")
const ExecFlagType EXEC_TIMESTEP_END
std::shared_ptr< MooseMesh > & _mesh
std::shared_ptr< FEProblemBase > & _problem
const std::string & _current_task
Action that sets up GeochemistryConsoleOutput and various AuxVariables.
Action that sets up a spatial reaction solver.
AddSpatialReactionSolverAction(const InputParameters &parameters)
std::shared_ptr< MooseObject > create(const std::string &obj_name, const std::string &name, const InputParameters &parameters, THREAD_ID tid=0, bool print_deprecated=true)
InputParameters getValidParams(const std::string &name) const
static InputParameters sharedParams()
params that are shared with AddTimeDependentReactionSolverAction
void addClassDescription(const std::string &doc_string)
T & set(const std::string &name, bool quiet_mode=false)
const InputParameters & parameters() const
const T & getParam(const std::string &name) const
bool isParamValid(const std::string &name) const
Factory & _factory