Description
This issue proposes replacing the current ns_code1.py example with a monolithic incompressible Navier–Stokes solver implemented using the Crouzeix–Raviart (CR) element for velocity and DG-0 for pressure (CR–P0 pair).
The solver will employ PETSc’s field-split (Schur complement) preconditioning to demonstrate a modern, scalable monolithic formulation for incompressible flow problems in DOLFINx.
This update will align the Navier–Stokes tutorials with current PETSc practices and provide a clearer, physically accurate alternative to the existing projection/splitting scheme.
Objectives
- Implement a steady-state monolithic Navier–Stokes solver using Picard iteration.
- Use CR–P0 elements for an inf-sup stable, div-conforming discretization.
- Apply PETSc field-split Schur preconditioning with the selfp (SIMPLE-type) Schur approximation.
- Replace ns_code1.py with this new example and corresponding notebook.
- Benchmark the solver using the Open Cavity case from Huang et al., “A Large-Scale Benchmark for the Incompressible Navier–Stokes Equations” (arXiv:2112.05309).
Benchmark Setup
- Domain: 2D open cavity (rectangular domain).
- Inflow: u=(1−e −5t,0) on the left boundary.
- Outflow: Zero-Neumann (traction-free).
- Walls: No-slip top and bottom.
- Viscosity range: ν=0.0005–0.01.
- Pressure constraint: Mean-zero enforced by pinning one pressure DOF.