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 | Static Public Attributes | Private Attributes | List of all members
TensorProductManifold< dim, dim_A, spacedim_A, chartdim_A, dim_B, spacedim_B, chartdim_B > Class Template Reference

Tensor product manifold of two ChartManifolds. More...

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

Inheritance diagram for TensorProductManifold< dim, dim_A, spacedim_A, chartdim_A, dim_B, spacedim_B, chartdim_B >:
[legend]

Public Member Functions

 TensorProductManifold (const ChartManifold< dim_A, spacedim_A, chartdim_A > &manifold_A, const ChartManifold< dim_B, spacedim_B, chartdim_B > &manifold_B)
 
virtual std::unique_ptr< Manifold< dim, spacedim_A+spacedim_B > > clone () const override
 
virtual Point< chartdimpull_back (const Point< spacedim > &space_point) const override
 
virtual Point< spacedimpush_forward (const Point< chartdim > &chart_point) const override
 
virtual DerivativeForm< 1, chartdim, spacedimpush_forward_gradient (const Point< chartdim > &chart_point) const override
 
- Public Member Functions inherited from ChartManifold< dim, spacedim_A+spacedim_B, chartdim_A+chartdim_B >
 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 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)
 

Static Public Attributes

static const unsigned int chartdim = chartdim_A + chartdim_B
 
static const unsigned int spacedim = spacedim_A + spacedim_B
 

Private Attributes

std::unique_ptr< const ChartManifold< dim_A, spacedim_A, chartdim_A > > manifold_A
 
std::unique_ptr< const ChartManifold< dim_B, spacedim_B, chartdim_B > > manifold_B
 

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 dim_A, int spacedim_A, int chartdim_A, int dim_B, int spacedim_B, int chartdim_B>
class TensorProductManifold< dim, dim_A, spacedim_A, chartdim_A, dim_B, spacedim_B, chartdim_B >

Tensor product manifold of two ChartManifolds.

This manifold will combine the ChartManifolds A and B given in the constructor to form a new ChartManifold by building the tensor product \(A\otimes B\). The first spacedim_A dimensions in the real space and the first chartdim_A dimensions of the chart will be given by manifold A, while the remaining coordinates are given by B. The manifold is to be used by a Triangulation<dim, space_dim_A+space_dim_B>.

An example usage would be the combination of a SphericalManifold with space dimension 2 and a FlatManifold with space dimension 1 to form a cylindrical manifold.

pull_back(), push_forward(), and push_forward_gradient() are implemented by splitting the input argument into inputs for A and B according to the given dimensions and applying the corresponding operations before concatenating the result.

