![]() |
deal.II version GIT relicensing-3104-g8c3bc2e695 2025-04-21 18:40:00+00:00
|
Class which transforms dim - 1
-dimensional quadrature rules to dim
-dimensional face quadratures.
More...
#include <deal.II/base/qprojector.h>
Classes | |
class | DataSetDescriptor |
Class storing the offset index into a Quadrature rule created by project_to_all_faces() or project_to_all_subfaces(). More... | |
Public Types | |
using | SubQuadrature = Quadrature< dim - 1 > |
Public Member Functions | |
void | project_to_face (const ReferenceCell &reference_cell, const Quadrature< 0 > &quadrature, const unsigned int face_no, std::vector< Point< 1 > > &q_points) |
void | project_to_face (const ReferenceCell &reference_cell, const Quadrature< 1 > &quadrature, const unsigned int face_no, std::vector< Point< 2 > > &q_points) |
void | project_to_face (const ReferenceCell &reference_cell, const Quadrature< 2 > &quadrature, const unsigned int face_no, std::vector< Point< 3 > > &q_points) |
void | project_to_subface (const ReferenceCell &reference_cell, const Quadrature< 0 > &, const unsigned int face_no, const unsigned int, std::vector< Point< 1 > > &q_points, const RefinementCase< 0 > &) |
void | project_to_subface (const ReferenceCell &reference_cell, const Quadrature< 1 > &quadrature, const unsigned int face_no, const unsigned int subface_no, std::vector< Point< 2 > > &q_points, const RefinementCase< 1 > &ref_case) |
void | project_to_subface (const ReferenceCell &reference_cell, const Quadrature< 2 > &quadrature, const unsigned int face_no, const unsigned int subface_no, std::vector< Point< 3 > > &q_points, const RefinementCase< 2 > &ref_case) |
Quadrature< 1 > | project_to_all_subfaces (const ReferenceCell &reference_cell, const Quadrature< 0 > &quadrature) |
Quadrature< 2 > | project_to_all_subfaces (const ReferenceCell &reference_cell, const SubQuadrature &quadrature) |
Quadrature< 3 > | project_to_all_subfaces (const ReferenceCell &reference_cell, const SubQuadrature &quadrature) |
Static Public Member Functions | |
static void | project_to_face (const ReferenceCell &reference_cell, const SubQuadrature &quadrature, const unsigned int face_no, std::vector< Point< dim > > &q_points) |
static Quadrature< dim > | project_to_face (const ReferenceCell &reference_cell, const SubQuadrature &quadrature, const unsigned int face_no) |
static Quadrature< dim > | project_to_oriented_face (const ReferenceCell &reference_cell, const SubQuadrature &quadrature, const unsigned int face_no, const bool face_orientation, const bool face_flip, const bool face_rotation) |
static Quadrature< dim > | project_to_face (const ReferenceCell &reference_cell, const SubQuadrature &quadrature, const unsigned int face_no, const types::geometric_orientation orientation) |
static void | project_to_subface (const ReferenceCell &reference_cell, const SubQuadrature &quadrature, const unsigned int face_no, const unsigned int subface_no, std::vector< Point< dim > > &q_points, const RefinementCase< dim - 1 > &ref_case=RefinementCase< dim - 1 >::isotropic_refinement) |
static Quadrature< dim > | project_to_subface (const ReferenceCell &reference_cell, const SubQuadrature &quadrature, const unsigned int face_no, const unsigned int subface_no, const RefinementCase< dim - 1 > &ref_case=RefinementCase< dim - 1 >::isotropic_refinement) |
static Quadrature< dim > | project_to_oriented_subface (const ReferenceCell &reference_cell, const SubQuadrature &quadrature, const unsigned int face_no, const unsigned int subface_no, const bool face_orientation, const bool face_flip, const bool face_rotation, const internal::SubfaceCase< dim > ref_case) |
static Quadrature< dim > | project_to_subface (const ReferenceCell &reference_cell, const SubQuadrature &quadrature, const unsigned int face_no, const unsigned int subface_no, const types::geometric_orientation orientation, const RefinementCase< dim - 1 > &ref_case) |
static Quadrature< dim > | project_to_all_faces (const ReferenceCell &reference_cell, const hp::QCollection< dim - 1 > &quadrature) |
static Quadrature< dim > | project_to_all_faces (const ReferenceCell &reference_cell, const Quadrature< dim - 1 > &quadrature) |
static Quadrature< dim > | project_to_all_subfaces (const ReferenceCell &reference_cell, const SubQuadrature &quadrature) |
static Quadrature< dim > | project_to_child (const ReferenceCell &reference_cell, const Quadrature< dim > &quadrature, const unsigned int child_no) |
static Quadrature< dim > | project_to_all_children (const ReferenceCell &reference_cell, const Quadrature< dim > &quadrature) |
static Quadrature< dim > | project_to_line (const ReferenceCell &reference_cell, const Quadrature< 1 > &quadrature, const Point< dim > &p1, const Point< dim > &p2) |
Class which transforms dim - 1
-dimensional quadrature rules to dim
-dimensional face quadratures.
The majority of the finite element infrastructure, such as FE_Q and FE_SimplexP, uses polynomials defined on a reference cell: for example, FE_Q<3> defines a polynomial space whose domain is the unit hexahedron (i.e., ReferenceCells::Hexahedron). Hence, computing quadratures using shape functions on a face of a reference cell requires converting a lower-dimensional Quadrature into one defined on the boundary of the higher-dimensional object, e.g., converting a Quadrature defined on a quadrilateral into one defined on one face of a hexahedron.
QProjector computes the locations of quadrature points on faces or subfaces of reference cells from a Quadrature of one dimension less than that of the cell, face (and possibly also subface) number, and orientation. For example, calling QProjector::project_to_face() with QSimpson<1>, face number 1, and numbers::default_geometric_orientation returns a Quadrature with points (1,0), (1,0.5), and (1,1) with weights equal to the 1d case. Similarly, if we instead use face 3 and numbers::reverse_line_orientation we obtain points (1,1), (0.5,1) and (0,1). Projection to subfaces works in the same way.
In practice, computing face integrals (e.g., via FEFaceValues or FESubfaceValues) requires quadrature rules for all possible permutations of face number, subface number, and orientation. This class provides several functions for doing just that, such as QProjector::project_to_all_faces(). Furthermore, the DataSetDescriptor class implements indexing for converting between face number, subface number, and orientation to the index of the associated Quadrature rule.
Definition at line 68 of file qprojector.h.
using QProjector< dim >::SubQuadrature = Quadrature<dim - 1> |
Define an alias for a quadrature that acts on an object of one dimension less. For cells, this would then be a face quadrature.
Definition at line 75 of file qprojector.h.
|
static |
Compute the quadrature points on the cell if the given quadrature formula is used on face face_no
. For further details, see the general doc for this class.
|
static |
Compute the cell quadrature formula corresponding to using quadrature
on face face_no
. For further details, see the general doc for this class.
Definition at line 1238 of file qprojector.cc.
|
static |
Compute the cell quadrature formula corresponding to using quadrature
on face face_no
taking into account the orientation of the face. For further details, see the general doc for this class.
Definition at line 459 of file qprojector.cc.
|
static |
Compute the cell quadrature formula corresponding to using quadrature
on face face_no
. For further details, see the general doc for this class.
Definition at line 479 of file qprojector.cc.
|
static |
Compute the quadrature points on the cell if the given quadrature formula is used on face face_no
, subface number subface_no
corresponding to RefineCase::Type ref_case
. The last argument is only used in 3d.
|
static |
Compute the cell quadrature formula corresponding to using quadrature
on subface subface_no
of face face_no
with RefinementCase<dim-1> ref_case
. The last argument is only used in 3d.
Definition at line 1255 of file qprojector.cc.
|
static |
Compute the cell quadrature formula corresponding to using quadrature
on subface subface_no
of face face_no
with SubfaceCase<dim> ref_case
. The last argument is only used in 3d.
Definition at line 580 of file qprojector.cc.
|
static |
Compute the cell quadrature formula corresponding to using quadrature
on subface subface_no
of face face_no
with RefinementCase<dim-1> ref_case
. The last argument is only used in 3d.
Definition at line 602 of file qprojector.cc.
|
static |
Take a collection of face quadrature formulas and generate a cell quadrature formula from it where the quadrature points of the given argument are projected on all faces.
The weights of the new rule are replications of the original weights. Thus, the sum of the weights is not one, but the number of faces, which is the surface of the reference cell.
This in particular allows us to extract a subset of points corresponding to a single face and use it as a quadrature on this face, as is done in FEFaceValues.
Definition at line 720 of file qprojector.cc.
|
inlinestatic |
Like the above function, applying the same face quadrature formula on all faces.
Definition at line 538 of file qprojector.h.
|
static |
Take a face quadrature formula and generate a cell quadrature formula from it where the quadrature points of the given argument are projected on all subfaces.
Like in project_to_all_faces(), the weights of the new rule sum up to the number of faces (not subfaces), which is the surface of the reference cell.
This in particular allows us to extract a subset of points corresponding to a single subface and use it as a quadrature on this face, as is done in FESubfaceValues.
|
static |
Project a given quadrature formula to a child of a cell. You may want to use this function in case you want to extend an integral only over the area which a potential child would occupy. The child numbering is the same as the children would be numbered upon refinement of the cell.
As integration using this quadrature formula now only extends over a fraction of the cell, the weights of the resulting object are divided by GeometryInfo<dim>::children_per_cell.
Definition at line 920 of file qprojector.cc.
|
static |
Project a quadrature rule to all children of a cell. Similarly to project_to_all_subfaces(), this function replicates the formula generated by project_to_child() for all children, such that the weights sum up to one, the volume of the total cell again.
The child numbering is the same as the children would be numbered upon refinement of the cell.
Definition at line 952 of file qprojector.cc.
|
static |
Project the one dimensional rule quadrature
to the straight line connecting the points p1
and p2
.
Definition at line 984 of file qprojector.cc.
void QProjector< 1 >::project_to_face | ( | const ReferenceCell & | reference_cell, |
const Quadrature< 0 > & | quadrature, | ||
const unsigned int | face_no, | ||
std::vector< Point< 1 > > & | q_points | ||
) |
Definition at line 402 of file qprojector.cc.
void QProjector< 2 >::project_to_face | ( | const ReferenceCell & | reference_cell, |
const Quadrature< 1 > & | quadrature, | ||
const unsigned int | face_no, | ||
std::vector< Point< 2 > > & | q_points | ||
) |
Definition at line 420 of file qprojector.cc.
void QProjector< 3 >::project_to_face | ( | const ReferenceCell & | reference_cell, |
const Quadrature< 2 > & | quadrature, | ||
const unsigned int | face_no, | ||
std::vector< Point< 3 > > & | q_points | ||
) |
Definition at line 438 of file qprojector.cc.
void QProjector< 1 >::project_to_subface | ( | const ReferenceCell & | reference_cell, |
const Quadrature< 0 > & | , | ||
const unsigned int | face_no, | ||
const unsigned int | , | ||
std::vector< Point< 1 > > & | q_points, | ||
const RefinementCase< 0 > & | |||
) |
Definition at line 513 of file qprojector.cc.
void QProjector< 2 >::project_to_subface | ( | const ReferenceCell & | reference_cell, |
const Quadrature< 1 > & | quadrature, | ||
const unsigned int | face_no, | ||
const unsigned int | subface_no, | ||
std::vector< Point< 2 > > & | q_points, | ||
const RefinementCase< 1 > & | ref_case | ||
) |
Definition at line 534 of file qprojector.cc.
void QProjector< 3 >::project_to_subface | ( | const ReferenceCell & | reference_cell, |
const Quadrature< 2 > & | quadrature, | ||
const unsigned int | face_no, | ||
const unsigned int | subface_no, | ||
std::vector< Point< 3 > > & | q_points, | ||
const RefinementCase< 2 > & | ref_case | ||
) |
Definition at line 556 of file qprojector.cc.
Quadrature< 1 > QProjector< 1 >::project_to_all_subfaces | ( | const ReferenceCell & | reference_cell, |
const Quadrature< 0 > & | quadrature | ||
) |
Definition at line 756 of file qprojector.cc.
Quadrature< 2 > QProjector< 2 >::project_to_all_subfaces | ( | const ReferenceCell & | reference_cell, |
const SubQuadrature & | quadrature | ||
) |
Definition at line 803 of file qprojector.cc.
Quadrature< 3 > QProjector< 3 >::project_to_all_subfaces | ( | const ReferenceCell & | reference_cell, |
const SubQuadrature & | quadrature | ||
) |
Definition at line 854 of file qprojector.cc.