12 #include "FEProblem.h"
13 #include "Conversion.h"
23 params.addClassDescription(
"Set up Coupled 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<VariableName>(
"pressure",
"The variable that contains the pressure");
49 _save_in_vars.push_back(getParam<std::vector<AuxVariableName>>(
"save_in_disp_x"));
50 _save_in_vars.push_back(getParam<std::vector<AuxVariableName>>(
"save_in_disp_y"));
51 _save_in_vars.push_back(getParam<std::vector<AuxVariableName>>(
"save_in_disp_z"));
61 const std::string kernel_name =
"CoupledPressureBC";
63 std::vector<VariableName> displacements;
64 if (isParamValid(
"displacements"))
65 displacements = getParam<std::vector<VariableName>>(
"displacements");
69 if (!isParamValid(
"disp_x"))
70 mooseError(
"Specify displacement variables using the `displacements` parameter.");
71 displacements.push_back(getParam<VariableName>(
"disp_x"));
73 if (isParamValid(
"disp_y"))
75 displacements.push_back(getParam<VariableName>(
"disp_y"));
76 if (isParamValid(
"disp_z"))
77 displacements.push_back(getParam<VariableName>(
"disp_z"));
82 for (
unsigned int i = 0; i < displacements.size(); ++i)
85 std::string unique_kernel_name = kernel_name +
"_" + _name +
"_" + Moose::stringify(i);
87 InputParameters params = _factory.getValidParams(kernel_name);
88 params.applySpecificParameters(parameters(), {
"boundary"});
89 params.set<std::vector<VariableName>>(
"pressure") = {getParam<VariableName>(
"pressure")};
90 params.set<
bool>(
"use_displaced_mesh") =
true;
91 params.set<
unsigned int>(
"component") = i;
92 params.set<NonlinearVariableName>(
"variable") = displacements[i];
95 params.set<std::vector<AuxVariableName>>(
"save_in") =
_save_in_vars[i];
97 _problem->addBoundaryCondition(kernel_name, unique_kernel_name, params);