83 std::map<dealii::types::boundary_id, std::shared_ptr<dealii::Function<dim>>> dirichlet_bc;
89 std::set<dealii::types::boundary_id> dirichlet_cached_bc;
92 std::map<dealii::types::boundary_id, std::shared_ptr<dealii::Function<dim>>> neumann_bc;
119 std::map<dealii::types::boundary_id, std::shared_ptr<dealii::Function<dim>>> symmetry_bc;
125 inline DEAL_II_ALWAYS_INLINE
127 get_boundary_type(dealii::types::boundary_id
const & boundary_id)
const
129 if(this->dirichlet_bc.find(boundary_id) != this->dirichlet_bc.end())
130 return BoundaryTypeU::Dirichlet;
131 else if(this->dirichlet_cached_bc.find(boundary_id) != this->dirichlet_cached_bc.end())
132 return BoundaryTypeU::DirichletCached;
133 else if(this->neumann_bc.find(boundary_id) != this->neumann_bc.end())
134 return BoundaryTypeU::Neumann;
135 else if(this->symmetry_bc.find(boundary_id) != this->symmetry_bc.end())
136 return BoundaryTypeU::Symmetry;
138 AssertThrow(
false, dealii::ExcMessage(
"Boundary type of face is invalid or not implemented."));
140 return BoundaryTypeU::Undefined;
143 inline DEAL_II_ALWAYS_INLINE
145 verify_boundary_conditions(
146 dealii::types::boundary_id
const boundary_id,
147 std::set<dealii::types::boundary_id>
const & periodic_boundary_ids)
const
149 unsigned int counter = 0;
150 if(this->dirichlet_bc.find(boundary_id) != this->dirichlet_bc.end())
153 if(this->dirichlet_cached_bc.find(boundary_id) != this->dirichlet_cached_bc.end())
156 if(this->neumann_bc.find(boundary_id) != this->neumann_bc.end())
159 if(this->symmetry_bc.find(boundary_id) != this->symmetry_bc.end())
162 if(periodic_boundary_ids.find(boundary_id) != periodic_boundary_ids.end())
165 AssertThrow(counter == 1,
166 dealii::ExcMessage(
"Boundary face with non-unique boundary type found."));
170 set_dirichlet_cached_data(
173 dirichlet_cached_data = interface_data;
176 std::shared_ptr<ContainerInterfaceData<1, dim, double>
const>
177 get_dirichlet_cached_data()
const
179 AssertThrow(dirichlet_cached_data.get(),
180 dealii::ExcMessage(
"Pointer to ContainerInterfaceData has not been initialized."));
182 return dirichlet_cached_data;
186 mutable std::shared_ptr<ContainerInterfaceData<1, dim, double>
const> dirichlet_cached_data;
193 std::map<dealii::types::boundary_id, std::shared_ptr<dealii::Function<dim>>> dirichlet_bc;
197 std::set<dealii::types::boundary_id> neumann_bc;
203 inline DEAL_II_ALWAYS_INLINE
205 get_boundary_type(dealii::types::boundary_id
const & boundary_id)
const
207 if(this->dirichlet_bc.find(boundary_id) != this->dirichlet_bc.end())
208 return BoundaryTypeP::Dirichlet;
209 else if(this->neumann_bc.find(boundary_id) != this->neumann_bc.end())
210 return BoundaryTypeP::Neumann;
212 AssertThrow(
false, dealii::ExcMessage(
"Boundary type of face is invalid or not implemented."));
214 return BoundaryTypeP::Undefined;
217 inline DEAL_II_ALWAYS_INLINE
219 verify_boundary_conditions(
220 dealii::types::boundary_id
const boundary_id,
221 std::set<dealii::types::boundary_id>
const & periodic_boundary_ids)
const
223 unsigned int counter = 0;
224 if(this->dirichlet_bc.find(boundary_id) != this->dirichlet_bc.end())
227 if(this->neumann_bc.find(boundary_id) != this->neumann_bc.end())
230 if(periodic_boundary_ids.find(boundary_id) != periodic_boundary_ids.end())
233 AssertThrow(counter == 1,
234 dealii::ExcMessage(
"Boundary face with non-unique boundary type found."));