16#ifndef dealii_tensor_product_manifold_h
17#define dealii_tensor_product_manifold_h
71 :
public ChartManifold<dim, spacedim_A + spacedim_B, chartdim_A + chartdim_B>
95 virtual std::unique_ptr<Manifold<dim, spacedim_A + spacedim_B>>
96 clone()
const override;
117 std::unique_ptr<const ChartManifold<dim_A, spacedim_A, chartdim_A>>
120 std::unique_ptr<const ChartManifold<dim_B, spacedim_B, chartdim_B>>
132 namespace TensorProductManifoldImplementation
134 template <
int dim1,
int dim2>
139 for (
unsigned int d = 0; d <
dim1; ++d)
141 for (
unsigned int d = 0; d <
dim2; ++d)
146 template <
int dim1,
int dim2>
151 for (
unsigned int d = 0; d <
dim1; ++d)
153 for (
unsigned int d = 0; d <
dim2; ++d)
158 template <
int dim1,
int dim2>
164 for (
unsigned int d = 0; d <
dim1; ++d)
166 for (
unsigned int d = 0; d <
dim2; ++d)
191 internal::TensorProductManifoldImplementation::concat(
192 manifold_A.get_periodicity(),
193 manifold_B.get_periodicity()))
194 , manifold_A(
Utilities::dynamic_unique_cast<
197 , manifold_B(
Utilities::dynamic_unique_cast<
209std::unique_ptr<Manifold<dim, spacedim_A + spacedim_B>>
Tensor product manifold of two ChartManifolds.
static const unsigned int chartdim
virtual Point< spacedim > push_forward(const Point< chartdim > &chart_point) const override
virtual DerivativeForm< 1, chartdim, spacedim > push_forward_gradient(const Point< chartdim > &chart_point) const override
static const unsigned int spacedim
virtual Point< chartdim > pull_back(const Point< spacedim > &space_point) const override
virtual std::unique_ptr< Manifold< dim, spacedim_A+spacedim_B > > clone() const override
std::unique_ptr< const ChartManifold< dim_B, spacedim_B, chartdim_B > > manifold_B
std::unique_ptr< const ChartManifold< dim_A, spacedim_A, chartdim_A > > manifold_A
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
Tensor< 1, dim1+dim2 > concat(const Tensor< 1, dim1 > &p1, const Tensor< 1, dim2 > &p2)
void split_point(const Point< dim1+dim2 > &source, Point< dim1 > &p1, Point< dim2 > &p2)