Line data Source code
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 : 10 : #include "AddSpatialReactionSolverAction.h" 11 : #include "GeochemistrySpatialReactor.h" 12 : #include "FEProblem.h" 13 : 14 : registerMooseAction("GeochemistryApp", AddSpatialReactionSolverAction, "create_problem"); 15 : registerMooseAction("GeochemistryApp", AddSpatialReactionSolverAction, "add_output"); 16 : registerMooseAction("GeochemistryApp", AddSpatialReactionSolverAction, "add_user_object"); 17 : registerMooseAction("GeochemistryApp", 18 : AddSpatialReactionSolverAction, 19 : "add_geochemistry_molality_aux"); 20 : registerMooseAction("GeochemistryApp", AddSpatialReactionSolverAction, "add_geochemistry_reactor"); 21 : 22 : InputParameters 23 108 : AddSpatialReactionSolverAction::validParams() 24 : { 25 108 : InputParameters params = AddGeochemistrySolverAction::validParams(); 26 108 : params += GeochemistrySpatialReactor::sharedParams(); 27 108 : params.addClassDescription( 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 108 : return params; 33 0 : } 34 : 35 108 : AddSpatialReactionSolverAction::AddSpatialReactionSolverAction(const InputParameters & params) 36 108 : : AddGeochemistrySolverAction(params) 37 : { 38 108 : } 39 : 40 : void 41 516 : AddSpatialReactionSolverAction::act() 42 : { 43 : // create Output and Aux objects 44 516 : AddGeochemistrySolverAction::act(); 45 : 46 : // Create a "solve=false" FEProblem, if appropriate 47 516 : if (_current_task == "create_problem") 48 : { 49 108 : const std::string class_name = "FEProblem"; 50 108 : InputParameters params = _factory.getValidParams(class_name); 51 108 : params.set<MooseMesh *>("mesh") = _mesh.get(); 52 108 : params.set<bool>("use_nonlinear") = true; 53 216 : params.set<bool>("solve") = getParam<bool>("include_moose_solve"); 54 108 : _problem = _factory.create<FEProblemBase>(class_name, "Problem", params); 55 216 : _problem->setKernelCoverageCheck(getParam<bool>("include_moose_solve") 56 : ? FEProblemBase::CoverageCheckMode::TRUE 57 : : FEProblemBase::CoverageCheckMode::FALSE); 58 108 : } 59 408 : else if (_current_task == "add_geochemistry_reactor") 60 : { 61 108 : const std::string class_name = "GeochemistrySpatialReactor"; 62 108 : auto params = _factory.getValidParams(class_name); 63 : // Only pass parameters that were supplied to this action 64 : 65 : // Block and Boundary params 66 216 : if (isParamValid("block")) 67 0 : params.set<std::vector<SubdomainName>>("block") = 68 0 : getParam<std::vector<SubdomainName>>("block"); 69 216 : if (isParamValid("boundary")) 70 0 : params.set<std::vector<BoundaryName>>("boundary") = 71 0 : getParam<std::vector<BoundaryName>>("boundary"); 72 : 73 : // GeochemistryReactorBase::sharedParams 74 216 : if (isParamValid("swap_out_of_basis")) 75 216 : params.set<std::vector<std::string>>("swap_out_of_basis") = 76 324 : getParam<std::vector<std::string>>("swap_out_of_basis"); 77 216 : if (isParamValid("swap_into_basis")) 78 216 : params.set<std::vector<std::string>>("swap_into_basis") = 79 324 : getParam<std::vector<std::string>>("swap_into_basis"); 80 216 : params.set<MultiMooseEnum>("constraint_meaning") = 81 216 : getParam<MultiMooseEnum>("constraint_meaning"); 82 216 : params.set<std::vector<std::string>>("constraint_species") = 83 216 : getParam<std::vector<std::string>>("constraint_species"); 84 216 : params.set<std::vector<Real>>("constraint_value") = 85 216 : getParam<std::vector<Real>>("constraint_value"); 86 324 : params.set<MultiMooseEnum>("constraint_unit") = getParam<MultiMooseEnum>("constraint_unit"); 87 216 : params.set<Real>("max_ionic_strength") = getParam<Real>("max_ionic_strength"); 88 108 : params.set<unsigned>("extra_iterations_to_make_consistent") = 89 216 : getParam<unsigned>("extra_iterations_to_make_consistent"); 90 216 : params.set<std::string>("charge_balance_species") = 91 108 : getParam<std::string>("charge_balance_species"); 92 216 : if (isParamValid("prevent_precipitation")) 93 216 : params.set<std::vector<std::string>>("prevent_precipitation") = 94 324 : getParam<std::vector<std::string>>("prevent_precipitation"); 95 216 : params.set<Real>("abs_tol") = getParam<Real>("abs_tol"); 96 216 : params.set<Real>("rel_tol") = getParam<Real>("rel_tol"); 97 216 : params.set<Real>("min_initial_molality") = getParam<Real>("min_initial_molality"); 98 216 : params.set<unsigned>("max_iter") = getParam<unsigned>("max_iter"); 99 216 : params.set<Real>("max_initial_residual") = getParam<Real>("max_initial_residual"); 100 216 : params.set<Real>("swap_threshold") = getParam<Real>("swap_threshold"); 101 216 : params.set<unsigned>("max_swaps_allowed") = getParam<unsigned>("max_swaps_allowed"); 102 108 : params.set<unsigned>("ramp_max_ionic_strength_initial") = 103 216 : getParam<unsigned>("ramp_max_ionic_strength_initial"); 104 216 : params.set<bool>("ionic_str_using_basis_only") = getParam<bool>("ionic_str_using_basis_only"); 105 108 : params.set<bool>("stoichiometric_ionic_str_using_Cl_only") = 106 216 : getParam<bool>("stoichiometric_ionic_str_using_Cl_only"); 107 : 108 : // GeochemistryReactorBase non-shared params 109 324 : params.set<UserObjectName>("model_definition") = getParam<UserObjectName>("model_definition"); 110 216 : params.set<Real>("stoichiometry_tolerance") = getParam<Real>("stoichiometry_tolerance"); 111 : 112 : // GeochemistrySpatialReactor::sharedParams 113 108 : params.set<unsigned>("ramp_max_ionic_strength_subsequent") = 114 216 : getParam<unsigned>("ramp_max_ionic_strength_subsequent"); 115 216 : params.set<Real>("initial_temperature") = getParam<Real>("initial_temperature"); 116 108 : params.applySpecificParameters(parameters(), {"temperature"}); 117 216 : params.set<Real>("close_system_at_time") = getParam<Real>("close_system_at_time"); 118 216 : if (isParamValid("remove_fixed_activity_name")) 119 216 : params.set<std::vector<std::string>>("remove_fixed_activity_name") = 120 324 : getParam<std::vector<std::string>>("remove_fixed_activity_name"); 121 216 : if (isParamValid("remove_fixed_activity_time")) 122 216 : params.set<std::vector<Real>>("remove_fixed_activity_time") = 123 324 : getParam<std::vector<Real>>("remove_fixed_activity_time"); 124 216 : if (isParamValid("source_species_names")) 125 216 : params.set<std::vector<std::string>>("source_species_names") = 126 324 : getParam<std::vector<std::string>>("source_species_names"); 127 216 : if (isParamValid("source_species_rates")) 128 66 : params.applySpecificParameters(parameters(), {"source_species_rates"}); 129 216 : if (isParamValid("controlled_activity_name")) 130 216 : params.set<std::vector<std::string>>("controlled_activity_name") = 131 324 : getParam<std::vector<std::string>>("controlled_activity_name"); 132 216 : if (isParamValid("controlled_activity_value")) 133 25 : params.applySpecificParameters(parameters(), {"controlled_activity_value"}); 134 108 : params.set<bool>("evaluate_kinetic_rates_always") = 135 216 : getParam<bool>("evaluate_kinetic_rates_always"); 136 216 : if (isParamValid("kinetic_species_name")) 137 216 : params.set<std::vector<std::string>>("kinetic_species_name") = 138 324 : getParam<std::vector<std::string>>("kinetic_species_name"); 139 216 : if (isParamValid("kinetic_species_initial_value")) 140 216 : params.set<std::vector<Real>>("kinetic_species_initial_value") = 141 324 : getParam<std::vector<Real>>("kinetic_species_initial_value"); 142 216 : if (isParamValid("kinetic_species_unit")) 143 0 : params.set<MultiMooseEnum>("kinetic_species_unit") = 144 0 : getParam<MultiMooseEnum>("kinetic_species_unit"); 145 216 : params.set<bool>("adaptive_timestepping") = getParam<bool>("adaptive_timestepping"); 146 216 : params.set<Real>("dt_min") = getParam<Real>("dt_min"); 147 216 : params.set<Real>("dt_dec") = getParam<Real>("dt_dec"); 148 216 : params.set<Real>("dt_inc") = getParam<Real>("dt_inc"); 149 324 : params.set<ExecFlagEnum>("execute_on") = {EXEC_TIMESTEP_END}; 150 216 : _problem->addUserObject( 151 108 : class_name, getParam<UserObjectName>("geochemistry_reactor_name"), params); 152 96 : } 153 612 : }