grokkingstuff Home Blog Projects Wiki Calculators About

Pressure-velocity Coupling -- SIMPLE, PISO, PIMPLE, under-relaxation

date2026-07-26tags:cfd: :pressure: :velocity: :coupling: :simple: :piso:

The pressure-velocity decoupling problem

Incompressible flow has no standalone pressure equation. Pressure does not appear in the continuity equation because density is constant. Pressure is not an equation-of-state variable. It enters the momentum equation only as a gradient nabla p. Pressure acts as a Lagrange multiplier enforcing mass conservation.

On a collocated grid, the pressure gradient in the momentum equation and the velocity correction in the continuity equation become decoupled at the checkerboard scale.

On a 1D staggered grid, velocity at face i plus half depends on the pressure difference across the face. On a collocated grid, linear interpolation averages the two cell pressures. The velocity correction then depends on this averaged value.

This formula breaks down because the same interpolation applies at both face and cell center. The checkerboard mode is an oscillating pressure field that alternates between adjacent cells. This mode produces zero pressure gradient at cell centers. The momentum equation sees no gradient. The resulting velocity violates continuity. The algorithm cannot detect it.

This is the checkerboard problem, first described by Rhie and Chow in 1983. Their solution is now implemented in every collocated-grid solver. Rhie-Chow interpolation adds a fourth-order diffusion term to the mass flux to suppress oscillations without significant numerical diffusion.

SIMPLE (Semi-Implicit Method for Pressure-Linked Equations)

Patankar and Spalding proposed SIMPLE in 1972 as the canonical pressure-correction algorithm for steady-state problems. It iterates through: guess the pressure field, solve momentum to get velocity, correct pressure and velocity by enforcing continuity, solve the resulting Poisson equation for pressure correction, check convergence, and repeat if needed.

The momentum equation discretised schematically gives a relation between cell velocity, neighbouring velocities, and pressure gradient. Substituting this into continuity yields a Poisson equation for pressure correction. The right-hand side is the mass imbalance from the guessed velocity field. The correction updates both pressure and velocity using under-relaxation factors alpha_p and alpha_U in range 0 to 1. Under-relaxation prevents oscillatory convergence but slows it. This is the key tuning parameter for SIMPLE solvers.

Typical relaxation factors for steady RANS (simpleFoam):

VariableTypical alphaAggressiveConservative
--------------------------------------------------
p prime (pressure)0.2 to 0.30.4 (may oscillate)0.1 (slow)
U0.5 to 0.70.8 (only for well-behaved cases)0.3 (extreme robustness)
k0.5 to 0.70.80.3
omega, epsilon0.5 to 0.70.80.3

Under-relaxation is necessary because SIMPLE linearizes the pressure correction by dropping some terms. The algorithm converges because the dropped terms decay each iteration. Too much under-relaxation causes crawling convergence. Too little causes oscillation and divergence. Finding the sweet spot is the tuning skill.

PISO (Pressure-Implicit with Splitting of Operators)

Issa proposed PISO in 1986 for transient problems. It adds corrector loops to SIMPLE within each time step: guess pressure, solve momentum, run corrector loops (typically 2) to solve for pressure correction and update velocity, then advance the time step.

PISO does not require momentum residuals to reach zero at each time step. The residual only needs to match time accuracy. One corrector is formally insufficient—errors accumulate. Two correctors are adequate. Three are rarely needed. PISO uses no under-relaxation because the time derivative provides stability. It requires Courant number less than 1; the algorithm tolerates no large temporal errors from high CFL.

PISO is used in pisoFoam (transient incompressible laminar). It forms the inner loop inside pimpleFoam PIMPLE algorithm. See the OpenFOAM Numerics note for PISO corrector configuration.

PIMPLE (PISO + SIMPLE)

PIMPLE combines the SIMPLE outer loop with PISO inner correctors. SIMPLE allows under-relaxation and Courant numbers greater than 1. PISO provides corrector iterations. For transient RANS or LES with moving meshes, PIMPLE is typically the right choice. It allows Co greater than 1, saving 5 to 10 times wall-clock time versus pure PISO.

PIMPLE
{
    nOuterCorrectors  2;               // SIMPLE-style outer loop
    nCorrectors       1;               // PISO-style inner loops
    nNonOrthogonalCorrectors 1;
    pRefCell          0;
    pRefValue         0;
    relaxationFactors
    {
        fields
        {
            p           0.3;
        }
        volumes
        {
            U           0.7;
            k           0.7;
            omega       0.7;
        }
    }
}

The OpenFOAM v14 incompressibleFluid and fluid modules use this algorithm internally. For transient RANS or LES with moving meshes, PIMPLE is typically the right choice. It allows Co greater than 1. This saves 5 to 10 times wall-clock time versus pure PISO.

The nOuterCorrectors parameter controls the SIMPLE-style outer loop. When set to 1, PIMPLE degenerates to PISO with optional non-orthogonal correctors. When set greater than 1, it runs the under-relaxed SIMPLE loop at each time step, allowing high CFL. This is the key practical tuning parameter.

nOuternInnerCo limitUse case
------------------------------------
12Less than 1Pure PISO (small time steps)
2 to 312 to 50 (with maxCo)PIMPLE transient
10--Steady SIMPLE (pimpleFoam with maxCo disabled)

Non-orthogonal correctors

The pressure equation depends on non-orthogonal correction. On a non-orthogonal mesh, the pressure-correction Poisson equation must be solved iteratively: solve with only the orthogonal part first, compute correction using the non-orthogonal term based on that result, solve again with correction, and repeat for the number of non-orthogonal correctors.

Non-orthogonal correctors fix pressure, while PISO correctors fix velocity. The number ranges from 0 for purely orthogonal hex meshes to 2 or 3 for moderately non-orthogonal meshes.

See the Mesh Quality note for when non-orthogonality becomes a problem. See the OpenFOAM Case Setup note for PIMPLE dictionary settings.

Pressure reference cell

The pressure Poisson equation has Neumann boundary conditions on all boundaries. This makes the equation singular—any constant added to a solution produces another valid one. Pressure is determined only up to an additive constant.

The standard fix is to pin pressure at a single cell to a reference value, typically 0. This pins the entire pressure field to a known datum. Without it, the linear solver fails because the matrix is singular.

Summary: algorithm selection guide

Flow typeAlgorithmTypical CoRelaxation
-------------------------------------------
Steady laminar (Re less than 2000)SIMPLE (simpleFoam)N/Ap: 0.3, U: 0.7
Steady RANS (turbulent)SIMPLE (simpleFoam)N/Ap: 0.2 to 0.3, U: 0.5 to 0.7
Transient laminar (Co less than 1)PISO (pisoFoam)Less than 1None
Transient RANS/LESPIMPLE (pimpleFoam)2 to 50With outer correctors
Moving mesh (DyM)PIMPLE2 to 50With outer correctors
Free-surface (VOF)PIMPLE (interFoam)1 to 5 (LTS)With correctors

These settings apply to the incompressibleFluid module in OpenFOAM v14. Fluent uses SIMPLE by default for steady flow and Coupled (not segregated SIMPLE/PISO) for transient. Star-CCM+ uses segregated SIMPLE for steady flow and coupled pressure-based for transient.

Cross-references