https://mooseframework.inl.gov
Loading...
Searching...
No Matches
AddTimeIndependentReactionSolverAction.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
11#include "Executioner.h"
12#include "FEProblem.h"
13
16registerMooseAction("GeochemistryApp", AddTimeIndependentReactionSolverAction, "create_problem");
17registerMooseAction("GeochemistryApp", AddTimeIndependentReactionSolverAction, "setup_executioner");
19registerMooseAction("GeochemistryApp", AddTimeIndependentReactionSolverAction, "add_user_object");
20registerMooseAction("GeochemistryApp",
22 "add_geochemistry_molality_aux");
23registerMooseAction("GeochemistryApp",
25 "add_geochemistry_reactor");
26
29{
31 params.set<ExecFlagEnum>("execute_console_output_on") = EXEC_FINAL;
32 params.set<bool>("solver_info") = true;
33 params.addParam<Real>("temperature", 25.0, "The temperature (degC) of the aqueous solution");
35 "Action that sets up a time-dependent equilibrium reaction solver. This creates creates a "
36 "time-dependent geochemistry solver, and adds AuxVariables corresonding to the molalities, "
37 "etc");
38
39 return params;
40}
41
47
48void
50{
51 // create Output and Aux objects
53
54 // Set up an arbitrary mesh
55 if (_current_task == "setup_mesh")
56 {
57 const std::string class_name = "GeneratedMesh";
58 InputParameters params = _factory.getValidParams(class_name);
59 params.set<MooseEnum>("dim") = "1";
60 _mesh = _factory.create<MooseMesh>(class_name, "mesh", params);
61 }
62 // Initialize the arbitrary mesh
63 else if (_current_task == "init_mesh")
64 {
65 _mesh->init();
66 }
67 // Create a "solve=false" FEProblem, if appropriate
68 else if (_current_task == "create_problem")
69 {
70 const std::string class_name = "FEProblem";
71 InputParameters params = _factory.getValidParams(class_name);
72 params.set<MooseMesh *>("mesh") = _mesh.get();
73 params.set<bool>("use_nonlinear") = true;
74 params.set<bool>("solve") = getParam<bool>("include_moose_solve");
75 _problem = _factory.create<FEProblemBase>(class_name, "Problem", params);
76 _problem->setKernelCoverageCheck(getParam<bool>("include_moose_solve")
77 ? FEProblemBase::CoverageCheckMode::TRUE
78 : FEProblemBase::CoverageCheckMode::FALSE);
79 }
80 // Set up an arbitrary steady executioner
81 else if (_current_task == "setup_executioner")
82 {
83 const std::string class_name = "Steady";
84 InputParameters params = _factory.getValidParams(class_name);
85 params.set<FEProblemBase *>("_fe_problem_base") = _problem.get();
86 params.set<FEProblem *>("_fe_problem") = (std::dynamic_pointer_cast<FEProblem>(_problem)).get();
87 std::shared_ptr<Executioner> executioner =
88 _factory.create<Executioner>(class_name, "Executioner", params);
89 _app.setExecutioner(std::move(executioner));
90 }
91 else if (_current_task == "add_geochemistry_reactor")
92 {
93 const std::string class_name = "GeochemistryTimeIndependentReactor";
94 auto params = _factory.getValidParams(class_name);
95 // Only pass parameters that were supplied to this action
96 if (isParamValid("block"))
97 params.set<std::vector<SubdomainName>>("block") =
98 getParam<std::vector<SubdomainName>>("block");
99 if (isParamValid("boundary"))
100 params.set<std::vector<BoundaryName>>("boundary") =
101 getParam<std::vector<BoundaryName>>("boundary");
102 params.set<UserObjectName>("model_definition") = getParam<UserObjectName>("model_definition");
103 if (isParamValid("swap_out_of_basis"))
104 params.set<std::vector<std::string>>("swap_out_of_basis") =
105 getParam<std::vector<std::string>>("swap_out_of_basis");
106 if (isParamValid("swap_into_basis"))
107 params.set<std::vector<std::string>>("swap_into_basis") =
108 getParam<std::vector<std::string>>("swap_into_basis");
109 params.set<MultiMooseEnum>("constraint_meaning") =
110 getParam<MultiMooseEnum>("constraint_meaning");
111 params.set<std::vector<std::string>>("constraint_species") =
112 getParam<std::vector<std::string>>("constraint_species");
113 params.set<std::vector<Real>>("constraint_value") =
114 getParam<std::vector<Real>>("constraint_value");
115 params.set<MultiMooseEnum>("constraint_unit") = getParam<MultiMooseEnum>("constraint_unit");
116 params.set<Real>("max_ionic_strength") = getParam<Real>("max_ionic_strength");
117 params.set<unsigned>("extra_iterations_to_make_consistent") =
118 getParam<unsigned>("extra_iterations_to_make_consistent");
119 params.set<Real>("stoichiometry_tolerance") = getParam<Real>("stoichiometry_tolerance");
120 params.set<std::string>("charge_balance_species") =
121 getParam<std::string>("charge_balance_species");
122 if (isParamValid("prevent_precipitation"))
123 params.set<std::vector<std::string>>("prevent_precipitation") =
124 getParam<std::vector<std::string>>("prevent_precipitation");
125 params.set<Real>("abs_tol") = getParam<Real>("abs_tol");
126 params.set<Real>("rel_tol") = getParam<Real>("rel_tol");
127 params.set<Real>("min_initial_molality") = getParam<Real>("min_initial_molality");
128 params.set<unsigned>("max_iter") = getParam<unsigned>("max_iter");
129 params.set<Real>("max_initial_residual") = getParam<Real>("max_initial_residual");
130 params.set<Real>("swap_threshold") = getParam<Real>("swap_threshold");
131 params.set<unsigned>("max_swaps_allowed") = getParam<unsigned>("max_swaps_allowed");
132 params.set<unsigned>("ramp_max_ionic_strength_initial") =
133 getParam<unsigned>("ramp_max_ionic_strength_initial");
134 params.set<bool>("ionic_str_using_basis_only") = getParam<bool>("ionic_str_using_basis_only");
135 params.set<bool>("stoichiometric_ionic_str_using_Cl_only") =
136 getParam<bool>("stoichiometric_ionic_str_using_Cl_only");
137 params.set<Real>("temperature") = getParam<Real>("temperature");
138 params.set<ExecFlagEnum>("execute_on") = {EXEC_FINAL};
139 _problem->addUserObject(
140 class_name, getParam<UserObjectName>("geochemistry_reactor_name"), params);
141 }
142}
registerMooseAction("GeochemistryApp", AddTimeIndependentReactionSolverAction, "setup_mesh")
const ExecFlagType EXEC_FINAL
std::shared_ptr< MooseMesh > & _mesh
MooseApp & _app
std::shared_ptr< FEProblemBase > & _problem
const std::string & _current_task
Action that sets up GeochemistryConsoleOutput and various AuxVariables.
Action that sets up a time-independent equilibrium reaction solver.
AddTimeIndependentReactionSolverAction(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
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
T & set(const std::string &name, bool quiet_mode=false)
void setExecutioner(std::shared_ptr< Executioner > &&executioner)
const T & getParam(const std::string &name) const
bool isParamValid(const std::string &name) const
Factory & _factory