Note
The dimension arguments dim_A and dim_B are not used.
Template Parameters
dimDimension of cells (needs to match first template argument of the Triangulation to be attached to.
dim_ADimension of ChartManifold A.
spacedim_ASpacial dimension of ChartManifold A.
chartdim_AChart dimension of ChartManifold A.
dim_BDimension of ChartManifold B.
spacedim_BSpacial dimension of ChartManifold B.
chartdim_BChart dimension of ChartManifold B.
Author
Luca Heltai, Timo Heister, 2016

Definition at line 71 of file tensor_product_manifold.h.

Constructor & Destructor Documentation

◆ TensorProductManifold()

template<int dim, int dim_A, int spacedim_A, int chartdim_A, int dim_B, int spacedim_B, int chartdim_B>
TensorProductManifold< dim, dim_A, spacedim_A, chartdim_A, dim_B, spacedim_B, chartdim_B >::TensorProductManifold ( const ChartManifold< dim_A, spacedim_A, chartdim_A > &  manifold_A,
const ChartManifold< dim_B, spacedim_B, chartdim_B > &  manifold_B 
)

Constructor.

Definition at line 188 of file tensor_product_manifold.h.

Member Function Documentation

◆ clone()

template<int dim, int dim_A, int spacedim_A, int chartdim_A, int dim_B, int spacedim_B, int chartdim_B>
std::unique_ptr< Manifold< dim, spacedim_A+spacedim_B > > TensorProductManifold< dim, dim_A, spacedim_A, chartdim_A, dim_B, spacedim_B, chartdim_B >::clone
overridevirtual

Clone this manifold.

Implements Manifold< dim, spacedim >.

Definition at line 217 of file tensor_product_manifold.h.

◆ pull_back()

template<int dim, int dim_A, int spacedim_A, int chartdim_A, int dim_B, int spacedim_B, int chartdim_B>
Point< TensorProductManifold< dim, dim_A, spacedim_A, chartdim_A, dim_B, spacedim_B, chartdim_B >::chartdim > TensorProductManifold< dim, dim_A, spacedim_A, chartdim_A, dim_B, spacedim_B, chartdim_B >::pull_back ( const Point< spacedim > &  space_point) const
overridevirtual

Pull back operation.

Implements ChartManifold< dim, spacedim_A+spacedim_B, chartdim_A+chartdim_B >.

Definition at line 250 of file tensor_product_manifold.h.

◆ push_forward()

template<int dim, int dim_A, int spacedim_A, int chartdim_A, int dim_B, int spacedim_B, int chartdim_B>
Point< TensorProductManifold< dim, dim_A, spacedim_A, chartdim_A, dim_B, spacedim_B, chartdim_B >::spacedim > TensorProductManifold< dim, dim_A, spacedim_A, chartdim_A, dim_B, spacedim_B, chartdim_B >::push_forward ( const Point< chartdim > &  chart_point) const
overridevirtual

Push forward operation.

Implements ChartManifold< dim, spacedim_A+spacedim_B, chartdim_A+chartdim_B >.

Definition at line 293 of file tensor_product_manifold.h.

◆ push_forward_gradient()

template<int dim, int dim_A, int spacedim_A, int chartdim_A, int dim_B, int spacedim_B, int chartdim_B>
DerivativeForm< 1, TensorProductManifold< dim, dim_A, spacedim_A, chartdim_A, dim_B, spacedim_B, chartdim_B >::chartdim, TensorProductManifold< dim, dim_A, spacedim_A, chartdim_A, dim_B, spacedim_B, chartdim_B >::spacedim > TensorProductManifold< dim, dim_A, spacedim_A, chartdim_A, dim_B, spacedim_B, chartdim_B >::push_forward_gradient ( const Point< chartdim > &  chart_point) const
overridevirtual

Member Data Documentation

◆ chartdim

template<int dim, int dim_A, int spacedim_A, int chartdim_A, int dim_B, int spacedim_B, int chartdim_B>
const unsigned int TensorProductManifold< dim, dim_A, spacedim_A, chartdim_A, dim_B, spacedim_B, chartdim_B >::chartdim = chartdim_A + chartdim_B
static

The chart dimension is the sum of the chart dimensions of the manifolds A and B.

Definition at line 79 of file tensor_product_manifold.h.

◆ spacedim

template<int dim, int dim_A, int spacedim_A, int chartdim_A, int dim_B, int spacedim_B, int chartdim_B>
const unsigned int TensorProductManifold< dim, dim_A, spacedim_A, chartdim_A, dim_B, spacedim_B, chartdim_B >::spacedim = spacedim_A + spacedim_B
static

The space dimension is the sum of the space dimensions of the manifolds A and B.

Definition at line 84 of file tensor_product_manifold.h.

◆ manifold_A

template<int dim, int dim_A, int spacedim_A, int chartdim_A, int dim_B, int spacedim_B, int chartdim_B>
std::unique_ptr<const ChartManifold<dim_A, spacedim_A, chartdim_A> > TensorProductManifold< dim, dim_A, spacedim_A, chartdim_A, dim_B, spacedim_B, chartdim_B >::manifold_A
private

Definition at line 119 of file tensor_product_manifold.h.

◆ manifold_B

template<int dim, int dim_A, int spacedim_A, int chartdim_A, int dim_B, int spacedim_B, int chartdim_B>
std::unique_ptr<const ChartManifold<dim_B, spacedim_B, chartdim_B> > TensorProductManifold< dim, dim_A, spacedim_A, chartdim_A, dim_B, spacedim_B, chartdim_B >::manifold_B
private

Definition at line 122 of file tensor_product_manifold.h.


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