So I have been doing this problem in 2-D. I have this space:

fes_rhs_Gm = FacetFESpace(Om_mesh, order=0, definedon=“”, definedonbound=“Gamma”)

I then do this:

gf_rhs_Gm = GridFunction(fes_rhs_Gm)

gf_rhs_Gm.Set(0.0)

And this works fine in 2-D. However, when my mesh is 3-D cube (with boundary labeled “Gamma”) I get an error when I run:

gf_rhs_Gm.Set(0.0)

The error is:

netgen.libngpy._meshing.NgException: cannot evaluate facet-fe inside element, add trans simd

What does this mean?

Here is a minimal example:

import numpy as np

import netgen.gui

from ngsolve import *

#from netgen.geom2d import unit_square

from netgen.geom2d import SplineGeometry

from netgen.csg import unit_cube

from netgen.csg import CSGeometry

from netgen.csg import Pnt

from netgen.csg import OrthoBrick

#
# make the mesh (this works)

#
geo = SplineGeometry()

#
geo.AddRectangle( (0,0), (1,1), bc = “Gamma”)

#
Om_mesh = Mesh(geo.GenerateMesh(maxh=1.0))

#
for r in range(3):

```
# Om_mesh.Refine()
```

#
Draw(Om_mesh)

#
print(Om_mesh.GetBoundaries())

#
make the mesh (this does not work!)

cube = OrthoBrick( Pnt(0,0,0), Pnt(1,1,1) ).bc(“Gamma”)

geo = CSGeometry()

geo.Add (cube)

Om_mesh = Mesh(geo.GenerateMesh(maxh=1.0))

for r in range(2):

Om_mesh.Refine()

Draw(Om_mesh)

print(Om_mesh.GetBoundaries())

#
bdy space

fes_rhs_Gm = FacetFESpace(Om_mesh, order=0, definedon=“”, definedonbound=“Gamma”)

print(" ")

num_Gm_dofs = np.sum(fes_rhs_Gm.FreeDofs())

print("number of FreeDofs for fes_rhs_Gm: ", num_Gm_dofs)

print("fes_rhs_Gm FreeDof mask: ")

print(fes_rhs_Gm.FreeDofs())

gf_rhs_Gm = GridFunction(fes_rhs_Gm)

#
init

gf_rhs_Gm.Set(0.0)

input(“Press Enter to finish…”)

using

gf.Set (x, dual=True)

works. The default is to use element-wise L2-projection followed by averaging. This does not work for facet-spaces. dual=True does the projection using degrees of freedom of the finite element, which are usually moments on edges, faces and cells.

Thanks for this. But why did it work in 2-D without that extra flag?