Commit 8bbdd641 authored by Andreas Dedner's avatar Andreas Dedner

[!308] add restrict prolong and vectorial bfs to lfe space

Merge branch 'bugfix/LagrangeSpaceRangeGT1' into 'master'

ref:dune-fem/dune-fem Note: requires the
feature/lagrangeinterpolate_with_general_container branch of

This merge request adds the following features to the lfe spaces:

-   use of vectorial bfe if the underlying lfe is scalar. Note that at the
    moment vector valued spaces like RT are not available as (V)^r spaces

-   generic restrict/prolong operators which are based on the underlying local
    interpolation. Should work in general but some tests i.e. with an RT space
    still need to be added. Note that this required a new method on the
    restrict/prolong operators restrictFinalize which is called after
    restrictLocal has been called for all children on a given father. This
    approach assumes that one father element is completely finished before
    another coarse element is considered - if this does not hold the
    construction will fail. The LocalRP operators do not have a default
    interface class so the restrictFinalize method can not be default

This MR also contains some other minor changes (which should not influence any
code) which were required to make dune-fem play nicely with

The restrction/prolongation is now implemented as follows:

For the prolongation the interpolation on the children is directly used
(without setting up a matrix), i.e., denoting with \$G_{CF}\$ the

     u_C = I_C(u_F\circ G_{CF})

For the restriction I want to do the same, i.e.,

      u_F = I_F(u_{\sum C}\circ (G_{CF})^{-1})

where \$`\sum C`\$ denotes the local function which is equal to \$u_C\$ on the
child \$C\$.

A caveat is when \$I_F\$ requires an evaluation at a point on the boundary
between children, i.e., in the Lagrange case at a vertex shared by two
children. This will lead to problem when simply implementing this in the
prolongLocal method using:

      u_F = \sum_C I_F(u_C\circ (G_{CF})^{-1})

where \$u_C\$ is extended by zero outside of \$C\$. This leads to a doubling
of the dof at the shared vertex. To avoid this problem the actual
interpolation is performed in a new method restrictFinalize and a suitable
weighted value is returned at the shared points.

See merge request [!308]

parents 1ccc9848 6a094580
Pipeline #18481 failed with stage
in 41 minutes and 54 seconds