13#ifndef dealii_composition_manifold_h
14#define dealii_composition_manifold_h
68 int intermediate_dim = dim,
83 virtual std::unique_ptr<Manifold<dim, spacedim>>
84 clone()
const override;
134 int intermediate_dim,
140 :
ChartManifold<dim, spacedim, chartdim>(F.get_periodicity())
146 Assert(
G.get_periodicity().norm() == 0.0,
147 ExcMessage(
"The second manifold cannot be periodic."));
154 int intermediate_dim,
157std::unique_ptr<Manifold<dim, spacedim>>
161 return std::make_unique<
170 int intermediate_dim,
177 return F->pull_back(G->pull_back(space_point));
185 int intermediate_dim,
192 return G->push_forward(F->push_forward(chart_point));
200 int intermediate_dim,
208 F->push_forward_gradient(chart_point);
211 G->push_forward_gradient(F->push_forward(chart_point));
215 for (
unsigned int d = 0; d < spacedim; ++d)
216 for (
unsigned int c = 0; c < chartdim; ++c)
217 for (
unsigned int s = 0; s < intermediate_dim; ++s)
218 DF_DG[d][c] += DG[d][s] * DF[s][c];
virtual Point< chartdim > pull_back(const Point< spacedim > &space_point) const
ObserverPointer< const ChartManifold< dim2, spacedim, intermediate_dim >, CompositionManifold< dim, spacedim, chartdim, dim1, dim2, intermediate_dim > > G
ObserverPointer< const ChartManifold< dim1, intermediate_dim, chartdim >, CompositionManifold< dim, spacedim, chartdim, dim1, dim2, intermediate_dim > > F
virtual Point< spacedim > push_forward(const Point< chartdim > &chart_point) const
CompositionManifold(const ChartManifold< dim1, intermediate_dim, chartdim > &F, const ChartManifold< dim2, spacedim, intermediate_dim > &G)
virtual std::unique_ptr< Manifold< dim, spacedim > > clone() const override
virtual DerivativeForm< 1, chartdim, spacedim > push_forward_gradient(const Point< chartdim > &chart_point) const
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define Assert(cond, exc)
static ::ExceptionBase & ExcMessage(std::string arg1)