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