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