So I have this space:

Bdy_Space = FacetFESpace(mesh, order=0, dim=2, definedon=“”, definedonbound=“Gamma”)

Note: this space has two components, or at least it should.

I then do this:

zero_vec = CoefficientFunction((0.0, 0.0))

And when I try this:

gf = GridFunction(Bdy_Space)

gf.Set(zero_vec, dual=True)

I get this error:

netgen.libngpy._meshing.NgException: Error in SetValues: gridfunction-dim = 1, but coefficient-dim = 2

It seems to think the grid function has only one component. But the Bdy_Space was specified with 2. What is the deal?

Did this get fixed? I noticed Joachim made a commit related to this.

Hey,

yes, it should be fixed now and is available in the latest nightly build.

Best,

Michael

Ok, so I guess this doesn’t update the conda ngsolve package. So I should switch to compiling everything.

So I tried using the PIP installer with the --pre flag, which supposedly gives the latest release. Everything installed properly, but I still get the error noted above about the dimension of the space.

##
here is a standalone code to reproduce the issue:

import numpy as np

import netgen.gui

from ngsolve import *

#from netgen.geom2d import unit_square

from netgen.geom2d import SplineGeometry

#
make the mesh

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())

#
bdy space

Bdy_Space = FacetFESpace(Om_mesh, order=0, dim=2, definedon=“”, definedonbound=“Gamma”)

print(" ")

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

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

print("Bdy_Space FreeDof mask: ")

print(Bdy_Space.FreeDofs())

gf = GridFunction(Bdy_Space)

#
this does not work

#gf.Set((x*y,y), dual=True)

#
(this “works”, but shouldn’t)

gf.Set(x*y, dual=True)

print(gf)

#help(gf)

uu = Bdy_Space.TrialFunction()

IP = InnerProduct(gf,uu)

##
input(“Press Enter to finish…”)

the line: gf.Set((x*y,y), dual=True)

is what I need to work, but it doesn’t.

For the latest nightly build (self-compiled)

gf.Set((x*y,y), dual=True)*

works, whereas

gf.Set(xy, dual=True)

does not work as expected.

You can try using

Bdy_Space = VectorFacetFESpace(Om_mesh, order=0, definedon=“”, definedonbound=“Gamma”)

instead of

Bdy_Space = FacetFESpace(Om_mesh, order=0, dim=2, definedon=“”, definedonbound=“Gamma”)

VectorFacetFESpace has automatically the dimension of the mesh, i.e. 2 in your example.

Best,

Michael

Thank you for this. I think the reason it did not work is because I didn’t have the latest build. The other forum thread told me what to do.

Note: I need to use the “dim” argument, because in 3-D, I need to set dim=5 (not the spatial dimension).