Skip to content

add restrict prolong and vectorial bfs to lfe space

Andreas Dedner requested to merge bugfix/LagrangeSpaceRangeGT1 into master

Note: requires the feature/lagrangeinterpolate_with_general_container branch of dune-localfunctions

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 implemented.

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

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 geometryInFather:

 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.

Edited by Andreas Dedner

Merge request reports