50 std::map<dealii::types::boundary_id, std::shared_ptr<dealii::Function<dim>>> dirichlet_bc;
55 std::map<dealii::types::boundary_id, std::shared_ptr<dealii::Function<dim>>>
56 dirichlet_bc_initial_acceleration;
61 std::map<dealii::types::boundary_id, dealii::ComponentMask> dirichlet_bc_component_mask;
68 std::set<dealii::types::boundary_id> dirichlet_cached_bc;
71 std::map<dealii::types::boundary_id, std::shared_ptr<dealii::Function<dim>>> neumann_bc;
77 std::set<dealii::types::boundary_id> neumann_cached_bc;
79 inline DEAL_II_ALWAYS_INLINE
81 get_boundary_type(dealii::types::boundary_id
const & boundary_id)
const
83 if(this->dirichlet_bc.find(boundary_id) != this->dirichlet_bc.end())
84 return BoundaryType::Dirichlet;
85 else if(this->dirichlet_cached_bc.find(boundary_id) != this->dirichlet_cached_bc.end())
86 return BoundaryType::DirichletCached;
87 else if(this->neumann_bc.find(boundary_id) != this->neumann_bc.end())
88 return BoundaryType::Neumann;
89 else if(this->neumann_cached_bc.find(boundary_id) != this->neumann_cached_bc.end())
90 return BoundaryType::NeumannCached;
94 "Could not find a boundary type to the specified boundary_id = " +
95 std::to_string(boundary_id) +
96 ". A possible reason is that you "
97 "forgot to define a boundary condition for this boundary_id, or "
98 "that the boundary type associated to this boundary has not been "
101 return BoundaryType::Undefined;
104 inline DEAL_II_ALWAYS_INLINE
106 verify_boundary_conditions(
107 dealii::types::boundary_id
const boundary_id,
108 std::set<dealii::types::boundary_id>
const & periodic_boundary_ids)
const
110 unsigned int counter = 0;
111 if(dirichlet_bc.find(boundary_id) != dirichlet_bc.end())
116 dirichlet_bc_component_mask.find(boundary_id) != dirichlet_bc_component_mask.end(),
118 "dirichlet_bc_component_mask must contain the same boundary IDs as dirichlet_bc."));
121 dirichlet_bc_initial_acceleration.find(boundary_id) !=
122 dirichlet_bc_initial_acceleration.end(),
124 "dirichlet_bc_initial_acceleration must contain the same boundary IDs as dirichlet_bc."));
127 if(dirichlet_cached_bc.find(boundary_id) != dirichlet_cached_bc.end())
130 if(neumann_bc.find(boundary_id) != neumann_bc.end())
133 if(neumann_cached_bc.find(boundary_id) != neumann_cached_bc.end())
136 if(periodic_boundary_ids.find(boundary_id) != periodic_boundary_ids.end())
139 AssertThrow(counter == 1,
140 dealii::ExcMessage(
"Boundary face with non-unique boundary type found."));
144 set_dirichlet_cached_data(
147 dirichlet_cached_data = interface_data;
151 set_neumann_cached_data(
154 neumann_cached_data = interface_data;
157 std::shared_ptr<ContainerInterfaceData<1, dim, double>
const>
158 get_dirichlet_cached_data()
const
160 AssertThrow(dirichlet_cached_data.get(),
161 dealii::ExcMessage(
"Pointer to ContainerInterfaceData has not been initialized."));
163 return dirichlet_cached_data;
166 std::shared_ptr<ContainerInterfaceData<1, dim, double>
const>
167 get_neumann_cached_data()
const
169 AssertThrow(neumann_cached_data.get(),
170 dealii::ExcMessage(
"Pointer to ContainerInterfaceData has not been initialized."));
172 return neumann_cached_data;
176 mutable std::shared_ptr<ContainerInterfaceData<1, dim, double>
const> dirichlet_cached_data;
177 mutable std::shared_ptr<ContainerInterfaceData<1, dim, double>
const> neumann_cached_data;