## Use space::interpolate() for restriction and prolongation.

Note requires the
`feature/lagrangeinterpolate_with_general_container`

branch of dune-localfunctions

The LocalFE spaces do not yet have specialized `RestrictProlong`

operators. A generic approach would be to use the interpolation to do the prolongation and base the restriction on that as well. Something like this. Let F be a father element and C_1,..,C_n be the children, let u_F and u_i be the local functions with corresponding dof vectors (w_Fk), (w_ik), I:f->R^N be the interpolation (on the reference element) and let phi_k for k=1,..,N be the shape functions. Finally we denote with F_i:hatK->hatK the mapping from C_i into F.

## Prolongation

We want the new local function on C_i to be the interpolation of u_F(F_i) onto u_i so the dofs are

` w_ik = sum_l I(phi_l(F_i))_k w_Fl`

since

` u_i = sum_k w_ik phi_k = sum_k I(u_F(F_i))_k phi_k`

so

` w_ik = I(u_F(F_i))_k = sum_l w_Fl I(phi_l(F_i))_k`

So we can define a matrix P_i = (I(phi_l(F_i))_k)_kl and have

` w_i = P_i w_F`

for all children.

## Restriction

A reasonable choice would be

` w_F = sum_i omega_i (P_i)^T w_i`

I'm not quite sure about the right weights, possibly 1/n or |C_i| / |F| which is what we use in other places.

## Remark

For the Lagrange space this approach gives a slightly different restriction compared to the one implemented for the `LagrangeDiscreteFunctionSpace`

.
Take bisection with newest vertex numbered 0 and counter clockwise numbering then

(P_0)^T = ( 0 1 0 , 1/2 0 1 , 1/2 0 0 )

(P_1)^T = ( 0 0 1 , 1/2 0 0 , 1/2 1 0 )

then (with weights equal 1/2)

w_F = ( w_02/2 + w_13/2 , w_01/4 + w_03/2 + w_11/4 , w_01/4 + w_13/4 + w_12/2 )

and I think the old version would be

w_F = ( w_02/2 + w_13/2 , w_03 , w_12 )

Martins Understanding restprol.pdf