16 #ifndef dealii_fe_interface_values_h 17 #define dealii_fe_interface_values_h 52 template <
int dim,
int spacedim = dim>
123 template <
class CellIteratorType>
125 reinit(
const CellIteratorType & cell,
126 const unsigned int face_no,
127 const unsigned int sub_face_no,
129 const unsigned int face_no_neighbor,
130 const unsigned int sub_face_no_neighbor);
143 template <
class CellIteratorType>
145 reinit(
const CellIteratorType &cell,
const unsigned int face_no);
207 JxW(
const unsigned int quadrature_point)
const;
214 const std::vector<double> &
226 const std::vector<Tensor<1, spacedim>> &
234 const std::vector<Point<spacedim>> &
261 std::vector<types::global_dof_index>
275 std::array<unsigned int, 2>
287 normal(
const unsigned int q_point_index)
const;
321 const unsigned int interface_dof_index,
322 const unsigned int q_point,
323 const unsigned int component = 0)
const;
340 jump(
const unsigned int interface_dof_index,
341 const unsigned int q_point,
342 const unsigned int component = 0)
const;
354 average(
const unsigned int interface_dof_index,
355 const unsigned int q_point,
356 const unsigned int component = 0)
const;
369 const unsigned int q_point,
370 const unsigned int component = 0)
const;
384 const unsigned int q_point,
385 const unsigned int component = 0)
const;
398 const unsigned int q_point,
399 const unsigned int component = 0)
const;
413 const unsigned int q_point,
414 const unsigned int component = 0)
const;
427 const unsigned int q_point,
428 const unsigned int component = 0)
const;
445 std::vector<std::array<unsigned int, 2>>
dofmap;
487 template <
int dim,
int spacedim>
502 template <
int dim,
int spacedim>
522 template <
int dim,
int spacedim>
529 fe.
reference_cell().template get_default_linear_mapping<dim, spacedim>(),
534 fe.
reference_cell().template get_default_linear_mapping<dim, spacedim>(),
539 fe.
reference_cell().template get_default_linear_mapping<dim, spacedim>(),
544 fe.
reference_cell().template get_default_linear_mapping<dim, spacedim>(),
554 template <
int dim,
int spacedim>
555 template <
class CellIteratorType>
558 const CellIteratorType & cell,
559 const unsigned int face_no,
560 const unsigned int sub_face_no,
562 const unsigned int face_no_neighbor,
563 const unsigned int sub_face_no_neighbor)
584 sub_face_no_neighbor);
597 std::vector<types::global_dof_index> v(
599 cell->get_active_or_mg_dof_indices(v);
600 std::vector<types::global_dof_index> v2(
602 cell_neighbor->get_active_or_mg_dof_indices(v2);
608 std::map<types::global_dof_index, std::pair<unsigned int, unsigned int>>
610 std::pair<unsigned int, unsigned int> invalid_entry(
613 for (
unsigned int i = 0; i < v.size(); ++i)
616 auto result = tempmap.insert(std::make_pair(v[i], invalid_entry));
617 result.first->second.first = i;
620 for (
unsigned int i = 0; i < v2.size(); ++i)
623 auto result = tempmap.insert(std::make_pair(v2[i], invalid_entry));
624 result.first->second.second = i;
628 dofmap.resize(tempmap.size());
630 unsigned int idx = 0;
631 for (
auto &x : tempmap)
634 dofmap[idx] = {{x.second.first, x.second.second}};
642 template <
int dim,
int spacedim>
643 template <
class CellIteratorType>
646 const unsigned int face_no)
666 template <
int dim,
int spacedim>
671 ExcMessage(
"This call requires a call to reinit() first."));
677 template <
int dim,
int spacedim>
678 const std::vector<double> &
682 ExcMessage(
"This call requires a call to reinit() first."));
688 template <
int dim,
int spacedim>
689 const std::vector<Tensor<1, spacedim>> &
693 ExcMessage(
"This call requires a call to reinit() first."));
699 template <
int dim,
int spacedim>
708 template <
int dim,
int spacedim>
717 template <
int dim,
int spacedim>
726 template <
int dim,
int spacedim>
727 const std::vector<Point<spacedim>> &
731 ExcMessage(
"This call requires a call to reinit() first."));
737 template <
int dim,
int spacedim>
746 template <
int dim,
int spacedim>
753 "n_current_interface_dofs() is only available after a call to reinit()."));
759 template <
int dim,
int spacedim>
768 template <
int dim,
int spacedim>
769 std::vector<types::global_dof_index>
777 template <
int dim,
int spacedim>
778 std::array<unsigned int, 2>
780 const unsigned int interface_dof_index)
const 783 return dofmap[interface_dof_index];
788 template <
int dim,
int spacedim>
791 const unsigned int cell_index)
const 797 "You are on a boundary, so you can only ask for the first FEFaceValues object."));
804 template <
int dim,
int spacedim>
813 template <
int dim,
int spacedim>
816 const bool here_or_there,
817 const unsigned int interface_dof_index,
818 const unsigned int q_point,
819 const unsigned int component)
const 821 const auto dof_pair =
dofmap[interface_dof_index];
837 template <
int dim,
int spacedim>
840 const unsigned int q_point,
841 const unsigned int component)
const 843 const auto dof_pair =
dofmap[interface_dof_index];
860 template <
int dim,
int spacedim>
863 const unsigned int interface_dof_index,
864 const unsigned int q_point,
865 const unsigned int component)
const 867 const auto dof_pair =
dofmap[interface_dof_index];
890 template <
int dim,
int spacedim>
893 const unsigned int interface_dof_index,
894 const unsigned int q_point,
895 const unsigned int component)
const 897 const auto dof_pair =
dofmap[interface_dof_index];
920 template <
int dim,
int spacedim>
923 const unsigned int interface_dof_index,
924 const unsigned int q_point,
925 const unsigned int component)
const 927 const auto dof_pair =
dofmap[interface_dof_index];
950 template <
int dim,
int spacedim>
953 const unsigned int interface_dof_index,
954 const unsigned int q_point,
955 const unsigned int component)
const 957 const auto dof_pair =
dofmap[interface_dof_index];
980 template <
int dim,
int spacedim>
983 const unsigned int interface_dof_index,
984 const unsigned int q_point,
985 const unsigned int component)
const 987 const auto dof_pair =
dofmap[interface_dof_index];
1009 template <
int dim,
int spacedim>
1012 const unsigned int interface_dof_index,
1013 const unsigned int q_point,
1014 const unsigned int component)
const 1016 const auto dof_pair =
dofmap[interface_dof_index];
Tensor< 2, spacedim > jump_hessian(const unsigned int interface_dof_index, const unsigned int q_point, const unsigned int component=0) const
static const unsigned int invalid_unsigned_int
std::vector< std::array< unsigned int, 2 > > dofmap
#define AssertDimension(dim1, dim2)
double average(const unsigned int interface_dof_index, const unsigned int q_point, const unsigned int component=0) const
double JxW(const unsigned int quadrature_point) const
void reinit(const CellIteratorType &cell, const unsigned int face_no, const unsigned int sub_face_no, const typename identity< CellIteratorType >::type &cell_neighbor, const unsigned int face_no_neighbor, const unsigned int sub_face_no_neighbor)
std::array< unsigned int, 2 > interface_dof_to_dof_indices(const unsigned int interface_dof_index) const
#define AssertIndexRange(index, range)
Tensor< 1, spacedim > average_gradient(const unsigned int interface_dof_index, const unsigned int q_point, const unsigned int component=0) const
FEFaceValues< dim, spacedim > internal_fe_face_values
Tensor< 1, spacedim > normal(const unsigned int q_point_index) const
Tensor< 1, spacedim > jump_gradient(const unsigned int interface_dof_index, const unsigned int q_point, const unsigned int component=0) const
FEFaceValues< dim, spacedim > internal_fe_face_values_neighbor
Tensor< 2, spacedim > average_hessian(const unsigned int interface_dof_index, const unsigned int q_point, const unsigned int component=0) const
std::vector< types::global_dof_index > interface_dof_indices
const Mapping< dim, spacedim > & get_mapping() const
static ::ExceptionBase & ExcMessage(std::string arg1)
unsigned int max_n_quadrature_points() const
#define Assert(cond, exc)
double shape_value(const bool here_or_there, const unsigned int interface_dof_index, const unsigned int q_point, const unsigned int component=0) const
unsigned n_current_interface_dofs() const
Abstract base class for mapping classes.
#define DEAL_II_NAMESPACE_CLOSE
FEFaceValuesBase< dim, spacedim > * fe_face_values_neighbor
const std::vector< Tensor< 1, spacedim > > & get_normal_vectors() const
const Quadrature< dim - 1 > & get_quadrature() const
FEInterfaceValues(const Mapping< dim, spacedim > &mapping, const FiniteElement< dim, spacedim > &fe, const Quadrature< dim - 1 > &quadrature, const UpdateFlags update_flags)
unsigned int size() const
FESubfaceValues< dim, spacedim > internal_fe_subface_values
std::vector< types::global_dof_index > get_interface_dof_indices() const
const unsigned int n_quadrature_points
Tensor< 3, spacedim > jump_3rd_derivative(const unsigned int interface_dof_index, const unsigned int q_point, const unsigned int component=0) const
#define DEAL_II_NAMESPACE_OPEN
UpdateFlags get_update_flags() const
const FEFaceValuesBase< dim, spacedim > & get_fe_face_values(const unsigned int cell_index) const
const std::vector< double > & get_JxW_values() const
const FiniteElement< dim, spacedim > & get_fe() const
const std::vector< Point< spacedim > > & get_quadrature_points() const
double jump(const unsigned int interface_dof_index, const unsigned int q_point, const unsigned int component=0) const
FESubfaceValues< dim, spacedim > internal_fe_subface_values_neighbor
FEFaceValuesBase< dim, spacedim > * fe_face_values
ReferenceCell reference_cell() const