• Andreas Dedner's avatar
    [!308] add restrict prolong and vectorial bfs to lfe space · 8bbdd641
    Andreas Dedner authored
    Merge branch 'bugfix/LagrangeSpaceRangeGT1' into 'master'
    
    ref:dune-fem/dune-fem 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.
    
    See merge request [!308]
    
      [!308]: gitlab.dune-project.org/dune-fem/dune-fem/merge_requests/308
    8bbdd641
Name
Last commit
Last update
cmake/modules Loading commit data...
doc Loading commit data...
dune Loading commit data...
lib Loading commit data...
scripts Loading commit data...
.gitignore Loading commit data...
.gitlab-ci.yml Loading commit data...
AUTHORS Loading commit data...
CHANGELOG.md Loading commit data...
CMakeLists.txt Loading commit data...
COPYING Loading commit data...
LICENSE.md Loading commit data...
README.md Loading commit data...
config.h.cmake Loading commit data...
dune-fem.pc.in Loading commit data...
dune.module Loading commit data...
modules Loading commit data...