Jump of function in HDiv


Let V = HDiv(mesh, order = order, dirichlet=“bottom|right|top|left”)

Is it possible to compute the jump of a function u \in V in the tangential direction? I tried a few things, among others, using u.Other(), but this gives me the following error

illegal dnumsin Assemble BilinearForm ‘bfa’.

I’m trying to implement the weak form (4.20) of the following paper:


Hi Sander,

The problem is the sparsity pattern. If you just use the HDiv space as you do and set up a bilinear form, the sparsity pattern is set up so that only the normal dofs couple across element interfaces. For the DG formulation that you are looking for, you require a different sparsity pattern. The one that allows coupling between neighboring element dofs (also tangential) is obtained if you add the flag dgjumps=True or flags={“dgjumps”: True} to the HDiv space.


Hi Christoph,

Thanks for the quick response. So I now have

V = HDiv(mesh, order = order, dirichlet=“bottom|right|top|left”, dgjumps=True)

and I would like to add the following IP-stabilization on interior facets:

a_stokes += SymbolicBFI(alpha*(u-u.Other())*(v-v.Other()), VOL, skeleton=True)

This still gives me the error

RuntimeError: SparseMatrixTM::AddElementMatrix: illegal dnumsin Assemble BilinearForm ‘bfa’

Maybe I’m still missing something?


Oh, I think I found it. If I have a mixed space I need to include the dgjumps also in the mixed space:
V = HDiv(mesh, order = order, dirichlet=“bottom|right|top|left”, dgjumps = True)
Q = L2(mesh, order = order-1)
X = FESpace ([V, Q], dgjumps = True)