Courant number measures transport per time step relative to the local cell scale. In a one-dimensional engineering estimate, Co = UΔt/Δx. A value of 0.5 means a feature travelling at U moves about half a cell during one time step. Real finite-volume codes may define a cell Courant number from face fluxes rather than this simplified one-dimensional expression.
The simplest way to understand Co
If UΔt is the distance travelled during one time step, dividing by Δx expresses that travel in units of local cells. This makes the Courant number a natural bridge between mesh resolution and temporal resolution.
OpenFOAM's `CourantNo` function object describes Co as a measure of the rate at which information is transported by a flux field and computes a cell field from local face fluxes and cell volume. That is more representative of a finite-volume mesh than one global U and Δx.
The dangerous Courant number is usually local
A global estimate based on inlet velocity and average cell size can look acceptable while a tiny cell near a sharp edge, gap, prism transition or moving interface experiences a much higher local Co.
Small cells
Halving Δx doubles Co at the same U and Δt.
Accelerating flow
A jet, nozzle or tip-gap velocity can exceed the nominal inlet speed substantially.
Moving interfaces
Sliding, overset or deforming meshes may introduce additional motion-related resolution constraints.
Multiphase interfaces
VOF/free-surface problems often require careful local spatial and temporal resolution even when the solver remains numerically stable.
For this reason, a useful workflow checks the maximum or high-percentile local Courant field in addition to a pre-processing estimate.
Does Courant number have to stay below 1?
No universal rule applies to every CFD algorithm. The CFL condition is a stability requirement for particular numerical discretizations. Many explicit time-integration schemes have strict Courant-type limits. Implicit formulations can often remain stable at larger Co values, but that does not mean the transient solution is adequately resolved.
An implicit simulation may run at Co > 1 while smearing or phase-shifting a fast transient. Stability and temporal accuracy are separate questions.
The correct acceptable Co depends on the governing equations, spatial discretization, time integration, coupling strategy, mesh, and what physical frequencies or interfaces you need to resolve.
Temporal accuracy needs its own evidence
Suppose a simulation is stable at Δt = 0.01 s. That alone does not prove the result is time-step independent. Repeat a representative portion of the simulation with a smaller time step and compare engineering quantities such as:
- force or moment amplitude and phase,
- pressure-drop history,
- temperature peaks and thermal lag,
- free-surface height or interface position,
- mass-flow oscillation,
- rotating-load harmonics or blade-passing behavior.
If those quantities change materially, the original step is too large for the required temporal fidelity regardless of solver stability.
Compressible and wave problems need the relevant signal speed
For pure advection, U is a useful characteristic speed. In compressible flow, information can propagate through acoustic waves as well as bulk convection. A practical CFL estimate may therefore involve a characteristic speed such as |U| + a, where a is the local speed of sound, depending on the numerical method.
The Abecator Courant calculator includes an optional additional signal-speed term for this reason. It is intentionally labelled as an estimate because solver-specific compressible CFL definitions can differ.
Need speed of sound?
Use the ideal-gas Mach calculator to estimate a = √(γRT) before building a signal-speed timestep estimate.
A practical transient time-step workflow
- Identify the fastest important transport or signal speed.
Use local jets, rotating tips or acoustic speed when they are more restrictive than the inlet velocity.
- Identify the smallest relevant cell scale.
Do not let one accidental tiny cell silently dictate the entire simulation; fix pathological mesh cells where possible.
- Choose a starting target Co.
Use the solver/model requirements and the physics you need to resolve—not a universal number copied from another case.
- Estimate Δt.
For the simplified relation, Δt = Co·Δx/U.
- Run and inspect the local Co field.
Check where the maximum occurs and whether it is a meaningful flow region or a mesh defect.
- Perform a timestep sensitivity study.
Compare the engineering outputs that matter, not just residual histories.
Calculate Co or Δt
Switch between “find timestep” and “check Courant number,” with optional signal speed.
Common mistakes
- Using average cell size instead of the local restrictive scale.
- Using inlet velocity when the flow accelerates strongly elsewhere.
- Assuming Co < 1 guarantees accuracy.
- Assuming an implicit method makes timestep sensitivity unnecessary.
- Reducing Δt to compensate for one bad mesh cell rather than repairing the mesh.
- Ignoring acoustic or interface-propagation speed in relevant problems.
- Comparing residuals only instead of transient engineering outputs.
Primary references
- OpenFOAM Documentation — CourantNo: cell Courant field from local flux scales and its interpretation as information transport.
- OpenFOAM API — CourantNo: current function-object implementation reference.