Navier Stokes Channel flow tutorial IPCS: step 1 implicit?

I am very new to FEM and FeniCS. I need to learn how to use FeniCS to solve NS equations for my work. I am following the tutorial on Naveir Stokes from here https://fenicsproject.org/pub/tutorial/html/._ftut1009.html and have a few questions about the weak form and the code. For the first step of IPCS (eq below), the velocity used for the tensor \sigma is the midpoint velocity \frac{1}{2} (u^n + u^{n+1}):
image.
but in the code provided, I see this as the equation for solving the tentative u^*

F1 = rho*dot((u - u_n) / k, v)*dx + \
rho*dot(dot(u_n, nabla_grad(u_n)), v)*dx \
+ inner(sigma(U, p_n), epsilon(v))*dx \
+ dot(p_n*n, v)*ds - dot(mu*nabla_grad(U)*n, v)*ds \
- dot(f, v)*dx
a1 = lhs(F1)
L1 = rhs(F1)

where U is defined as
U = 0.5*(u_n + u)

  1. Why do I think this means that the U to evaluate \sigma is \frac{1}{2} (u^n + u^{*}) instead of the midpoint velocity?
  2. Is this step 1 a nonlinear problem as the term \sigma depends on the implicit u? why this first step can be solved as by a linear solve calling solve():
b1 = assemble(L1)
[bc.apply(b1) for bc in bcu]
solve(A1, u_.vector(), b1)
  1. Where can I find an example of using a fully implicit formulation to solve NS for a channel flow?

  2. I want to apply a neumann BC \nabla\vec{u} \cdot \vec{n}-p \vec{n} = \vec{g} as an outlet BC. how do I modify the surface integral/boundary terms in the weak form given this mid-point velocity and pressure at time n?

Thanks a lot. Truly appreciate your help.

I cant speak for the authors of the orginal tutorial. I’ve got an updated tutorial at:
https://jsdokken.com/dolfinx-tutorial/chapter2/ns_code2.html#variational-form
and ive made extensive documentation on splitting schemes at:
https://computationalphysiology.github.io/oasisx/splitting_schemes.html

It is not nonlinear, as the only term that could be nonlinear is

but it is linear wrt the unknown u.

I would suggest having a look at the oasisx presentation of splitting schemes. I am not sure you want a fully implicit splitting scheme though. Semi-implicit is usually recommended

You add the term dot(g,v)*ds(outlet_marker) to your variational form after integration by parts of the pressure gradient and the laplace (diffusive) term