Reference documentation for deal.II version 9.0.0
|
#include <deal.II/grid/tria_boundary.h>
Public Member Functions | |
virtual | ~Boundary () override=default |
virtual std::unique_ptr< Manifold< dim, spacedim > > | clone () const override |
virtual void | get_intermediate_points_on_line (const typename Triangulation< dim, spacedim >::line_iterator &line, std::vector< Point< spacedim > > &points) const |
virtual void | get_intermediate_points_on_quad (const typename Triangulation< dim, spacedim >::quad_iterator &quad, std::vector< Point< spacedim > > &points) const |
void | get_intermediate_points_on_face (const typename Triangulation< dim, spacedim >::face_iterator &face, std::vector< Point< spacedim > > &points) const |
virtual Point< spacedim > | project_to_surface (const typename Triangulation< dim, spacedim >::line_iterator &line, const Point< spacedim > &candidate) const |
virtual Point< spacedim > | project_to_surface (const typename Triangulation< dim, spacedim >::quad_iterator &quad, const Point< spacedim > &candidate) const |
virtual Point< spacedim > | project_to_surface (const typename Triangulation< dim, spacedim >::hex_iterator &hex, const Point< spacedim > &candidate) const |
Public Member Functions inherited from FlatManifold< dim, spacedim > | |
FlatManifold (const Tensor< 1, spacedim > &periodicity=Tensor< 1, spacedim >(), const double tolerance=1e-10) | |
virtual Point< spacedim > | get_new_point (const ArrayView< const Point< spacedim >> &surrounding_points, const ArrayView< const double > &weights) const override |
virtual void | get_new_points (const ArrayView< const Point< spacedim >> &surrounding_points, const Table< 2, double > &weights, ArrayView< Point< spacedim >> new_points) const override |
virtual Point< spacedim > | project_to_manifold (const ArrayView< const Point< spacedim >> &points, const Point< spacedim > &candidate) const override |
virtual Tensor< 1, spacedim > | get_tangent_vector (const Point< spacedim > &x1, const Point< spacedim > &x2) const override |
virtual Tensor< 1, spacedim > | normal_vector (const typename Triangulation< dim, spacedim >::face_iterator &face, const Point< spacedim > &p) const override |
virtual void | get_normals_at_vertices (const typename Triangulation< dim, spacedim >::face_iterator &face, typename Manifold< dim, spacedim >::FaceVertexNormals &face_vertex_normals) const override |
const Tensor< 1, spacedim > & | get_periodicity () const |
Public Member Functions inherited from Manifold< dim, spacedim > | |
virtual | ~Manifold ()=default |
virtual Point< spacedim > | get_intermediate_point (const Point< spacedim > &p1, const Point< spacedim > &p2, const double w) const |
virtual Point< spacedim > | get_new_point_on_line (const typename Triangulation< dim, spacedim >::line_iterator &line) const |
virtual Point< spacedim > | get_new_point_on_quad (const typename Triangulation< dim, spacedim >::quad_iterator &quad) const |
virtual Point< spacedim > | get_new_point_on_hex (const typename Triangulation< dim, spacedim >::hex_iterator &hex) const |
Point< spacedim > | get_new_point_on_face (const typename Triangulation< dim, spacedim >::face_iterator &face) const |
Point< spacedim > | get_new_point_on_cell (const typename Triangulation< dim, spacedim >::cell_iterator &cell) const |
virtual void | get_normals_at_vertices (const typename Triangulation< dim, spacedim >::face_iterator &face, FaceVertexNormals &face_vertex_normals) const |
Public Member Functions inherited from Subscriptor | |
Subscriptor () | |
Subscriptor (const Subscriptor &) | |
Subscriptor (Subscriptor &&) noexcept | |
virtual | ~Subscriptor () |
Subscriptor & | operator= (const Subscriptor &) |
Subscriptor & | operator= (Subscriptor &&) noexcept |
void | subscribe (const char *identifier=nullptr) const |
void | unsubscribe (const char *identifier=nullptr) const |
unsigned int | n_subscriptions () const |
void | list_subscribers () const |
template<class Archive > | |
void | serialize (Archive &ar, const unsigned int version) |
Protected Member Functions | |
const std::vector< Point< 1 > > & | get_line_support_points (const unsigned int n_intermediate_points) const |
Private Attributes | |
std::vector< std::shared_ptr< QGaussLobatto< 1 > > > | points |
Threads::Mutex | mutex |
Additional Inherited Members | |
Public Types inherited from Manifold< dim, spacedim > | |
typedef Tensor< 1, spacedim > | FaceVertexNormals[GeometryInfo< dim >::vertices_per_face] |
Static Public Member Functions inherited from Subscriptor | |
static ::ExceptionBase & | ExcInUse (int arg1, std::string arg2, std::string arg3) |
static ::ExceptionBase & | ExcNoSubscriber (std::string arg1, std::string arg2) |
This class is used to represent a boundary to a triangulation. When a triangulation creates a new vertex on the boundary of the domain, it determines the new vertex' coordinates through the following code (here in two dimensions):
line
denotes the line at the boundary that shall be refined and for which we seek the common point of the two child lines.
In 3D, a new vertex may be placed on the middle of a line or on the middle of a side. Respectively, the library calls
to get the four midpoints of the lines bounding the quad at the boundary, and after that
to get the midpoint of the face. It is guaranteed that this order (first lines, then faces) holds, so you can use information from the children of the four lines of a face, since these already exist at the time the midpoint of the face is to be computed.
Since iterators are passed to the functions, you may use information about boundary indicators and the like, as well as all other information provided by these objects.
There are specializations, StraightBoundary, which places the new point right into the middle of the given points, and HyperBallBoundary creating a hyperball with given radius around a given center point.
|
overridevirtualdefault |
Destructor. Does nothing here, but needs to be declared to make it virtual.
|
overridevirtual |
Clone this Boundary.
Reimplemented from FlatManifold< dim, spacedim >.
Reimplemented in TorusBoundary< dim, spacedim >, HalfHyperShellBoundary< dim >, HyperShellBoundary< dim >, HalfHyperBallBoundary< dim >, HyperBallBoundary< dim, spacedim >, HyperBallBoundary< dim >, StraightBoundary< dim, spacedim >, StraightBoundary< dim, dim >, StraightBoundary< dim >, ConeBoundary< dim >, and CylinderBoundary< dim, spacedim >.
Definition at line 34 of file tria_boundary.cc.
|
virtual |
Return intermediate points on a line spaced according to the interior support points of the 1D Gauss-Lobatto quadrature formula.
The number of points requested is given by the size of the vector points
. It is the task of derived classes to arrange the points in approximately equal distances along the length of the line segment on the boundary bounded by the vertices of the first argument.
Among other places in the library, this function is called by the Mapping classes, for example the MappingQGeneric
class. On the other hand, not all mapping classes actually require intermediate points on lines (for example, \(Q_1\) mappings do not). Consequently this function is not made pure virtual, to allow users to define their own boundary classes without having to overload this function. However, the default implementation throws an error in any case and can, consequently, not be used if you use a mapping that does need the information provided by this function.
Reimplemented in TorusBoundary< dim, spacedim >, HyperBallBoundary< dim, spacedim >, StraightBoundary< dim, spacedim >, StraightBoundary< dim, dim >, and CylinderBoundary< dim, spacedim >.
Definition at line 45 of file tria_boundary.cc.
|
virtual |
Return intermediate points on a line spaced according to the tensor product of the interior support points of the 1D Gauss-Lobatto quadrature formula.
The number of points requested is given by the size of the vector points
. It is required that this number is a square of another integer, i.e. n=points.size()=m*m
. It is the task of the derived classes to arrange the points such they split the quad into (m+1)(m+1)
approximately equal-sized subquads.
Among other places in the library, this function is called by the Mapping classes, for example the MappingQGeneric
class. On the other hand, not all mapping classes actually require intermediate points on quads (for example, \(Q_1\) mappings do not). Consequently this function is not made pure virtual, to allow users to define their own boundary classes without having to overload this function. However, the default implementation throws an error in any case and can, consequently, not be used if you use a mapping that does need the information provided by this function.
Reimplemented in TorusBoundary< dim, spacedim >, HyperBallBoundary< dim, spacedim >, StraightBoundary< dim, spacedim >, StraightBoundary< dim, dim >, and CylinderBoundary< dim, spacedim >.
Definition at line 56 of file tria_boundary.cc.
void Boundary< dim, spacedim >::get_intermediate_points_on_face | ( | const typename Triangulation< dim, spacedim >::face_iterator & | face, |
std::vector< Point< spacedim > > & | points | ||
) | const |
Depending on dim=2
or dim=3
this function calls the get_intermediate_points_on_line or the get_intermediate_points_on_quad function. It throws an exception for dim=1
. This wrapper allows dimension independent programming.
Definition at line 66 of file tria_boundary.cc.
|
virtual |
Given a candidate point and a line segment characterized by the iterator, return a point that lies on the surface described by this object. This function is used in some mesh smoothing algorithms that try to move around points in order to improve the mesh quality but need to ensure that points that were on the boundary remain on the boundary.
If spacedim==1, then the line represented by the line iterator is the entire space (i.e. it is a cell, not a part of the boundary), and the returned point equals the given input point.
Derived classes do not need to implement this function unless mesh smoothing algorithms are used with a particular boundary object. The default implementation of this function throws an exception of type ExcPureFunctionCalled.
Reimplemented in StraightBoundary< dim, spacedim >, and StraightBoundary< dim, dim >.
Definition at line 118 of file tria_boundary.cc.
|
virtual |
Same function as above but for a point that is to be projected onto the area characterized by the given quad.
If spacedim<=2, then the surface represented by the quad iterator is the entire space (i.e. it is a cell, not a part of the boundary), and the returned point equals the given input point.
Reimplemented in StraightBoundary< dim, spacedim >, and StraightBoundary< dim, dim >.
Definition at line 135 of file tria_boundary.cc.
|
virtual |
Same function as above but for a point that is to be projected onto the area characterized by the given quad.
If spacedim<=3, then the manifold represented by the hex iterator is the entire space (i.e. it is a cell, not a part of the boundary), and the returned point equals the given input point.
Reimplemented in StraightBoundary< dim, spacedim >, and StraightBoundary< dim, dim >.
Definition at line 152 of file tria_boundary.cc.
|
protected |
Return the support points of the Gauss-Lobatto quadrature formula used for intermediate points.
Definition at line 169 of file tria_boundary.cc.
|
mutableprivate |
Point generator for the intermediate points on a boundary.
Definition at line 220 of file tria_boundary.h.
|
mutableprivate |
Mutex for protecting the points array.
Definition at line 225 of file tria_boundary.h.