introduce global finite elements
Copied over from Github.
ftalbrecht commented on 13 Mar 2018
Before merging #111, and after resolving dune-community/dune-xt-functions#30, we should revisit the finite elements.
Currently we have local finite elements, which do not depend on an grid element, but merely on dimensions and geometry types.
- These should expose their current basis() as shape_functions(), those should derive from XT::Functions::ShapeFunctionSet.
- The interpolation() should then also acceppt a ShapeFunctionSet, the urrent state can then be default implemented in the interface (wrapping a lambda expression and an order as a shape function set of size 1).
- The coefficients() stay the same and help to identify the local DoFs.
- Just like the ShapeFunctionSet, a LocalFiniteElementInterface should model a family of local finite elements which can be bound to a particular GeometryType of matching dimension (o thrwo an exception). Currently we keep a std::map<GeometryType, FiniteElementInterface> everywhere, which is then obsolete.
- They have to be virtually copyable, since we need to duplicate them in parallel environments (to allow for mutable state, e.g., temporary variables)
In addition, we require global finite elements, by whih I mean a combination of the current MapperInterface and the GlobalBasisInterface:
- it exports the local finite element w.r.t. coresponding geometry().type() of the grid element as local_finite_element()
- it exports the localization of the current global basis to the gid element as basis()
- it provides an interpolation(), which interpolates a LocalElementFunctionSetInterface or LocalFunction w.r.t. global basis, not the shape functions (this can usually be acchieved by interpolating w.r.t. shape functions and applying some map to the loca dofs, e.g., in the case of raviart thomas).
- it provides the global_dof_indices()
- it can be bound to a grid element to all the preparatory work required for the above.
Thus
- GlobalBasisInterface is probably not required any more
- the space should still export the mapper()
- a space should export a finite_element(element) and finite_elements() where finite_elements().bind(element) == finite_element(element)
@falbr_01, is this still relevant?