Hi Daniel,
Nice to see you on here.
The "F == 0" syntax is usually reserved for nonlinear problems, though it can also be used for linear problems (which I think is what you have?)
However, when using this syntax, F should only contain Functions and TestFunctions, not TrialFunctions. The Jacobian (which corresponds to the LHS if F was linear) is then generated automatically using automatic differentiation of F with respect to an appropriate variable. E.g., in the Burgers example, we have
F = (inner((u - u_)/timestep, v)
+ inner(dot(u,nabla_grad(u)), v) + nu*inner(grad(u), grad(v)))*dx
Note that u was declared as a Function. Then a few lines later,
while (t <= end):
solve(F == 0, u)
The second argument to the solve call, u, is the variable to solve for (and where the result gets put), and the AD of F is done with respect to this variable.
However, when using the "a == L" syntax for linear problems, a must contain TrialFunctions and TestFunctions (and, optionally, Functions), while L must contain TestFunctions (and usually Functions), and so your other variant works.
Best,
Andrew