added ProductManifold<...>
This PR adds a new manifold which is called ProductManifold. It isrealized via variadic templates the posibility to construct a manifold using the fundamental manifolds,e.g.
using RigidBodyMotion3d = ProductManifold<Realtuple<double,3>,Rotation<double,3>>;
The implementation is rather general (hopefully) and i added to the already existing tests complex productmanifolds, e.g.
using CrazyManifold = ProductManifold<Realtuple<double,1>,UnitVector<double,3>,Rotation<double,3>>;
Furthermore, i homogenized the interface between RigidBodyMotion and ProductManifold. Therefore, now all Cosserat problems can also be solved with the corresponding ProductManifold. Due to this the Cosserat energies now take the targetSpace as template parameter.
The underlying manifolds are stored via
std::tuple<TargetSpaces...>.
Furthermore, to obtain the underlying data, the interface is as follows, which uses Dune::index_constant.
using CrazyManifold = ProductManifold<Realtuple<double,1>,UnitVector<double,3>,Rotation<double,3>>;
CrazyManifold A;
A[_0] = Realtuple<double,1>();
A[_1] = UnitVector<double,3>();
A[_2] = Rotation<double,3>;
@osander is this ok or should this be solved differently?
Especially, the implementation in productManifold.hh involve a lot boilerplate code and i wounder if this can be solved more elegantly.