16 #ifndef dealii_fe_interface_values_h 17 #define dealii_fe_interface_values_h 52 template <
int dim,
int spacedim = dim>
113 template <
class CellIteratorType>
115 reinit(
const CellIteratorType & cell,
116 const unsigned int face_no,
117 const unsigned int sub_face_no,
119 const unsigned int face_no_neighbor,
120 const unsigned int sub_face_no_neighbor);
133 template <
class CellIteratorType>
135 reinit(
const CellIteratorType &cell,
const unsigned int face_no);
185 JxW(
const unsigned int quadrature_point)
const;
192 const std::vector<double> &
204 const std::vector<Tensor<1, spacedim>> &
212 const std::vector<Point<spacedim>> &
239 std::vector<types::global_dof_index>
253 std::array<unsigned int, 2>
265 normal(
const unsigned int q_point_index)
const;
299 const unsigned int interface_dof_index,
300 const unsigned int q_point,
301 const unsigned int component = 0)
const;
318 jump(
const unsigned int interface_dof_index,
319 const unsigned int q_point,
320 const unsigned int component = 0)
const;
332 average(
const unsigned int interface_dof_index,
333 const unsigned int q_point,
334 const unsigned int component = 0)
const;
347 const unsigned int q_point,
348 const unsigned int component = 0)
const;
362 const unsigned int q_point,
363 const unsigned int component = 0)
const;
376 const unsigned int q_point,
377 const unsigned int component = 0)
const;
391 const unsigned int q_point,
392 const unsigned int component = 0)
const;
405 const unsigned int q_point,
406 const unsigned int component = 0)
const;
423 std::vector<std::array<unsigned int, 2>>
dofmap;
465 template <
int dim,
int spacedim>
482 template <
int dim,
int spacedim>
510 template <
int dim,
int spacedim>
511 template <
class CellIteratorType>
514 const CellIteratorType & cell,
515 const unsigned int face_no,
516 const unsigned int sub_face_no,
518 const unsigned int face_no_neighbor,
519 const unsigned int sub_face_no_neighbor)
540 sub_face_no_neighbor);
547 std::vector<types::global_dof_index> v(
549 cell->get_active_or_mg_dof_indices(v);
550 std::vector<types::global_dof_index> v2(
552 cell_neighbor->get_active_or_mg_dof_indices(v2);
558 std::map<types::global_dof_index, std::pair<unsigned int, unsigned int>>
560 std::pair<unsigned int, unsigned int> invalid_entry(
563 for (
unsigned int i = 0; i < v.size(); ++i)
566 auto result = tempmap.insert(std::make_pair(v[i], invalid_entry));
567 result.first->second.first = i;
570 for (
unsigned int i = 0; i < v2.size(); ++i)
573 auto result = tempmap.insert(std::make_pair(v2[i], invalid_entry));
574 result.first->second.second = i;
578 dofmap.resize(tempmap.size());
580 unsigned int idx = 0;
581 for (
auto &x : tempmap)
584 dofmap[idx] = {{x.second.first, x.second.second}};
592 template <
int dim,
int spacedim>
593 template <
class CellIteratorType>
596 const unsigned int face_no)
616 template <
int dim,
int spacedim>
621 ExcMessage(
"This call requires a call to reinit() first."));
627 template <
int dim,
int spacedim>
628 const std::vector<double> &
632 ExcMessage(
"This call requires a call to reinit() first."));
638 template <
int dim,
int spacedim>
639 const std::vector<Tensor<1, spacedim>> &
643 ExcMessage(
"This call requires a call to reinit() first."));
649 template <
int dim,
int spacedim>
658 template <
int dim,
int spacedim>
659 const std::vector<Point<spacedim>> &
663 ExcMessage(
"This call requires a call to reinit() first."));
669 template <
int dim,
int spacedim>
678 template <
int dim,
int spacedim>
685 "n_current_interface_dofs() is only available after a call to reinit()."));
691 template <
int dim,
int spacedim>
700 template <
int dim,
int spacedim>
701 std::vector<types::global_dof_index>
709 template <
int dim,
int spacedim>
710 std::array<unsigned int, 2>
712 const unsigned int interface_dof_index)
const 715 return dofmap[interface_dof_index];
720 template <
int dim,
int spacedim>
723 const unsigned int cell_index)
const 729 "You are on a boundary, so you can only ask for the first FEFaceValues object."));
736 template <
int dim,
int spacedim>
745 template <
int dim,
int spacedim>
748 const bool here_or_there,
749 const unsigned int interface_dof_index,
750 const unsigned int q_point,
751 const unsigned int component)
const 753 const auto dof_pair =
dofmap[interface_dof_index];
769 template <
int dim,
int spacedim>
772 const unsigned int q_point,
773 const unsigned int component)
const 775 const auto dof_pair =
dofmap[interface_dof_index];
792 template <
int dim,
int spacedim>
795 const unsigned int interface_dof_index,
796 const unsigned int q_point,
797 const unsigned int component)
const 799 const auto dof_pair =
dofmap[interface_dof_index];
822 template <
int dim,
int spacedim>
825 const unsigned int interface_dof_index,
826 const unsigned int q_point,
827 const unsigned int component)
const 829 const auto dof_pair =
dofmap[interface_dof_index];
852 template <
int dim,
int spacedim>
855 const unsigned int interface_dof_index,
856 const unsigned int q_point,
857 const unsigned int component)
const 859 const auto dof_pair =
dofmap[interface_dof_index];
882 template <
int dim,
int spacedim>
885 const unsigned int interface_dof_index,
886 const unsigned int q_point,
887 const unsigned int component)
const 889 const auto dof_pair =
dofmap[interface_dof_index];
912 template <
int dim,
int spacedim>
915 const unsigned int interface_dof_index,
916 const unsigned int q_point,
917 const unsigned int component)
const 919 const auto dof_pair =
dofmap[interface_dof_index];
941 template <
int dim,
int spacedim>
944 const unsigned int interface_dof_index,
945 const unsigned int q_point,
946 const unsigned int component)
const 948 const auto dof_pair =
dofmap[interface_dof_index];
void reinit(const TriaIterator< DoFCellAccessor< DoFHandlerType< dim, spacedim >, level_dof_access >> &cell, const unsigned int face_no, const unsigned int subface_no)
static const unsigned int invalid_unsigned_int
Tensor< 2, dim > average_hessian(const unsigned int interface_dof_index, const unsigned int q_point, const unsigned int component=0) const
std::vector< std::array< unsigned int, 2 > > dofmap
FESubfaceValues< dim > internal_fe_subface_values
double average(const unsigned int interface_dof_index, const unsigned int q_point, const unsigned int component=0) const
FEFaceValues< dim > internal_fe_face_values_neighbor
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
Tensor< 1, dim > average_gradient(const unsigned int interface_dof_index, const unsigned int q_point, const unsigned int component=0) const
#define AssertIndexRange(index, range)
FEFaceValuesBase< dim > * fe_face_values_neighbor
Tensor< 3, dim > jump_3rd_derivative(const unsigned int interface_dof_index, const unsigned int q_point, const unsigned int component=0) const
const FiniteElement< dim, spacedim > & get_fe() const
Tensor< 1, spacedim > normal(const unsigned int q_point_index) const
UpdateFlags get_update_flags() const
std::vector< types::global_dof_index > interface_dof_indices
const Quadrature< dim - 1 > & get_quadrature() const
const std::vector< Point< spacedim > > & get_quadrature_points() const
FEFaceValues< dim > internal_fe_face_values
static ::ExceptionBase & ExcMessage(std::string arg1)
FESubfaceValues< dim > internal_fe_subface_values_neighbor
#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.
FEFaceValuesBase< dim > * fe_face_values
#define DEAL_II_NAMESPACE_CLOSE
const std::vector< Tensor< 1, spacedim > > & get_normal_vectors() const
Tensor< 1, dim > jump_gradient(const unsigned int interface_dof_index, const unsigned int q_point, const unsigned int component=0) 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
std::vector< types::global_dof_index > get_interface_dof_indices() const
const unsigned int n_quadrature_points
const std::vector< double > & get_JxW_values() const
double JxW(const unsigned int quadrature_point) 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
void reinit(const TriaIterator< DoFCellAccessor< DoFHandlerType< dim, spacedim >, level_dof_access >> &cell, const unsigned int face_no)
const std::vector< Tensor< 1, spacedim > > & get_normal_vectors() 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
Tensor< 2, dim > jump_hessian(const unsigned int interface_dof_index, const unsigned int q_point, const unsigned int component=0) const
const Tensor< 1, spacedim > & normal_vector(const unsigned int i) const