Manipulating functions and function spaces

We start with setting the Feel++ environment and loading the Feel++ library. We download a 2D and 3D geometry from the Feel++ github repository.

import feelpp
import sys


from pyfeelpp import mesh,discr,vf
    '2' "github:{repo:feelpp,path:feelpp/quickstart/laplacian/cases/feelpp2d/feelpp2d.geo}", worldComm=app.worldCommPtr() )[0],
    '3' "github:{repo:feelpp,path:feelpp/quickstart/laplacian/cases/feelpp3d/feelpp3d.geo}", worldComm=app.worldCommPtr() )[0]
print(" . 2D geometry file: {}".format(geo['2']))
print(" . 3D geometry file: {}".format(geo['3']))
 . 2D geometry file: /scratch/jupyter/feelppdb/downloads/feelpp2d.geo
 . 3D geometry file: /scratch/jupyter/feelppdb/downloads/feelpp3d.geo

1. Notations

The domain \(\Omega\) is discretized using a mesh of triangles or tetrahedra. Scalar functions \(f \Omega \rightarrow \mathbb{R}\) are defined on the mesh and are represented by a finite element space.

2. Scalar function spaces

2D mesh and function space example
def run( m, geo ):
    m2d = feelpp.load(m,geo,0.1)

    if app.isMasterRank():
        print("Xh basisname: ", Xh.basisName())
        print("Xh nDof: ", Xh.nDof())
        print("Xh nLocalDof: ", Xh.nLocalDof())
        print("Xh nLocalDofWithGhost: ", Xh.nLocalDofWithGhost())
        print("Xh nLocalDofWithoutGhost: ", Xh.nLocalDofWithoutGhost())


    assert m3==m2d


    assert u.functionSpace() == Xh
    assert u.size() == Xh.nDof()

run( feelpp.mesh(dim=2), geo['2'] )
Xh basisname:  lagrange
Xh nDof:  2867
Xh nLocalDof:  2867
Xh nLocalDofWithGhost:  2867
Xh nLocalDofWithoutGhost:  2867

Finally, we can do the same in 3D

3D mesh and function space example
run( feelpp.mesh(dim=3,realdim=3), geo['3'] )
Xh basisname:  lagrange
Xh nDof:  21739
Xh nLocalDof:  21739
Xh nLocalDofWithGhost:  21739
Xh nLocalDofWithoutGhost:  21739