12 #include "FEProblem.h"
13 #include "Conversion.h"
14 #include "libmesh/string_to_enum.h"
31 params.addClassDescription(
32 "Adds Kernels and fluid-property Materials necessary to simulate a "
33 "single-phase fully-saturated flow problem. Full-upwinding of fluid flow is not available "
34 "in this Action, so the results may differ slightly from the Unsaturated Action. However KT "
35 "stabilization may be employed for both the fluid and any heat flow. No Kernels for "
36 "diffusion and dispersion of "
37 "fluid components are added. To run a simulation you will also "
38 "need to provide various other Materials for each mesh "
39 "block, depending on your simulation type, viz: permeability, "
40 "porosity, elasticity tensor, strain calculator, stress calculator, "
41 "matrix internal energy, thermal conductivity, diffusivity");
68 _included_objects.push_back(
"PorousFlowAdvectiveFluxCalculatorSaturatedMultiComponent");
81 const std::string kernel_type =
"PorousFlowFullySaturatedDarcyFlow";
82 InputParameters params = _factory.getValidParams(kernel_type);
84 params.set<RealVectorValue>(
"gravity") =
_gravity;
88 const std::string kernel_name =
"PorousFlowFullySaturated_DarcyFlow" + Moose::stringify(i);
89 params.set<
unsigned int>(
"fluid_component") = i;
91 _problem->addKernel(kernel_type, kernel_name, params);
94 const std::string kernel_name =
97 params.set<NonlinearVariableName>(
"variable") =
_pp_var;
98 _problem->addKernel(kernel_type, kernel_name, params);
102 const std::string kernel_type =
"PorousFlowFluxLimitedTVDAdvection";
103 InputParameters params = _factory.getValidParams(kernel_type);
104 params.set<UserObjectName>(
"PorousFlowDictator") =
_dictator_name;
108 const std::string kernel_name =
"PorousFlowFluxLimited_DarcyFlow" + Moose::stringify(i);
109 params.set<UserObjectName>(
"advective_flux_calculator") =
110 "PorousFlowFullySaturated_AC_" + Moose::stringify(i);
112 _problem->addKernel(kernel_type, kernel_name, params);
115 const std::string kernel_name =
117 params.set<NonlinearVariableName>(
"variable") =
_pp_var;
118 params.set<UserObjectName>(
"advective_flux_calculator") =
120 _problem->addKernel(kernel_type, kernel_name, params);
125 std::string kernel_name =
"PorousFlowFullySaturated_MassTimeDerivative";
126 std::string kernel_type =
"PorousFlowMassTimeDerivative";
127 InputParameters params = _factory.getValidParams(kernel_type);
128 params.set<UserObjectName>(
"PorousFlowDictator") =
_dictator_name;
132 kernel_name =
"PorousFlowFullySaturated_MassTimeDerivative" + Moose::stringify(i);
133 params.set<
unsigned int>(
"fluid_component") = i;
135 _problem->addKernel(kernel_type, kernel_name, params);
141 params.set<NonlinearVariableName>(
"variable") =
_pp_var;
142 _problem->addKernel(kernel_type, kernel_name, params);
147 std::string kernel_name =
"PorousFlowFullySaturated_MassVolumetricExpansion";
148 std::string kernel_type =
"PorousFlowMassVolumetricExpansion";
149 InputParameters params = _factory.getValidParams(kernel_type);
150 params.set<UserObjectName>(
"PorousFlowDictator") =
_dictator_name;
154 kernel_name =
"PorousFlowFullySaturated_MassVolumetricExpansion" + Moose::stringify(i);
155 params.set<
unsigned>(
"fluid_component") = i;
157 _problem->addKernel(kernel_type, kernel_name, params);
160 kernel_name =
"PorousFlowFullySaturated_MassVolumetricExpansion" +
163 params.set<NonlinearVariableName>(
"variable") =
_pp_var;
164 _problem->addKernel(kernel_type, kernel_name, params);
171 std::string kernel_name =
"PorousFlowFullySaturated_HeatAdvection";
172 std::string kernel_type =
"PorousFlowFullySaturatedHeatAdvection";
173 InputParameters params = _factory.getValidParams(kernel_type);
175 params.set<UserObjectName>(
"PorousFlowDictator") =
_dictator_name;
176 params.set<RealVectorValue>(
"gravity") =
_gravity;
177 _problem->addKernel(kernel_type, kernel_name, params);
181 const std::string kernel_name =
"PorousFlowFullySaturated_HeatAdvection";
182 const std::string kernel_type =
"PorousFlowFluxLimitedTVDAdvection";
183 InputParameters params = _factory.getValidParams(kernel_type);
185 params.set<UserObjectName>(
"PorousFlowDictator") =
_dictator_name;
186 params.set<UserObjectName>(
"advective_flux_calculator") =
"PorousFlowFullySaturatedHeat_AC";
187 _problem->addKernel(kernel_type, kernel_name, params);
202 const std::string userobject_name =
"PorousFlowFullySaturated_AC_" + Moose::stringify(i);
206 const std::string userobject_name =
217 const std::string userobject_name =
"PorousFlowFullySaturatedHeat_AC";
232 std::string material_type =
"PorousFlow1PhaseFullySaturated";
233 InputParameters params = _factory.getValidParams(material_type);
234 std::string material_name =
"PorousFlowFullySaturated_1PhaseP_qp";
235 params.set<UserObjectName>(
"PorousFlowDictator") =
_dictator_name;
236 params.set<std::vector<VariableName>>(
"porepressure") = {
_pp_var};
237 params.set<
bool>(
"at_nodes") =
false;
238 _problem->addMaterial(material_type, material_name, params);
243 std::string material_type =
"PorousFlow1PhaseFullySaturated";
244 InputParameters params = _factory.getValidParams(material_type);
245 std::string material_name =
"PorousFlowFullySaturated_1PhaseP";
246 params.set<UserObjectName>(
"PorousFlowDictator") =
_dictator_name;
247 params.set<std::vector<VariableName>>(
"porepressure") = {
_pp_var};
248 params.set<
bool>(
"at_nodes") =
true;
249 _problem->addMaterial(material_type, material_name, params);