from firedrake import *
base_mesh = UnitSquareMesh(8, 8)
hierarchy = MeshHierarchy(base_mesh, 1)
mesh = hierarchy[-1]
V = FunctionSpace(mesh, "CG", 1)
T = TensorFunctionSpace(mesh, "DG", 0, symmetry=True) # Fails
# T = TensorFunctionSpace(mesh, "DG", 0) # Passes
alpha = Function(T)
alpha.interpolate(as_tensor(((1.0, 0.0), (0.0, 1.0))))
u = Function(V)
v = TestFunction(V)
F = inner(dot(alpha, grad(u)), grad(v)) * dx - inner(Constant(1.0), v) * dx
bcs = DirichletBC(V, 0, "on_boundary")
problem = NonlinearVariationalProblem(F, u, bcs=bcs)
sp = {
"snes_type": "ksponly",
"mat_type": "aij",
"ksp_type": "cg",
"ksp_rtol": 1e-10,
"ksp_atol": 1e-12,
"ksp_converged_reason": None,
"pc_type": "mg",
"pc_mg_type": "full",
"mg_coarse": {
"ksp_type": "preonly",
"pc_type": "lu",
},
"mg_levels": {
"ksp_type": "chebyshev",
"ksp_max_it": 2,
"pc_type": "jacobi",
},
}
solver = NonlinearVariationalSolver(problem, solver_parameters=sp)
solver.solve()
Traceback (most recent call last):
File "/home/user/firedrake-release-30-05-2026/venv-firedrake/lib/python3.12/site-packages/firedrake/mg/kernels.py", line 365, in inject_kernel
return cache[key]
~~~~~^^^^^
KeyError: ('inject', 1, 3, (0, (0,), (1,), (2,)), (1, (1, 2), (0, 2), (0, 1)), (2, (0, 1, 2)), (0, (0,), (1,), (2,)), (1, (1, 2), (0, 2), (0, 1)), (2, (0, 1, 2)), (0, (), (), ()), (1, (), (), ()), (2, (0,)), (0, (), (), ()), (1, (), (), ()), (2, (0,)), (0, (0,), (1,), (2,)), (1, (), (), ()), (2, ()), (0, (0,), (1,), (2,)), (1, (), (), ()), (2, ()))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "petsc4py/PETSc/petscdmshell.pxi", line 239, in petsc4py.PETSc.DMSHELL_Coarsen
File "petsc4py/PETSc/Log.pyx", line 250, in petsc4py.PETSc.Log.EventDecorator.decorator.wrapped_func
File "petsc4py/PETSc/Log.pyx", line 251, in petsc4py.PETSc.Log.EventDecorator.decorator.wrapped_func
File "/home/user/firedrake-release-30-05-2026/venv-firedrake/lib/python3.12/site-packages/firedrake/dmhooks.py", line 439, in coarsen
cctx = coarsen(ctx, coarsen)
^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/functools.py", line 909, in wrapper
return dispatch(args[0].__class__)(*args, **kw)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/firedrake-release-30-05-2026/venv-firedrake/lib/python3.12/site-packages/firedrake/mg/ufl_utils.py", line 272, in coarsen_snescontext
problem = self(context._problem, self, coefficient_mapping=coefficient_mapping)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/functools.py", line 909, in wrapper
return dispatch(args[0].__class__)(*args, **kw)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/firedrake-release-30-05-2026/venv-firedrake/lib/python3.12/site-packages/firedrake/mg/ufl_utils.py", line 224, in coarsen_nlvp
F = self(problem.F, self, coefficient_mapping=coefficient_mapping)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/functools.py", line 909, in wrapper
return dispatch(args[0].__class__)(*args, **kw)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/firedrake-release-30-05-2026/venv-firedrake/lib/python3.12/site-packages/firedrake/mg/ufl_utils.py", line 101, in coarsen_form
integrand = map_expr_dag(mapper, it.integrand())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/firedrake-release-30-05-2026/venv-firedrake/lib/python3.12/site-packages/ufl/corealg/map_dag.py", line 42, in map_expr_dag
(result,) = map_expr_dags(
^^^^^^^^^^^^^^
File "/home/user/firedrake-release-30-05-2026/venv-firedrake/lib/python3.12/site-packages/ufl/corealg/map_dag.py", line 112, in map_expr_dags
r = handlers[v._ufl_typecode_](v)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/firedrake-release-30-05-2026/venv-firedrake/lib/python3.12/site-packages/firedrake/mg/ufl_utils.py", line 44, in coefficient
return self.coarsen(o, self.coarsen, coefficient_mapping=self.coefficient_mapping)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/functools.py", line 909, in wrapper
return dispatch(args[0].__class__)(*args, **kw)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/firedrake-release-30-05-2026/venv-firedrake/lib/python3.12/site-packages/firedrake/mg/ufl_utils.py", line 180, in coarsen_function
manager.inject(expr, new)
File "/home/user/firedrake-release-30-05-2026/venv-firedrake/lib/python3.12/site-packages/firedrake/mg/embedded.py", line 309, in inject
self.op(uf, uc, transfer_op=Op.INJECT)
File "petsc4py/PETSc/Log.pyx", line 250, in petsc4py.PETSc.Log.EventDecorator.decorator.wrapped_func
File "petsc4py/PETSc/Log.pyx", line 251, in petsc4py.PETSc.Log.EventDecorator.decorator.wrapped_func
File "/home/user/firedrake-release-30-05-2026/venv-firedrake/lib/python3.12/site-packages/firedrake/mg/embedded.py", line 264, in op
self._native_transfer(target_element, gdim, transfer_op)(source, target)
File "petsc4py/PETSc/Log.pyx", line 250, in petsc4py.PETSc.Log.EventDecorator.decorator.wrapped_func
File "petsc4py/PETSc/Log.pyx", line 251, in petsc4py.PETSc.Log.EventDecorator.decorator.wrapped_func
File "/home/user/firedrake-release-30-05-2026/venv-firedrake/lib/python3.12/site-packages/firedrake/mg/interface.py", line 233, in inject
kernel, dg = kernels.inject_kernel(Vf, Vc)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/firedrake-release-30-05-2026/venv-firedrake/lib/python3.12/site-packages/firedrake/mg/kernels.py", line 368, in inject_kernel
return cache.setdefault(key, (dg_injection_kernel(Vf, Vc, ncandidate), True))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/firedrake-release-30-05-2026/venv-firedrake/lib/python3.12/site-packages/firedrake/mg/kernels.py", line 447, in dg_injection_kernel
fexpr, = fem.compile_ufl(f, macro_context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/firedrake-release-30-05-2026/venv-firedrake/lib/python3.12/site-packages/tsfc/fem.py", line 854, in compile_ufl
result = map_expr_dags(context.translator, expressions)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/firedrake-release-30-05-2026/venv-firedrake/lib/python3.12/site-packages/ufl/corealg/map_dag.py", line 112, in map_expr_dags
r = handlers[v._ufl_typecode_](v)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/firedrake-release-30-05-2026/venv-firedrake/lib/python3.12/site-packages/tsfc/ufl_utils.py", line 171, in _modified_terminal
return self.modified_terminal(o)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/firedrake-release-30-05-2026/venv-firedrake/lib/python3.12/site-packages/tsfc/fem.py", line 468, in modified_terminal
return translate(mt.terminal, mt, self.context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/functools.py", line 909, in wrapper
return dispatch(args[0].__class__)(*args, **kw)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/firedrake-release-30-05-2026/venv-firedrake/lib/python3.12/site-packages/tsfc/fem.py", line 790, in translate_coefficient
assert result.shape == mt.expr.ufl_shape
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/user/Documents/Code/proximalgalerkin/03_gradient/09_mfe_symmetric_tensor_mg_poisson.py", line 45, in <module>
solver.solve()
File "petsc4py/PETSc/Log.pyx", line 250, in petsc4py.PETSc.Log.EventDecorator.decorator.wrapped_func
File "petsc4py/PETSc/Log.pyx", line 251, in petsc4py.PETSc.Log.EventDecorator.decorator.wrapped_func
File "/home/user/firedrake-release-30-05-2026/venv-firedrake/lib/python3.12/site-packages/firedrake/adjoint_utils/variational_solver.py", line 108, in wrapper
out = solve(self, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/home/user/firedrake-release-30-05-2026/venv-firedrake/lib/python3.12/site-packages/firedrake/variational_solver.py", line 398, in solve
self.snes.solve(None, work)
File "petsc4py/PETSc/SNES.pyx", line 1740, in petsc4py.PETSc.SNES.solve
petsc4py.PETSc.Error: error code 101
[0] SNESSolve() at /home/user/firedrake-release-30-05-2026/petsc/src/snes/interface/snes.c:4875
[0] SNESSolve_KSPONLY() at /home/user/firedrake-release-30-05-2026/petsc/src/snes/impls/ksponly/ksponly.c:49
[0] KSPSolve() at /home/user/firedrake-release-30-05-2026/petsc/src/ksp/ksp/interface/itfunc.c:1092
[0] KSPSolve_Private() at /home/user/firedrake-release-30-05-2026/petsc/src/ksp/ksp/interface/itfunc.c:839
[0] KSPSetUp() at /home/user/firedrake-release-30-05-2026/petsc/src/ksp/ksp/interface/itfunc.c:428
[0] PCSetUp() at /home/user/firedrake-release-30-05-2026/petsc/src/ksp/pc/interface/precon.c:1117
[0] PCSetUp_MG() at /home/user/firedrake-release-30-05-2026/petsc/src/ksp/pc/impls/mg/mg.c:992
[0] DMCoarsen() at /home/user/firedrake-release-30-05-2026/petsc/src/dm/interface/dm.c:3381
Describe the bug
Symmetric tensor coefficients throw an error when attempting multigrid coarsening.
Steps to Reproduce
Steps to reproduce the behavior:
Expected behavior
Linear firedrake_1_ solve converged due to CONVERGED_RTOL iterations 12Error message
Environment:
Additional Info
Add any other context about the problem here.