12 #include "FEProblem.h"
13 #include "Conversion.h"
23 params.addClassDescription(
"Set up Pressure boundary conditions");
25 params.addRequiredParam<std::vector<BoundaryName>>(
26 "boundary",
"The list of boundary IDs from the mesh where the pressure will be applied");
28 params.addParam<VariableName>(
"disp_x",
"The x displacement");
29 params.addParam<VariableName>(
"disp_y",
"The y displacement");
30 params.addParam<VariableName>(
"disp_z",
"The z displacement");
32 params.addParam<std::vector<VariableName>>(
34 "The displacements appropriate for the simulation geometry and coordinate system");
36 params.addParam<std::vector<AuxVariableName>>(
"save_in_disp_x",
37 "The save_in variables for x displacement");
38 params.addParam<std::vector<AuxVariableName>>(
"save_in_disp_y",
39 "The save_in variables for y displacement");
40 params.addParam<std::vector<AuxVariableName>>(
"save_in_disp_z",
41 "The save_in variables for z displacement");
43 params.addParam<Real>(
"factor", 1.0,
"The factor to use in computing the pressure");
44 params.addParam<Real>(
"alpha", 0.0,
"alpha parameter for HHT time integration");
45 params.addParam<FunctionName>(
"function",
"The function that describes the pressure");
46 params.addParam<
bool>(
"use_automatic_differentiation",
48 "Flag to use automatic differentiation (AD) objects when possible");
53 : Action(params), _use_ad(getParam<bool>(
"use_automatic_differentiation"))
55 _save_in_vars.push_back(getParam<std::vector<AuxVariableName>>(
"save_in_disp_x"));
56 _save_in_vars.push_back(getParam<std::vector<AuxVariableName>>(
"save_in_disp_y"));
57 _save_in_vars.push_back(getParam<std::vector<AuxVariableName>>(
"save_in_disp_z"));
67 std::string ad_append =
"";
68 std::string ad_prepend =
"";
71 ad_append =
"<RESIDUAL>";
75 std::string kernel_name = ad_prepend +
"Pressure";
77 std::vector<VariableName> displacements;
78 if (isParamValid(
"displacements"))
79 displacements = getParam<std::vector<VariableName>>(
"displacements");
83 if (!isParamValid(
"disp_x"))
84 mooseError(
"Specify displacement variables using the `displacements` parameter.");
85 displacements.push_back(getParam<VariableName>(
"disp_x"));
87 if (isParamValid(
"disp_y"))
89 displacements.push_back(getParam<VariableName>(
"disp_y"));
90 if (isParamValid(
"disp_z"))
91 displacements.push_back(getParam<VariableName>(
"disp_z"));
96 for (
unsigned int i = 0; i < displacements.size(); ++i)
99 std::string unique_kernel_name = kernel_name +
"_" + _name +
"_" + Moose::stringify(i);
101 InputParameters params = _factory.getValidParams(kernel_name + ad_append);
102 params.applyParameters(parameters(), {
"factor"});
103 params.set<
bool>(
"use_displaced_mesh") =
true;
104 params.set<
unsigned int>(
"component") = i;
105 params.set<NonlinearVariableName>(
"variable") = displacements[i];
108 params.set<std::vector<AuxVariableName>>(
"save_in") =
_save_in_vars[i];
112 params.set<Real>(
"constant") = getParam<Real>(
"factor");
113 _problem->addBoundaryCondition(
114 kernel_name + ad_append, unique_kernel_name +
"_residual", params);
115 _problem->addBoundaryCondition(
116 kernel_name +
"<JACOBIAN>", unique_kernel_name +
"_jacobian", params);
117 _problem->haveADObjects(
true);
121 params.set<Real>(
"factor") = getParam<Real>(
"factor");
122 _problem->addBoundaryCondition(kernel_name, unique_kernel_name, params);