from firedrake import *
mesh = UnitSquareMesh(1,1)
V = FunctionSpace(mesh, "DG", 0)
Z = V*V*V*V
a = inner(TrialFunction(Z), TestFunction(Z))*dx
print(assemble(a).petscmat.view())
will assemble zeros in some off-diagonal locations. This doesn't happen with Z=V*V*V.
@pbrubeck suggests it might be that Firedrake only unrolls the index sum when it involves 3 or fewer terms.
will assemble zeros in some off-diagonal locations. This doesn't happen with
Z=V*V*V.@pbrubeck suggests it might be that Firedrake only unrolls the index sum when it involves 3 or fewer terms.