Reference documentation for deal.II version 9.4.1
|
#include <deal.II/non_matching/immersed_surface_quadrature.h>
Public Types | |
using | SubQuadrature = Quadrature< dim==0 ? 0 :dim - 1 > |
Public Member Functions | |
ImmersedSurfaceQuadrature ()=default | |
ImmersedSurfaceQuadrature (const std::vector< Point< dim > > &points, const std::vector< double > &weights, const std::vector< Tensor< 1, spacedim > > &normals) | |
void | push_back (const Point< dim > &point, const double weight, const Tensor< 1, spacedim > &normal) |
const Tensor< 1, spacedim > & | normal_vector (const unsigned int i) const |
const std::vector< Tensor< 1, spacedim > > & | get_normal_vectors () const |
bool | operator== (const Quadrature< dim > &p) const |
void | initialize (const std::vector< Point< dim > > &points, const std::vector< double > &weights) |
unsigned int | size () const |
const Point< dim > & | point (const unsigned int i) const |
const std::vector< Point< dim > > & | get_points () const |
double | weight (const unsigned int i) const |
const std::vector< double > & | get_weights () const |
std::size_t | memory_consumption () const |
template<class Archive > | |
void | serialize (Archive &ar, const unsigned int version) |
bool | is_tensor_product () const |
const std::array< Quadrature< 1 >, dim > & | get_tensor_basis () const |
Protected Attributes | |
std::vector< Tensor< 1, spacedim > > | normals |
std::vector< Point< dim > > | quadrature_points |
std::vector< double > | weights |
bool | is_tensor_product_flag |
std::unique_ptr< std::array< Quadrature< 1 >, dim > > | tensor_basis |
Subscriptor functionality | |
Classes derived from Subscriptor provide a facility to subscribe to this object. This is mostly used by the SmartPointer class. | |
void | subscribe (std::atomic< bool > *const validity, const std::string &identifier="") const |
void | unsubscribe (std::atomic< bool > *const validity, const std::string &identifier="") const |
unsigned int | n_subscriptions () const |
template<typename StreamType > | |
void | list_subscribers (StreamType &stream) const |
void | list_subscribers () const |
using | map_value_type = decltype(counter_map)::value_type |
using | map_iterator = decltype(counter_map)::iterator |
std::atomic< unsigned int > | counter |
std::map< std::string, unsigned int > | counter_map |
std::vector< std::atomic< bool > * > | validity_pointers |
const std::type_info * | object_info |
static std::mutex | mutex |
static ::ExceptionBase & | ExcInUse (int arg1, std::string arg2, std::string arg3) |
static ::ExceptionBase & | ExcNoSubscriber (std::string arg1, std::string arg2) |
void | check_no_subscribers () const noexcept |
This class defines a quadrature formula to integrate over the intersection between an oriented surface, \(\hat{S}\), and a cell or face. The word "immersed" in the class name reflects that the surface may intersect the cell/face in an arbitrary way.
The spacedim template parameter of this class is the dimension that the (spacedim-1)-dimensional surface is embedded in: \(\hat{S} \subset \mathbb{R}^{\text{spacedim}}\). The dim parameter describes the dimension of the "object" that the surface intersects. That is, dim = spacedim corresponds to the surface intersecting a cell and dim = spacedim - 1 corresponds to the surface intersecting a face. The quadrature formula is described by a set of quadrature points, \(\hat{x}_q \in \mathbb{R}^{\text{dim}}\), weights, \(w_q\), and normalized surface normals, \(\hat{n}_q \in \mathbb{R}^{\text{spacedim}}\).
Consider first the case dim = spacedim. We typically want to compute integrals in real space. A surface, \(S\), intersecting a cell, \(K\), in real space can be mapped onto a surface, \(\hat{S}\), intersecting the unit cell, \(\hat{K}\). Thus an integral over \(S\cap K\) in real space can be transformed to an integral over \(\hat{S} \cap \hat{K}\) according to
\[ \int_{S\cap K} f dS = \int_{S\cap K} f |d\bar{S}| = \int_{\hat{S}\cap\hat{K}} f \circ F_{K} \det(J) |\left( J^{-1} \right )^T d\hat{S}|, \]
where \(F_K\) is the mapping from reference to real space and \(J\) is its Jacobian matrix. This transformation is possible since the continuous surface elements are vectors: \(d\bar{S}, d\hat{S} \in \mathbb{R}^{spacedim}\), which are parallel to the normals of \(S\) and \(\hat{S}\). That is, the normal is needed to do the transformation. Thus, in addition to storing points and weights, this quadrature stores also the normalized normal for each quadrature point. This can be viewed as storing a discrete surface element,
\[ \Delta \hat{S}_q \dealcoloneq w_q \hat{n}_q \approx d\hat{S}(\hat{x}_q), \]
for each quadrature point. The surface integral in real space would then be approximated as
\[ \int_{S\cap K} f dS \approx \sum_{q} f \left(F_{K}(\hat{x}_{q}) \right) \det(J_q) |\left( J_q^{-1} \right)^T \hat{n}_q| w_q. \]
When dim = spacedim - 1, this class represents a (spacedim-2)-dimensional integral. That is, if spacedim = 3 we have a line integral immersed in a face. Here, the transformation between the face, \(F\), and reference face, \(\hat{F}\), reads
\[ \int_{S\cap F} f dr = \int_{S\cap F} f |d\bar{r}| = \int_{\hat{S}\cap\hat{F}} f \circ F_{K} | J d\hat{r}| \approx \sum_{q} f \left(F_{K}(\hat{x}_{q}) \right) |J_q \hat{t}_q| w_q, \]
where \(\hat{t}_q = \hat{n}_q \times \hat{n}_F\) is the tangent to the curve at \(\hat{x}_q\) and \(\hat{n}_F\) is the face normal. It would be possible to compute the tangent by only knowing the normal to the curve in the face plane (i.e. the dim-dimensional normal). However, when these quadratures are used, the weak form typically involves the so-called conormal, which can not be computed without knowing the surface normal in \(\mathbb{R}^{\text{spacedim}}\). The conormal is the unit vector parallel to the projection of the face normal into the surface plane. This is essentially the same thing as the normalized boundary form.
Definition at line 101 of file immersed_surface_quadrature.h.
|
inherited |
Define an alias for a quadrature that acts on an object of one dimension less. For cells, this would then be a face quadrature. A sub quadrature of a 0-dimensional quadrature is defined as still being 0-dimensional.
Definition at line 94 of file quadrature.h.
|
default |
Default constructor to initialize the quadrature with no quadrature points.
NonMatching::ImmersedSurfaceQuadrature< dim, spacedim >::ImmersedSurfaceQuadrature | ( | const std::vector< Point< dim > > & | points, |
const std::vector< double > & | weights, | ||
const std::vector< Tensor< 1, spacedim > > & | normals | ||
) |
Construct a quadrature formula from vectors of points, weights and surface normals. The points, weights and normals should be with respect to reference space, and the normals should be normalized.
Definition at line 22 of file immersed_surface_quadrature.cc.
void NonMatching::ImmersedSurfaceQuadrature< dim, spacedim >::push_back | ( | const Point< dim > & | point, |
const double | weight, | ||
const Tensor< 1, spacedim > & | normal | ||
) |
Extend the given formula by an additional quadrature point. The point, weight and normal should be with respect to reference space, and the normal should be normalized.
This function exists since immersed quadrature rules can be rather complicated to construct. Often the construction is done by partitioning the cell into regions and constructing points on each region separately. This can make it cumbersome to create the quadrature from the constructor since all quadrature points have to be known at time of creation of the object.
Definition at line 43 of file immersed_surface_quadrature.cc.
const Tensor< 1, spacedim > & NonMatching::ImmersedSurfaceQuadrature< dim, spacedim >::normal_vector | ( | const unsigned int | i | ) | const |
Return a reference to the i
th surface normal.
Definition at line 59 of file immersed_surface_quadrature.cc.
const std::vector< Tensor< 1, spacedim > > & NonMatching::ImmersedSurfaceQuadrature< dim, spacedim >::get_normal_vectors |
Return a reference to the whole vector of normals.
Definition at line 70 of file immersed_surface_quadrature.cc.
|
inherited |
Test for equality of two quadratures.
Definition at line 304 of file quadrature.cc.
|
inherited |
Set the quadrature points and weights to the values provided in the arguments.
Definition at line 52 of file quadrature.cc.
|
inherited |
Number of quadrature points.
|
inherited |
Return the i
th quadrature point.
|
inherited |
Return a reference to the whole array of quadrature points.
|
inherited |
Return the weight of the i
th quadrature point.
|
inherited |
Return a reference to the whole array of weights.
|
inherited |
Determine an estimate for the memory consumption (in bytes) of this object.
Definition at line 313 of file quadrature.cc.
|
inherited |
Write or read the data of this object to or from a stream for the purpose of serialization using the BOOST serialization library.
|
inherited |
This function returns true if the quadrature object is a tensor product of one-dimensional formulas and the quadrature points are sorted lexicographically.
|
inherited |
In case the quadrature formula is a tensor product, this function returns the dim
one-dimensional basis objects. Otherwise, calling this function is not allowed.
For dim
equal to one, we can not return the std::array as a const reference and have to return it by value. In this case, the array will always contain a single element (this
).
Definition at line 325 of file quadrature.cc.
|
protected |
Vector of surface normals at each quadrature point.
Definition at line 155 of file immersed_surface_quadrature.h.
|
protectedinherited |
List of quadrature points. To be filled by the constructors of derived classes.
Definition at line 290 of file quadrature.h.
|
protectedinherited |
List of weights of the quadrature points. To be filled by the constructors of derived classes.
Definition at line 296 of file quadrature.h.
|
protectedinherited |
Indicates if this object represents quadrature formula that is a tensor product of one-dimensional formulas. This flag is set if dim==1 or the constructors taking a Quadrature<1> (and possibly a Quadrature<dim-1> object) is called. This implies that the quadrature points are sorted lexicographically.
Definition at line 305 of file quadrature.h.
|
protectedinherited |
Stores the one-dimensional tensor basis objects in case this object can be represented by a tensor product.
Definition at line 311 of file quadrature.h.