By working through the advection-diffusion demo some questions come up (By the way: it currently doesn’t work for my application).

Why `u_mid`

instead of `u`

is applied? My current weak formulation is

```
F = rhoU*u*v*dx \
- rhoU*u_n*v*dx \
+ E_dt*rhoU*dot(E_w,grad(u))*v*dx \
+ E_dt*lambdaU*dot(grad(cpiU*u),grad(v))*dx \
+ sum(integrals_R) + sum(integrals_N)
```

Is `u_mid`

following from time discretisation or part of SUPG? EDIT: Seems to be Crank-Nicolson time discretization, is it? Unfortunately convergence is destroyed using u_mid even without any other change in my working code.

Is the residual correction

```
# Residual
r = u - u0 + dt*(dot(velocity, grad(u_mid)) - c*div(grad(u_mid)) - f)
# Add SUPG stabilisation terms
vnorm = sqrt(dot(velocity, velocity))
F += (h/(2.0*vnorm))*dot(velocity, grad(v))*r*dx
```

still valid with Neumann and/or Robin boundary conditions?

What is the meaning of `f = Constant(0.0)`

? If it is just the RHS of the homogeneous PDE?

And furthermore (problably a beginner problem): From other examples I usually do:

```
...
u = TrialFunction(Q)
v = TestFunction(Q)
F = ... u ... v ...
...
U = Function(Q)
...
solve(a == L, U, bcs)
...
```

If in the weak formulation there is used `u`

and I call solve with `U`

is then `u`

replaced (logically) by `U`

? But u_n and v are taken from the original formulation. How does FEniCS know what to replace?