PICurv uses a projection-style incompressible update: momentum predictor, pressure correction, velocity projection.
Given velocity \(\mathbf{u}^n\), the solver computes a provisional field \(\mathbf{u}^*\) from momentum terms, then solves pressure correction:
\[ \nabla^2 \phi = \frac{1}{\Delta t}\nabla\cdot\mathbf{u}^*, \]
followed by:
\[ \mathbf{u}^{n+1} = \mathbf{u}^* - \Delta t\nabla\phi, \qquad p^{n+1}=p^n+\phi. \]
In curvilinear form, gradient components use metric terms (ICsi/IEta/IZet, etc.) and Jacobian inverses in the projection kernel.
ProjectVelocity applies the same boundary-aware face-gradient stencil as the pressure operator, corrects the periodic seam faces, and then refreshes ghosts and reconstructs the Cartesian velocity with Contra2Cart.
Key implementation details:
Nvert checks),These are part of why projection behavior in PICurv differs from simplified textbook pseudocode.
For projection health, monitor:
Persistent divergence or noisy pressure correction usually indicates a Poisson tuning, grid-quality, or BC consistency issue.