https://mooseframework.inl.gov
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 
14 registerMooseAction("GeochemistryApp", AddTimeIndependentReactionSolverAction, "setup_mesh");
15 registerMooseAction("GeochemistryApp", AddTimeIndependentReactionSolverAction, "init_mesh");
16 registerMooseAction("GeochemistryApp", AddTimeIndependentReactionSolverAction, "create_problem");
17 registerMooseAction("GeochemistryApp", AddTimeIndependentReactionSolverAction, "setup_executioner");
18 registerMooseAction("GeochemistryApp", AddTimeIndependentReactionSolverAction, "add_output");
19 registerMooseAction("GeochemistryApp", AddTimeIndependentReactionSolverAction, "add_user_object");
20 registerMooseAction("GeochemistryApp",
22  "add_geochemistry_molality_aux");
23 registerMooseAction("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");
34  params.addClassDescription(
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 
43  const InputParameters & params)
45 {
46 }
47 
48 void
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")
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 }
void setExecutioner(std::shared_ptr< Executioner > &&executioner)
registerMooseAction("GeochemistryApp", AddTimeIndependentReactionSolverAction, "setup_mesh")
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
static InputParameters validParams()
MooseApp & _app
T & set(const std::string &name, bool quiet_mode=false)
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)
Action that sets up a time-independent equilibrium reaction solver.
InputParameters getValidParams(const std::string &name) const
bool isParamValid(const std::string &name) const
Factory & _factory
const T & getParam(const std::string &name) const
const std::string & _current_task
std::shared_ptr< MooseMesh > & _mesh
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void addClassDescription(const std::string &doc_string)
std::shared_ptr< FEProblemBase > & _problem
Action that sets up GeochemistryConsoleOutput and various AuxVariables.
const ExecFlagType EXEC_FINAL
AddTimeIndependentReactionSolverAction(const InputParameters &parameters)