Hi.
Im using dolfinx version 0.9.0 on a docker container, trying to compile the forms for the block system arising from the navier-stokes equations results in an unexpected error.
Here is the MWE:
from petsc4py import PETSc
from mpi4py import MPI
from basix.ufl import element, mixed_element
from dolfinx.mesh import create_unit_square
from dolfinx.fem import (
Constant,
Function,
functionspace,
form,
)
from ufl import (
dx,
ds,
dot,
inner,
nabla_grad,
div,
TestFunctions,
split,
sym,
Identity,
extract_blocks,
)
mesh = create_unit_square(MPI.COMM_WORLD, 32, 32)
dt = Constant(mesh, PETSc.ScalarType(1 / 200))
rho = Constant(mesh, PETSc.ScalarType(1))
mu = Constant(mesh, PETSc.ScalarType(1))
f = Constant(mesh, PETSc.ScalarType((0.0, 0.0)))
h = Constant(mesh, PETSc.ScalarType((0.0, 0.0)))
element_velocity = element(
"Lagrange",
mesh.topology.cell_name(),
1,
shape=(2,),
)
element_pressure = element("Lagrange", mesh.topology.cell_name(), 1)
element_mixed = mixed_element([element_velocity, element_pressure])
W = functionspace(mesh, element_mixed)
v, q = TestFunctions(W)
w_sol = Function(W)
u_sol, p_sol = split(w_sol)
w_prev = Function(W)
u_prev, p_prev = split(w_prev)
def epsilon(u):
return sym(nabla_grad(u))
def sigma(u, p, mu):
return 2 * mu * sym(nabla_grad(u)) - p * Identity(len(u))
F = rho * inner(v, (u_sol - u_prev) / dt) * dx
F += rho * dot(v, dot(u_sol, nabla_grad(u_sol))) * dx
F -= inner(v, rho * f) * dx
F += inner(epsilon(v), sigma(u_sol, p_sol, mu)) * dx
F -= inner(v, h) * ds
F += inner(q, div(u_sol)) * dx
F_form = form(extract_blocks(F))
The error:
Traceback (most recent call last):
File "/root/shared/mwe.py", line 68, in <module>
F_form = form(extract_blocks(F))
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/dolfinx-real/lib/python3.12/dist-packages/dolfinx/fem/forms.py", line 337, in form
return _create_form(form)
^^^^^^^^^^^^^^^^^^
File "/usr/local/dolfinx-real/lib/python3.12/dist-packages/dolfinx/fem/forms.py", line 333, in _create_form
return list(map(lambda sub_form: _create_form(sub_form), form))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/dolfinx-real/lib/python3.12/dist-packages/dolfinx/fem/forms.py", line 333, in <lambda>
return list(map(lambda sub_form: _create_form(sub_form), form))
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/dolfinx-real/lib/python3.12/dist-packages/dolfinx/fem/forms.py", line 333, in _create_form
return list(map(lambda sub_form: _create_form(sub_form), form))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/dolfinx-real/lib/python3.12/dist-packages/dolfinx/fem/forms.py", line 333, in <lambda>
return list(map(lambda sub_form: _create_form(sub_form), form))
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/dolfinx-real/lib/python3.12/dist-packages/dolfinx/fem/forms.py", line 331, in _create_form
return _form(form)
^^^^^^^^^^^
File "/usr/local/dolfinx-real/lib/python3.12/dist-packages/dolfinx/fem/forms.py", line 259, in _form
V = [arg.ufl_function_space()._cpp_object for arg in form.arguments()]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'FunctionSpace' object has no attribute '_cpp_object'