34 const unsigned integration_order,
const unsigned shapefunction_order,
35 const std::vector<std::unique_ptr<ParameterLib::ParameterBase>>& parameters,
37 [[maybe_unused]] std::vector<std::reference_wrapper<ProcessVariable>>
const&
38 all_process_variables_for_this_process,
39 std::map<
int, std::shared_ptr<MaterialPropertyLib::Medium>>
const& media)
47 "The boundary mesh {:s} axially symmetric but the bulk mesh "
49 "Both must have an equal axial symmetry property.",
50 i.get().isAxiallySymmetric() ?
"is" :
"is not",
55 std::vector<std::unique_ptr<BoundaryCondition>> boundary_conditions;
60 if (
bool const component_id_required =
61 !(type ==
"NormalTraction" || type ==
"ReleaseNodalForce");
62 component_id_required && !config.
component_id.has_value())
65 "Specifying the component id (<component>) for a boundary "
66 "condition of type {} is mandatory.",
70 if (type ==
"Dirichlet")
73 std::vector<std::unique_ptr<BoundaryCondition>> dirichlet_conditions;
76 dirichlet_conditions.push_back(
78 parameter_name, bc_mesh, dof_table, variable_id,
81 return dirichlet_conditions;
83 if (type ==
"DirichletWithinTimeInterval")
85 auto const config_args =
88 std::vector<std::unique_ptr<BoundaryCondition>> conditions;
93 config_args, bc_mesh, dof_table, variable_id,
98 if (type ==
"TimeDecayDirichlet")
100 auto const config_args =
102 std::vector<std::unique_ptr<BoundaryCondition>> conditions;
105 conditions.push_back(
107 config_args, variable_id, *config.
component_id, bc_mesh,
108 dof_table, parameters));
112 if (type ==
"Neumann")
115 std::vector<std::unique_ptr<BoundaryCondition>> conditions;
119 config_args, bc_mesh, dof_table, variable_id,
120 *config.
component_id, integration_order, shapefunction_order,
128 std::vector<std::unique_ptr<BoundaryCondition>> conditions;
132 config_args, bc_mesh, dof_table, variable_id,
133 *config.
component_id, integration_order, shapefunction_order,
138 if (type ==
"VariableDependentNeumann")
140 auto const config_args =
142 std::vector<std::unique_ptr<BoundaryCondition>> conditions;
145 conditions.push_back(
147 config_args, bc_mesh, dof_table, variable_id,
149 shapefunction_order, bulk_mesh.
getDimension(), parameters));
153 if (type ==
"Python")
156 std::vector<std::unique_ptr<BoundaryCondition>> conditions;
160 config_args, bc_mesh, dof_table, bulk_mesh, variable_id,
161 *config.
component_id, integration_order, shapefunction_order,
162 all_process_variables_for_this_process));
170 if (type ==
"ConstraintDirichlet")
172 auto const config_args =
174 std::vector<std::unique_ptr<BoundaryCondition>> conditions;
177 conditions.push_back(
179 config_args, bc_mesh, dof_table, variable_id,
185 if (type ==
"PrimaryVariableConstraintDirichlet")
187 auto const config_args =
190 std::vector<std::unique_ptr<BoundaryCondition>> conditions;
193 conditions.push_back(
195 config_args, bc_mesh, dof_table, variable_id,
200 if (type ==
"WellboreCompensateNeumann")
202 auto const config_args =
204 std::vector<std::unique_ptr<BoundaryCondition>> conditions;
207 conditions.push_back(
209 config_args, bc_mesh, dof_table, variable_id,
215 if (type ==
"SolutionDependentDirichlet")
217 auto const config_args =
219 std::vector<std::unique_ptr<BoundaryCondition>> conditions;
222 conditions.push_back(
224 config_args, bc_mesh, dof_table, variable_id,
229 if (type ==
"HCNonAdvectiveFreeComponentFlowBoundary")
231 auto const boundary_permeability_name =
234 std::vector<std::unique_ptr<BoundaryCondition>> conditions;
237 conditions.push_back(
239 boundary_permeability_name, bc_mesh, dof_table, variable_id,
241 bulk_mesh.
getDimension(), process, shapefunction_order));
245 if (type ==
"NormalTraction")
249 std::vector<std::unique_ptr<BoundaryCondition>> conditions;
255 conditions.push_back(
257 createNormalTractionBoundaryCondition<2>(
258 parameter_name, bc_mesh, bulk_mesh, dof_table,
259 variable_id, integration_order,
260 shapefunction_order, parameters));
263 conditions.push_back(
265 createNormalTractionBoundaryCondition<3>(
266 parameter_name, bc_mesh, bulk_mesh, dof_table,
267 variable_id, integration_order,
268 shapefunction_order, parameters));
272 "NormalTractionBoundaryCondition can not be "
273 "instantiated for mesh dimensions other than two or "
274 "three. {}-dimensional mesh was given.",
280 if (type ==
"PhaseFieldIrreversibleDamageOracleBoundaryCondition")
283 std::vector<std::unique_ptr<BoundaryCondition>> conditions;
284 conditions.push_back(
287 dof_table, bulk_mesh, variable_id, *config.
component_id));
290 if (type ==
"ReleaseNodalForce")
293 std::vector<std::unique_ptr<BoundaryCondition>> conditions;
298 bulk_mesh.
getDimension(), variable_id, decay_parameter_name,
299 config, bc_mesh, dof_table, parameters));
303 OGS_FATAL(
"Unknown boundary condition type: `{:s}'.", type);