How can I specify a goal functional defined on MixedElement function space?
I have something like:
Pu = dolf.FiniteElement("Lagrange", mesh.ufl_cell(), 2)
Pp = dolf.FiniteElement("Lagrange", mesh.ufl_cell(), 2)
P_mixed = dolf.MixedElement([Pu, Pp])
W = dolf.FunctionSpace(mesh, P_mixed)
When I use
w = dolf.Function(W)
dolf.solve(a == L, w, bcs)
everything works fine.
Now I want to specify my goal functional to use it later with AdaptiveLinearVariationalSolver
, which is an ‘inner product’ of the components of the P_mixed
, namely u**2+p**2
where u
and p
are from Pu
and Pp
.
If I do something like M = inner(w,w)*dx()
, or with W.sub(0)
to define Function
to input into M
, I get:
*** Error: Unable to assemble form.
*** Reason: Invalid value rank for coefficient 0 (got 1 but expecting 0). You might have forgotten to specify the value rank correctly in an Expression subclass.
*** Where: This error was encountered inside AssemblerBase.cpp.
*** Process: 0
I can see that the problem is in how I create the M
matrix, because otherwise everything works fine.
The code I have can be found here: https://gist.github.com/Corwinpro/0e881f2e22e99c87108e0662238852b0
Thanks!