Replace ns_code1.py with a monolithic Navier–Stokes example (CR–P0) using PETSc field-split Schur preconditioning
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 25/100
Research direction
Start by reading the existing ns_code1.py and the corresponding notebook to understand the current Navier–Stokes example and replacement scope. Then review the proposed CR–P0 formulation, Picard iteration, and PETSc field-split Schur setup. Done means the old example is replaced, the notebook is updated, and the Open Cavity benchmark is covered across the stated viscosity range.
Written by the indexing model from the issue text.
Description
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.
- Dominant language
- Jupyter Notebook
- Stars
- 167
- Forks
- 89
- Avg merge
- 3h 25m
- Merged PRs (30d)
- 2
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from jorgensd/dolfinx-tutorial
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
jorgensd/dolfinx-tutorial#304 ·
-
Difficulty 1/5 Under an hour Newbie friendliness 68/100
jorgensd/dolfinx-tutorial#301 · 1 reaction ·
-
stretch-goal
Difficulty 3/5 1-2 days Newbie friendliness 42/100
jorgensd/dolfinx-tutorial#322 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 50/100
jorgensd/dolfinx-tutorial#288 · 1 comment ·
-
Difficulty 5/5 Over a week Newbie friendliness 30/100
jorgensd/dolfinx-tutorial#286 · 1 comment ·
All issues in jorgensd/dolfinx-tutorial
Similar issues
-
bug clawsweeper:linked-pr-open clawsweeper:needs-live-repro clawsweeper:no-new-fix-pr impact:message-loss issue-rating: 🐚 platinum hermit P2 regression
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
Difficulty 1/5 Under an hour Newbie friendliness 90/100
AXERA-TECH/ax-llm#77 ·
-
Difficulty 1/5 Under an hour Newbie friendliness 90/100
games-on-whales/wolf#509 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 72/100