Julia Incompressible DNS (2D Cylinder Flow)

Description
This project is a from-scratch Julia implementation of a two-dimensional incompressible Navier–Stokes solver built as a learning and experimentation platform for numerical methods in CFD. The code advances momentum explicitly, solves a pressure Poisson problem, and projects the velocity field to enforce incompressibility, all within a clear modular architecture designed to expose the interaction between flow physics and linear solver behavior.
A major strength of the project is its pressure-solver ecosystem: classical relaxation methods, standalone multigrid, and preconditioned Krylov methods are all implemented against a consistent pressure operator, making the framework useful for comparing robustness, convergence, and solver architecture choices. Combined with multiple time-integration families and a Julia-native GLMakie frontend, the project serves as a compact but serious CFD testbed rather than a black-box flow code.
- Implemented a 2D incompressible Navier–Stokes solver in Julia using a projection method with pressure correction.
- Built support for weighted Jacobi, red-black Gauss-Seidel, Chebyshev, multigrid, PCG, FGMRES, and PBiCGSTAB pressure solvers.
- Added explicit RK, SSPRK, SDIRK, and fully implicit Runge–Kutta time-integration schemes.
- Created a Julia / GLMakie frontend for live progress tracking, visualization, and offline export workflows.
- Used the code to study projection methods, solver stability, multigrid-preconditioned Krylov methods, and boundary-condition sensitivity in CFD.
Highlights and Learning Experiences
Projection-based incompressible flow solver
A 2D Navier–Stokes implementation with pressure correction, ghost cells, and immersed-boundary-style masking for cylinder flow.
Pressure solver ecosystem
Comparison of relaxation methods, multigrid, and Krylov solvers under a shared pressure operator.
Julia-native frontend and visualization
A GLMakie-based frontend for live simulation monitoring and field visualization, with ParaView-compatible outputs.