The definition of EnrichedElement
in legacy dolfin is a bit broken (partially supported).
The following works in DOLFINx (v0.5.0):
import dolfinx
import ufl
from mpi4py import MPI
mesh = dolfinx.mesh.create_unit_square(MPI.COMM_WORLD, 1, 1)
P2 = ufl.FiniteElement("P", ufl.triangle, degree=2)
bubble = ufl.FiniteElement("B", ufl.triangle, degree=3)
V = dolfinx.fem.FunctionSpace(mesh, P2+bubble)
# assigning a scalar expression to mixed element fails
u = dolfinx.fem.Function(V)
u.interpolate(lambda x: x[0])
print(u.x.array)
and
import dolfinx
import ufl
from mpi4py import MPI
mesh = dolfinx.mesh.create_unit_square(MPI.COMM_WORLD, 1, 1)
P2 = ufl.FiniteElement("P", ufl.triangle, degree=2)
bubble = ufl.FiniteElement("B", ufl.triangle, degree=3)
V = dolfinx.fem.FunctionSpace(mesh, ufl.MixedElement([P2+bubble, P2]))
W, Wmap = V.sub(0).collapse()
# assigning a scalar expression to mixed element fails
u = dolfinx.fem.Function(W)
u.interpolate(lambda x: x[0])
print(u.x.array)
v = dolfinx.fem.Function(V)
v.x.array[Wmap] = u.x.array
print(v.x.array)
print(v.sub(0).collapse().x.array)
@mscroggs might know more.
Edit
Try using a NodalEnrichedElement
, which should in theory work in legacy DOLFIN.