There is quite alot going on in your problem that concerns me.
One is your usage of ufl.variable
(they are not used in your variational forms).
Secondly, you should use:
dm, dphi, dl = ufl.TestFunctions(V)
rather than
to define your residuals F0
, F1
, F2
, as otherwise ufl.extract_blocks
will not behave as expected.