OGS
CreateBoundaryCondition.cpp
Go to the documentation of this file.
1
12
14#include "BoundaryCondition.h"
30
31namespace ProcessLib
32{
33std::unique_ptr<BoundaryCondition> createBoundaryCondition(
34 const BoundaryConditionConfig& config,
35 const NumLib::LocalToGlobalIndexMap& dof_table,
36 const MeshLib::Mesh& bulk_mesh, const int variable_id,
37 const unsigned integration_order, const unsigned shapefunction_order,
38 const std::vector<std::unique_ptr<ParameterLib::ParameterBase>>& parameters,
39 const Process& process,
40 [[maybe_unused]] std::vector<std::reference_wrapper<ProcessVariable>> const&
41 all_process_variables_for_this_process,
42 std::map<int, std::shared_ptr<MaterialPropertyLib::Medium>> const& media)
43{
44 // Surface mesh and bulk mesh must have equal axial symmetry flags!
45 if (config.boundary_mesh.isAxiallySymmetric() !=
46 bulk_mesh.isAxiallySymmetric())
47 {
49 "The boundary mesh {:s} axially symmetric but the bulk mesh {:s}. "
50 "Both must have an equal axial symmetry property.",
51 config.boundary_mesh.isAxiallySymmetric() ? "is" : "is not",
52 bulk_mesh.isAxiallySymmetric() ? "is" : "is not");
53 }
54
56 auto const type = config.config.peekConfigParameter<std::string>("type");
57
58 if (bool const component_id_required = type != "NormalTraction";
59 component_id_required && !config.component_id.has_value())
60 {
62 "Specifying the component id (<component>) for a boundary "
63 "condition of type {} is mandatory.",
64 type);
65 }
66
67 if (type == "Dirichlet")
68 {
70 config.config, config.boundary_mesh, dof_table, variable_id,
71 *config.component_id, parameters);
72 }
73 if (type == "DirichletWithinTimeInterval")
74 {
76 config.config, config.boundary_mesh, dof_table, variable_id,
77 *config.component_id, parameters);
78 }
79 if (type == "TimeDecayDirichlet")
80 {
82 variable_id, *config.component_id, config.config,
83 config.boundary_mesh, dof_table, parameters);
84 }
85 if (type == "Neumann")
86 {
88 config.config, config.boundary_mesh, dof_table, variable_id,
89 *config.component_id, integration_order, shapefunction_order,
90 bulk_mesh.getDimension(), parameters);
91 }
92 if (type == "Robin")
93 {
95 config.config, config.boundary_mesh, dof_table, variable_id,
96 *config.component_id, integration_order, shapefunction_order,
97 bulk_mesh.getDimension(), parameters);
98 }
99 if (type == "VariableDependentNeumann")
100 {
102 config.config, config.boundary_mesh, dof_table, variable_id,
103 *config.component_id, integration_order, shapefunction_order,
104 bulk_mesh.getDimension(), parameters);
105 }
106
107 if (type == "Python")
108 {
110 config.config, config.boundary_mesh, dof_table, bulk_mesh,
111 variable_id, *config.component_id, integration_order,
112 shapefunction_order, all_process_variables_for_this_process);
113 }
114
115 //
116 // Special boundary conditions
117 //
118 if (type == "ConstraintDirichlet")
119 {
121 config.config, config.boundary_mesh, dof_table, variable_id,
122 integration_order, *config.component_id, parameters, process);
123 }
124 if (type == "PrimaryVariableConstraintDirichlet")
125 {
127 config.config, config.boundary_mesh, dof_table, variable_id,
128 *config.component_id, parameters);
129 }
130 if (type == "WellboreCompensateNeumann")
131 {
133 config.config, config.boundary_mesh, dof_table, variable_id,
134 *config.component_id, integration_order, shapefunction_order,
135 bulk_mesh.getDimension(), media);
136 }
137 if (type == "SolutionDependentDirichlet")
138 {
140 config.config, config.boundary_mesh, dof_table, variable_id,
141 *config.component_id, parameters);
142 }
143 if (type == "HCNonAdvectiveFreeComponentFlowBoundary")
144 {
146 config.config, config.boundary_mesh, dof_table, variable_id,
147 *config.component_id, integration_order, parameters,
148 bulk_mesh.getDimension(), process, shapefunction_order);
149 }
150 if (type == "NormalTraction")
151 {
152 switch (bulk_mesh.getDimension())
153 {
154 case 2:
157 config.config, config.boundary_mesh, dof_table,
158 variable_id, integration_order, shapefunction_order,
159 parameters);
160 case 3:
163 config.config, config.boundary_mesh, dof_table,
164 variable_id, integration_order, shapefunction_order,
165 parameters);
166 default:
167 OGS_FATAL(
168 "NormalTractionBoundaryCondition can not be instantiated "
169 "for mesh dimensions other than two or three. "
170 "{}-dimensional mesh was given.",
171 bulk_mesh.getDimension());
172 }
173 }
174 if (type == "PhaseFieldIrreversibleDamageOracleBoundaryCondition")
175 {
176 return ProcessLib::
179 config.config, dof_table, bulk_mesh, variable_id,
180 *config.component_id);
181 }
182 OGS_FATAL("Unknown boundary condition type: `{:s}'.", type);
183}
184
185} // namespace ProcessLib
#define OGS_FATAL(...)
Definition Error.h:26
T peekConfigParameter(std::string const &param) const
bool isAxiallySymmetric() const
Definition Mesh.h:139
unsigned getDimension() const
Returns the dimension of the mesh (determined by the maximum dimension over all elements).
Definition Mesh.h:90
std::unique_ptr< NormalTractionBoundaryCondition< GlobalDim, NormalTractionBoundaryConditionLocalAssembler > > createNormalTractionBoundaryCondition(BaseLib::ConfigTree const &config, MeshLib::Mesh const &bc_mesh, NumLib::LocalToGlobalIndexMap const &dof_table, int const variable_id, unsigned const integration_order, unsigned const shapefunction_order, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters)
std::unique_ptr< VariableDependentNeumannBoundaryCondition > createVariableDependentNeumannBoundaryCondition(BaseLib::ConfigTree const &config, MeshLib::Mesh const &bc_mesh, NumLib::LocalToGlobalIndexMap const &dof_table, int const variable_id, int const component_id, unsigned const integration_order, unsigned const shapefunction_order, unsigned const global_dim, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters)
std::unique_ptr< SolutionDependentDirichletBoundaryCondition > createSolutionDependentDirichletBoundaryCondition(BaseLib::ConfigTree const &config, MeshLib::Mesh const &bc_mesh, NumLib::LocalToGlobalIndexMap const &dof_table_bulk, int const variable_id, int const component_id, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters)
std::unique_ptr< RobinBoundaryCondition > createRobinBoundaryCondition(BaseLib::ConfigTree const &config, MeshLib::Mesh const &bc_mesh, NumLib::LocalToGlobalIndexMap const &dof_table, int const variable_id, int const component_id, unsigned const integration_order, unsigned const shapefunction_order, unsigned const global_dim, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters)
std::unique_ptr< PhaseFieldIrreversibleDamageOracleBoundaryCondition > createPhaseFieldIrreversibleDamageOracleBoundaryCondition(BaseLib::ConfigTree const &config, NumLib::LocalToGlobalIndexMap const &dof_table, MeshLib::Mesh const &mesh, int const variable_id, int const component_id)
std::unique_ptr< WellboreCompensateNeumannBoundaryCondition > createWellboreCompensateNeumannBoundaryCondition(BaseLib::ConfigTree const &config, MeshLib::Mesh const &bc_mesh, NumLib::LocalToGlobalIndexMap const &dof_table, int const variable_id, int const component_id, unsigned const integration_order, unsigned const shapefunction_order, unsigned const global_dim, std::map< int, std::shared_ptr< MaterialPropertyLib::Medium > > const &media)
std::unique_ptr< BoundaryCondition > createDirichletBoundaryConditionWithinTimeInterval(BaseLib::ConfigTree const &config, MeshLib::Mesh const &bc_mesh, NumLib::LocalToGlobalIndexMap const &dof_table_bulk, int const variable_id, int const component_id, const std::vector< std::unique_ptr< ParameterLib::ParameterBase > > &parameters)
std::unique_ptr< BoundaryCondition > createTimeDecayDirichletBoundaryCondition(int const variable_id, int const component_id, BaseLib::ConfigTree const &config, MeshLib::Mesh const &bc_mesh, NumLib::LocalToGlobalIndexMap const &dof_table_bulk, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters)
std::unique_ptr< DirichletBoundaryCondition > createDirichletBoundaryCondition(BaseLib::ConfigTree const &config, MeshLib::Mesh const &bc_mesh, NumLib::LocalToGlobalIndexMap const &dof_table_bulk, int const variable_id, int const component_id, const std::vector< std::unique_ptr< ParameterLib::ParameterBase > > &parameters)
std::unique_ptr< ConstraintDirichletBoundaryCondition > createConstraintDirichletBoundaryCondition(BaseLib::ConfigTree const &config, MeshLib::Mesh const &bc_mesh, NumLib::LocalToGlobalIndexMap const &dof_table_bulk, int const variable_id, unsigned const integration_order, int const component_id, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, Process const &constraining_process)
std::unique_ptr< BoundaryCondition > createBoundaryCondition(const BoundaryConditionConfig &config, const NumLib::LocalToGlobalIndexMap &dof_table, const MeshLib::Mesh &bulk_mesh, const int variable_id, const unsigned integration_order, const unsigned shapefunction_order, const std::vector< std::unique_ptr< ParameterLib::ParameterBase > > &parameters, const Process &process, std::vector< std::reference_wrapper< ProcessVariable > > const &all_process_variables_for_this_process, std::map< int, std::shared_ptr< MaterialPropertyLib::Medium > > const &media)
std::unique_ptr< PythonBoundaryCondition > createPythonBoundaryCondition(BaseLib::ConfigTree const &config, MeshLib::Mesh const &boundary_mesh, NumLib::LocalToGlobalIndexMap const &dof_table_bulk, MeshLib::Mesh const &bulk_mesh, int const variable_id, int const component_id, unsigned const integration_order, unsigned const shapefunction_order, std::vector< std::reference_wrapper< ProcessVariable > > const &all_process_variables_for_this_process)
Creates a new PythonBoundaryCondition object.
std::unique_ptr< NeumannBoundaryCondition > createNeumannBoundaryCondition(BaseLib::ConfigTree const &config, MeshLib::Mesh const &bc_mesh, NumLib::LocalToGlobalIndexMap const &dof_table, int const variable_id, int const component_id, unsigned const integration_order, unsigned const shapefunction_order, unsigned const global_dim, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters)
std::unique_ptr< HCNonAdvectiveFreeComponentFlowBoundaryCondition > createHCNonAdvectiveFreeComponentFlowBoundaryCondition(BaseLib::ConfigTree const &config, MeshLib::Mesh const &bc_mesh, NumLib::LocalToGlobalIndexMap const &dof_table, int const variable_id, int const component_id, unsigned const integration_order, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, unsigned const global_dim, Process const &process, unsigned const shapefunction_order)
std::unique_ptr< PrimaryVariableConstraintDirichletBoundaryCondition > createPrimaryVariableConstraintDirichletBoundaryCondition(BaseLib::ConfigTree const &config, MeshLib::Mesh const &bc_mesh, NumLib::LocalToGlobalIndexMap const &dof_table_bulk, int const variable_id, int const component_id, const std::vector< std::unique_ptr< ParameterLib::ParameterBase > > &parameters)