Reference documentation for deal.II version 9.2.0
\(\newcommand{\dealvcentcolon}{\mathrel{\mathop{:}}}\) \(\newcommand{\dealcoloneq}{\dealvcentcolon\mathrel{\mkern-1.2mu}=}\) \(\newcommand{\jump}[1]{\left[\!\left[ #1 \right]\!\right]}\) \(\newcommand{\average}[1]{\left\{\!\left\{ #1 \right\}\!\right\}}\)
Public Member Functions | Protected Attributes | Static Private Member Functions | List of all members
EllipticalManifold< dim, spacedim > Class Template Reference

#include <deal.II/grid/manifold_lib.h>

Inheritance diagram for EllipticalManifold< dim, spacedim >:
[legend]

Public Member Functions

 EllipticalManifold (const Point< spacedim > &center, const Tensor< 1, spacedim > &major_axis_direction, const double eccentricity)
 
virtual std::unique_ptr< Manifold< dim, spacedim > > clone () const override
 
virtual Point< spacedim > pull_back (const Point< spacedim > &space_point) const override
 
virtual Point< spacedim > push_forward (const Point< spacedim > &chart_point) const override
 
virtual DerivativeForm< 1, spacedim, spacedim > push_forward_gradient (const Point< spacedim > &chart_point) const override
 
Point< 2 > push_forward (const Point< 2 > &chart_point) const
 
Point< 2 > pull_back (const Point< 2 > &space_point) const
 
DerivativeForm< 1, 2, 2 > push_forward_gradient (const Point< 2 > &chart_point) const
 
- Public Member Functions inherited from ChartManifold< dim, dim, dim >
 ChartManifold (const Tensor< 1, chartdim > &periodicity=Tensor< 1, chartdim >())
 
virtual ~ChartManifold () override=default
 
virtual Point< spacedim > get_intermediate_point (const Point< spacedim > &p1, const Point< spacedim > &p2, const double w) const override
 
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 > push_forward (const Point< chartdim > &chart_point) const=0
 
virtual DerivativeForm< 1, chartdim, spacedim > push_forward_gradient (const Point< chartdim > &chart_point) const
 
virtual Tensor< 1, spacedim > get_tangent_vector (const Point< spacedim > &x1, const Point< spacedim > &x2) const override
 
const Tensor< 1, chartdim > & get_periodicity () const
 
- Public Member Functions inherited from Manifold< dim, spacedim >
virtual ~Manifold () override=default
 
Tensor< 1, 2 > normal_vector (const Triangulation< 2, 2 >::face_iterator &face, const Point< 2 > &p) const
 
Tensor< 1, 3 > normal_vector (const Triangulation< 3, 3 >::face_iterator &face, const Point< 3 > &p) const
 
void get_normals_at_vertices (const Triangulation< 2, 2 >::face_iterator &face, FaceVertexNormals &n) const
 
void get_normals_at_vertices (const Triangulation< 3, 3 >::face_iterator &face, FaceVertexNormals &n) const
 
Point< 1 > get_new_point_on_face (const Triangulation< 1, 1 >::face_iterator &) const
 
Point< 2 > get_new_point_on_face (const Triangulation< 1, 2 >::face_iterator &) const
 
Point< 3 > get_new_point_on_face (const Triangulation< 1, 3 >::face_iterator &) const
 
Point< 1 > get_new_point_on_quad (const Triangulation< 1, 1 >::quad_iterator &) const
 
Point< 2 > get_new_point_on_quad (const Triangulation< 1, 2 >::quad_iterator &) const
 
Point< 3 > get_new_point_on_quad (const Triangulation< 1, 3 >::quad_iterator &) const
 
Point< 3 > get_new_point_on_hex (const Triangulation< 3, 3 >::hex_iterator &hex) const
 
virtual Point< spacedim > project_to_manifold (const ArrayView< const Point< spacedim >> &surrounding_points, const Point< spacedim > &candidate) 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 Tensor< 1, spacedim > normal_vector (const typename Triangulation< dim, spacedim >::face_iterator &face, const Point< spacedim > &p) 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 ()
 
Subscriptoroperator= (const Subscriptor &)
 
Subscriptoroperator= (Subscriptor &&) noexcept
 
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
 
template<class Archive >
void serialize (Archive &ar, const unsigned int version)
 

Protected Attributes

Tensor< 1, spacedim > direction
 
const Point< spacedim > center
 
const double cosh_u
 
const double sinh_u
 

Static Private Member Functions

static Tensor< 1, spacedim > get_periodicity ()
 

Additional Inherited Members

- Public Types inherited from Manifold< dim, spacedim >
using FaceVertexNormals = std::array< Tensor< 1, spacedim >, GeometryInfo< dim >::vertices_per_face >
 
- Static Public Member Functions inherited from Subscriptor
static ::ExceptionBaseExcInUse (int arg1, std::string arg2, std::string arg3)
 
static ::ExceptionBaseExcNoSubscriber (std::string arg1, std::string arg2)
 

Detailed Description

template<int dim, int spacedim = dim>
class EllipticalManifold< dim, spacedim >

Elliptical manifold description derived from ChartManifold. More information on the elliptical coordinate system can be found at Wikipedia .

This is based on the definition of elliptic coordinates \((u,v)\)

\[ \left\lbrace\begin{aligned} x &= x_0 + c \cosh(u) \cos(v) \\ y &= y_0 + c \sinh(u) \sin(v) \end{aligned}\right. \]

in which \((x_0,y_0)\) are coordinates of the center of the cartesian system.

The current implementation uses coordinates \((c,v)\), instead of \((u,v)\), and fixes \(u\) according to a given eccentricity. Therefore, this choice of coordinates generates an elliptical manifold characterized by a constant eccentricity: \(e=\frac{1}{\cosh(u)}\), with \(e\in\left]0,1\right[\).

The constructor of this class will throw an exception if both dim and spacedim are different from two.

This manifold can be used to produce hyper_shells with elliptical curvature. As an example, the test elliptical_manifold_01 produces the following triangulation:

Author
Stefano Dominici, 2018

Definition at line 508 of file manifold_lib.h.

Constructor & Destructor Documentation

◆ EllipticalManifold()

template<int dim, int spacedim>
EllipticalManifold< dim, spacedim >::EllipticalManifold ( const Point< spacedim > &  center,
const Tensor< 1, spacedim > &  major_axis_direction,
const double  eccentricity 
)

Constructor that takes the center of the manifold system, the direction of the major axis, and the manifold eccentricity. The default major axis is the x-axis. The manifold is rotated in order to align the major axis to the direction specified in input.

Parameters
centerCenter of the manifold.
major_axis_directionDirection of the major axis of the manifold.
eccentricityEccentricity of the manifold \(e\in\left]0,1\right[\).

Definition at line 1203 of file manifold_lib.cc.

Member Function Documentation

◆ clone()

template<int dim, int spacedim>
std::unique_ptr< Manifold< dim, spacedim > > EllipticalManifold< dim, spacedim >::clone ( ) const
overridevirtual

Return a copy of this manifold.

Every derived class should implement this operation in a sensible manner.

Implements Manifold< dim, spacedim >.

Definition at line 1231 of file manifold_lib.cc.

◆ pull_back() [1/2]

template<int dim, int spacedim>
Point< spacedim > EllipticalManifold< dim, spacedim >::pull_back ( const Point< spacedim > &  space_point) const
overridevirtual

Pull back the given point in spacedim to the Euclidean chartdim dimensional space.

Refer to the general documentation of this class for more information.

Implements ChartManifold< dim, dim, dim >.

Definition at line 1283 of file manifold_lib.cc.

◆ push_forward() [1/2]

template<int dim, int spacedim>
Point< spacedim > EllipticalManifold< dim, spacedim >::push_forward ( const Point< spacedim > &  chart_point) const
overridevirtual

Given a point in the chartdim dimensional Euclidean space, this method returns a point on the manifold embedded in the spacedim Euclidean space.

Refer to the general documentation of this class for more information.

Definition at line 1255 of file manifold_lib.cc.

◆ push_forward_gradient() [1/2]

template<int dim, int spacedim>
DerivativeForm< 1, spacedim, spacedim > EllipticalManifold< dim, spacedim >::push_forward_gradient ( const Point< spacedim > &  chart_point) const
overridevirtual

Given a point in the chartdim dimensional Euclidean space, this method returns the derivatives of the function \(F\) that maps from the chartdim-dimensional to the spacedim-dimensional space. In other words, it is a matrix of size \(\text{spacedim}\times\text{chartdim}\).

This function is used in the computations required by the get_tangent_vector() function. Since not all users of the Manifold class interface will require calling that function, the current function is implemented but will trigger an exception whenever called. This allows derived classes to avoid implementing the push_forward_gradient function if this functionality is not needed in the user program.

Refer to the general documentation of this class for more information.

Definition at line 1325 of file manifold_lib.cc.

◆ get_periodicity()

template<int dim, int spacedim>
Tensor< 1, spacedim > EllipticalManifold< dim, spacedim >::get_periodicity
staticprivate

Return the periodicity associated with the submanifold.

For \(\text{dim}=2\) and \(\text{spacedim}=2\), the first coordinate is non-periodic, while the second coordinate has a periodicity of \(2\pi\).

Definition at line 1242 of file manifold_lib.cc.

◆ push_forward() [2/2]

Point< 2 > EllipticalManifold< 2, 2 >::push_forward ( const Point< 2 > &  chart_point) const

Definition at line 1265 of file manifold_lib.cc.

◆ pull_back() [2/2]

Point< 2 > EllipticalManifold< 2, 2 >::pull_back ( const Point< 2 > &  space_point) const

Definition at line 1293 of file manifold_lib.cc.

◆ push_forward_gradient() [2/2]

DerivativeForm< 1, 2, 2 > EllipticalManifold< 2, 2 >::push_forward_gradient ( const Point< 2 > &  chart_point) const

Definition at line 1336 of file manifold_lib.cc.

Member Data Documentation

◆ direction

template<int dim, int spacedim = dim>
Tensor<1, spacedim> EllipticalManifold< dim, spacedim >::direction
protected

The direction vector of the major axis.

Definition at line 553 of file manifold_lib.h.

◆ center

template<int dim, int spacedim = dim>
const Point<spacedim> EllipticalManifold< dim, spacedim >::center
protected

The center of the manifold.

Definition at line 557 of file manifold_lib.h.

◆ cosh_u

template<int dim, int spacedim = dim>
const double EllipticalManifold< dim, spacedim >::cosh_u
protected

Parameters deriving from the eccentricity of the manifold.

Definition at line 561 of file manifold_lib.h.

◆ sinh_u

template<int dim, int spacedim = dim>
const double EllipticalManifold< dim, spacedim >::sinh_u
protected

Definition at line 562 of file manifold_lib.h.


The documentation for this class was generated from the following files: