Skip to content
Draft. This manual is new and still being checked against the software as it is verified. Some pages will change. If something here does not match what you see, the software is right — tell us and we will fix the page.

Courant number

In a transient case the Simulation control panel asks for a time step, and then immediately offers to take it away from you again: Adjust time step to Courant number, which is on by default for every analysis type that has no steady form.

That is not the application being protective. The time step in a transient CFD run is not a free parameter — it is set by the mesh and the flow, and the only real choice you have is whether you compute it yourself or let the solver do it every step.


For a cell of size Δx, with fluid moving through it at speed U, over a step Δt:

Co = U · Δt / Δx

It is the number of cells the flow crosses in one time step. Co = 1 means the fluid moves exactly one cell per step. Co = 10 means it crosses ten.

The number that governs the run is the maximum over every cell in the domain, which is set by the worst combination of a small cell and a fast flow. That combination is usually not where you would guess: the smallest cells are in the boundary layer, where the flow is slow, and the fastest flow is in the free stream, where the cells are large. The maximum often turns up somewhere in between — around a leading edge, through a gap, at the edge of a refinement region.


There are two separate reasons, and they get conflated.

An explicit scheme computes the new value of a cell from the old values of its neighbours. If the flow crosses more than one cell in a step, information has physically travelled further than the scheme can see, and the scheme has no way to account for it. Above roughly Co = 1, explicit schemes are unconditionally unstable — not inaccurate, unstable. The solution grows without bound in a few steps.

Most solvers here are implicit and are not subject to that limit. They will happily run at Co of 50 without diverging.

This is the reason that still applies when stability does not.

An implicit scheme at Co = 10 is integrating the transport term over a step during which the fluid has crossed ten cells. Whatever structure existed across those ten cells has been averaged over in a single step. The scheme is stable because it is implicit; it is inaccurate because it has stepped straight over the spatial detail you paid for when you built the mesh.

The visible symptom is diffusion. Gradients smear. A vortex weakens as it convects. A shed wake looks blurrier than it should. Nothing crashes and nothing warns you.

So: stability sets a hard limit for some schemes, and accuracy sets a softer but real one for all of them.


flowchart TD
M["You refine the mesh"] --> S["The smallest cell gets smaller"]
S --> D["The time step must come down<br/>to hold the same Courant number"]
D --> N["More steps to reach the same end time"]
M --> C["More cells, so each step<br/>costs more"]
N --> T["Total cost rises faster<br/>than the cell count does"]
C --> T

Mesh and time step are not independent choices. Halving the cell size in a transient run roughly doubles the number of time steps and multiplies the cost of each one by the cell increase. This is why a transient study is qualitatively more expensive than a steady one, and why the cheap version of a case — 2-D, or a reduced domain — earns its place in a transient mesh study far more than in a steady one.

The report’s cost section gives you the numbers to size the next run from the last one: wall clock, cores, steps, seconds per step and cell-steps per core-second. Doubling the cells roughly doubles the cost per step; halving the time step doubles the number of them.


Adjust time step to Courant number. With this on, the solver recomputes the step every iteration to hold the limit you set. The Time step field then only supplies the first step — after that, the solver is in charge.

This is almost always what you want, because the maximum Courant number is a property of the solution and the solution changes as the run develops. A step that was safe during start-up can be far too large once the flow has accelerated, and one that was chosen for a fully developed flow will be wastefully small at the beginning.

Max Courant is the limit being held. The panel’s own guidance: 1 is safe for PISO; PIMPLE with outer correctors tolerates 5 to 10. The reason for the difference is structural — PISO makes a single pass of pressure–velocity coupling per step, so the step has to be small enough that one pass is enough. PIMPLE iterates within the step, which is what buys the larger Courant number. It is not free: those outer correctors cost solver work, and past some point you spend more per step than you save in steps.

Max time step caps the step from above regardless of Courant. This is the control that stops a slow-moving region from letting Δt grow until it steps over the physics you are trying to resolve. If you are resolving a shedding cycle, an oscillation or a wave, set this.

Free surface cases get a second, tighter limit. An interface that crosses more than a fraction of a cell in a step smears, and once smeared it does not sharpen again. VoF and marine analyses carry a separate interface Courant limit and default to a lower overall limit than single-phase cases — the interface, not the bulk flow, is what sets the step.

A steady run has no Courant number in this sense at all. SIMPLE has no time step; its equivalent stability control is the relaxation factors. See Convergence and residuals.


The other constraint: the physics has its own time scale

Section titled “The other constraint: the physics has its own time scale”

The Courant number puts an upper bound on the step. It does not tell you the step is small enough.

If the case is about something with a frequency — vortex shedding, a wave passing, a valve opening, a rotor blade sweeping past a stator — then you need enough steps to resolve that, and it is a completely separate requirement. Courant stability might permit a step that gives you a handful of steps per shedding cycle, which is nowhere near enough to represent the cycle.

The rule is simply: work out both bounds and take the smaller.

  • The Courant bound, from the smallest cell and the fastest local flow
  • The physical bound, from the shortest time scale you want to see resolved

Neither one implies the other, and only the first one is enforced automatically.


Symptom Likely cause
Divergence within the first few steps Initial step far too large. Turn Courant adjustment on, or start smaller
A value that is not a number, early Same, usually with a bad initial field on top
Runs stably, but everything looks diffuse Courant limit too high for accuracy. Stable, and smearing the answer
A free surface that starts sharp and goes fuzzy Interface Courant limit too high
Per-step residuals creeping up over the run Steps no longer converging within their correctors; the step has grown too large as the flow developed
A periodic phenomenon with the wrong amplitude or frequency Too few steps per period — the physical bound, not the Courant one

The last one is the one that does not announce itself, and it is the reason Max time step exists as a separate control from Max Courant.