Courant Number (CFL condition)
Also known as CFL number · CFL condition · Courant Friedrichs Lewy condition · Courant Friedrichs Lewy number · CFL · time step stability limit · explicit scheme stability · cell Courant number
Enter your known values, leave one input blank, and solves for the missing one. Try different units for next level excitement!
Learning zone
In 1928 Richard Courant, Kurt Friedrichs and Hans Lewy published a paper in the Mathematische Annalen about the difference equations of mathematical physics. They were not thinking about computers, which did not exist. They were asking a pure question: when does the solution of a difference equation converge to the solution of the differential equation it was built from? The answer they found became, twenty years later, the single most quoted rule in computational physics.
The argument is about domains of dependence. In a hyperbolic problem, the solution at a point depends on the data in a cone reaching back from it — the region that could have sent a signal arriving in time. An explicit difference scheme also has a domain of dependence: at each step a cell looks only at its immediate neighbours, so after steps it can only have heard from cells away. If the physical cone reaches outside the numerical one, the scheme is trying to compute an answer that depends on information it has structurally never seen. No amount of refinement fixes that, because both cones shrink together. The scheme cannot converge.
Written down, that condition is , or
\[C = \frac{v\,\Delta t}{\Delta x} \le 1\]
Read it as a distance: information must not cross more than one cell per time step.
Now the two halves that are usually taught as one.
The condition is necessary. It is not sufficient. Violating it guarantees that an explicit scheme fails — and it fails spectacularly, with oscillations that double every step and reach infinity or NaN within a few dozen. Satisfying it guarantees nothing whatever. A scheme can be unconditionally unstable: forward-time centred-space advection is the standard classroom example, and it diverges at just as cheerfully as at . Stability has to be established for the specific scheme, usually by von Neumann analysis, and the CFL condition is one requirement among several. Treating as a certificate of stability is a superstition, and it is a superstition that wastes a great deal of time when a run diverges at and the first instinct is to lower the step further.
And implicit schemes are not bound by it at all. An implicit step solves for the whole field simultaneously, so every cell depends on every other cell, the numerical domain of dependence is the entire grid, and the CFL argument simply does not apply. Courant numbers of 10, 100 or 1000 are routine in steady-state CFD, in reservoir simulation, and in implicit ocean models. What you give up is accuracy in time, not stability: at the scheme is perfectly stable and has stopped resolving the transient. What you pay is a matrix solve per step instead of an arithmetic sweep. That trade — stability for cost — is the central design decision in a solver, and it is why "just use implicit" is not automatically right for a genuinely transient problem.
The number is under your control, which no other group on this shard is. That is what makes it useful, and it is also where the choices bite. Use the smallest cell in the mesh, not a representative one: on an unstructured or graded grid a single sliver in a boundary layer sets the step for the whole domain, which is why mesh quality is a run-time problem and not only an accuracy one. Use the fastest signal: in compressible flow that is , not , and in a shallow-water model it is the current plus . In more than one dimension the directional contributions add for many schemes, so the practical limit is nearer on an -dimensional grid.
And if the equation has a diffusion term, this is usually not the binding condition at all. The explicit diffusion limit is the von Neumann number, , and it scales with the square of the cell size — halving the mesh quarters the allowable step rather than halving it. A viscous simulation on a fine near-wall mesh is almost always diffusion-limited, and lowering the Courant number to fix it is treating the wrong symptom.
One counterintuitive fact to finish with. For a first-order upwind scheme, the numerical diffusion introduced by the discretization is proportional to : the scheme is exact at and smears most at small Courant number. So running at a very small costs run time and accuracy at once. Between 0.5 and 0.9 is where most people settle, with an adaptive step that targets a fixed rather than a fixed , so that a jet forming or a shock strengthening mid-run cannot quietly push the simulation over the line.
- = Courant number
- = Signal or advection speed (m/s)
- = Time step (s)
- = Cell size (mm)
- Courant number — Amdahl's Law (Speedup from Parallelisation), Gustafson's Law (Scaled Speedup)
- Signal or advection speed — Speed, Distance & Time, Kinetic Energy
- Time step — Detention Storage from a Routing Step, M/M/1 Average Time in System
- Cell size — Rosin–Rammler Passing Fraction, Shear Stress on a Fillet Weld Throat