48 std::map<dealii::types::boundary_id, std::shared_ptr<dealii::Function<dim>>> dirichlet_bc;
53 std::map<dealii::types::boundary_id, dealii::ComponentMask> dirichlet_bc_component_mask;
60 std::set<dealii::types::boundary_id> dirichlet_cached_bc;
63 std::map<dealii::types::boundary_id, std::shared_ptr<dealii::Function<dim>>> neumann_bc;
66 inline DEAL_II_ALWAYS_INLINE
68 get_boundary_type(dealii::types::boundary_id
const & boundary_id)
const
70 if(this->dirichlet_bc.find(boundary_id) != this->dirichlet_bc.end())
71 return BoundaryType::Dirichlet;
72 else if(this->dirichlet_cached_bc.find(boundary_id) != this->dirichlet_cached_bc.end())
73 return BoundaryType::DirichletCached;
74 else if(this->neumann_bc.find(boundary_id) != this->neumann_bc.end())
75 return BoundaryType::Neumann;
77 AssertThrow(
false, dealii::ExcMessage(
"Boundary type of face is invalid or not implemented."));
79 return BoundaryType::Undefined;
82 inline DEAL_II_ALWAYS_INLINE
84 verify_boundary_conditions(
85 dealii::types::boundary_id
const boundary_id,
86 std::set<dealii::types::boundary_id>
const & periodic_boundary_ids)
const
88 unsigned int counter = 0;
89 if(dirichlet_bc.find(boundary_id) != dirichlet_bc.end())
92 if(dirichlet_cached_bc.find(boundary_id) != dirichlet_cached_bc.end())
95 if(neumann_bc.find(boundary_id) != neumann_bc.end())
98 if(periodic_boundary_ids.find(boundary_id) != periodic_boundary_ids.end())
101 AssertThrow(counter == 1,
102 dealii::ExcMessage(
"Boundary face with non-unique boundary type found."));
106 set_dirichlet_cached_data(
109 dirichlet_cached_data = interface_data;
112 std::shared_ptr<ContainerInterfaceData<rank, dim, double>
const>
113 get_dirichlet_cached_data()
const
115 AssertThrow(dirichlet_cached_data.get(),
116 dealii::ExcMessage(
"Pointer to ContainerInterfaceData has not been initialized."));
118 return dirichlet_cached_data;
122 mutable std::shared_ptr<ContainerInterfaceData<rank, dim, double>
const> dirichlet_cached_data;