Courant Number (CFL) & Time Step Calculator

Courant Number (CFL) and Time Step Calculator

CFL from velocity, cell size and time step, and the time step a target CFL needs — judged against the limit that applies to YOUR solver, because an explicit scheme diverges above 1 and an implicit one is stable at 50 and wrong. Plus the vortex-shedding constraint, the total step count and the wall clock.

Courant number and time step

velocity, cell size, time step → CFL, the binding Δt and the run time
The speed at which information crosses the cell. For an incompressible solver that is the local flow speed; for a compressible density-based solver the wave speed is |u| + c, and at Mach 0.2 in air that is about six times the flow speed — which is why compressible explicit runs need such small steps.
The cell the CFL is being judged on, measured ALONG the flow, not the average cell. Solvers report the maximum CFL in the domain, and that maximum is nearly always in the smallest cell in a fast part of the flow — not in the near-wall cells, where the velocity is small.
The physical time step of the transient run. For a dual-time or pseudo-transient scheme this is the OUTER step; the inner iterations have their own pseudo-time CFL, which is a solver control and not this number.
This is the whole point of the page. The same Courant number of 3 is a divergence on an explicit solver, a normal working value on an implicit URANS run, and a smeared eddy in LES. The band under the answer changes with this box.
What you want the CFL to be. The page reports the time step that achieves it. Sensible targets: 0.5 to 0.9 explicit, 1 to 5 implicit URANS, 0.5 to 1 for LES.
The dimension the Strouhal number is referenced to — the cylinder diameter, the bluff-body depth, the chord projected normal to the flow. Only used for the shedding constraint below.
St = f·D/U. About 0.2 for a circular cylinder over Re from 10² to 10⁵, which is the value almost everyone uses; it rises to roughly 0.25 to 0.30 above the drag crisis and is around 0.12 to 0.15 for a square section at zero incidence.
20 to 40 is the usual engineering guidance for resolving a shedding cycle in URANS. Aeroacoustic and detailed wake work uses far more — Flexcompute’s Flow360 documentation, for instance, recommends about 100 steps per cycle.
The flow time you need, not the number of steps. For a shedding case allow several cycles to flush the initial transient and then at least ten more to average over.
Seconds of wall clock for one physical time step on your machine and core count, inner iterations included. Take it from a short trial run rather than guessing: it is the only input here that cannot be derived.
1.500Example

Air at 20 m/s over a 50 mm cylinder, 2 mm cells, a 1.5×10⁻⁴ s time step, implicit unsteady RANS, 1 s of flow time at 2.5 s of wall clock per step

Advertisement

The Courant number, the two ways to invert it, and the shedding constraint

CFL = U Δt/Δx  ·  Δt = CFLtarget Δx/U  ·  multi-dimensional: Δt Σi|ui|/Δxi ≤ 1  ·  f = St U/D  ·  Δt = 1/(N f)  ·  steps = t/Δt
CFL
Courant–Friedrichs–Lewy number: the number of cells a fluid particle crosses in one time step. Named for the 1928 paper that established it as the condition for a difference scheme to have any chance of converging to the differential equation
U
the speed at which information moves. Flow speed for an incompressible solver; |u| + c for a compressible one, because acoustic waves also have to be followed
Δx
cell size along the flow. The maximum CFL a solver reports comes from the worst cell in the domain, which is usually a small cell in a fast region rather than the near-wall cell
St
Strouhal number, f·D/U. About 0.2 for a circular cylinder across four decades of Reynolds number
N
time steps per shedding cycle. 20 to 40 for engineering URANS; 100 or more for acoustics and detailed wake work
Fo
Fourier (diffusion) number νΔt/Δx². The second explicit limit, at most about 0.5 in 1-D and 1/6 in 3-D. Not computed here because it needs the viscosity, but in a fine near-wall cell it is usually the one that binds

Worked example

Air at 20 m/s over a 50 mm cylinder, 2 mm cells, a 1.5×10⁻⁴ s time step, implicit unsteady RANS, 1 s of flow time at 2.5 s of wall clock per step
The Courant number itself: CFL = U·Δt/Δx = 20 × 1.5×10⁻⁴/0.002 = 1.5. A particle crosses one and a half cells per step
WHAT THAT MEANS DEPENDS ENTIRELY ON THE SOLVER, and this is why the page exists. On an explicit scheme 1.5 is a divergence and the run is already dead. On the implicit URANS scheme chosen here it is a normal working value. In an LES it is at the edge — stable, but the smallest resolved eddies are being smeared in time
Invert it for the time step. CFL = 1 needs Δt = Δx/U = 0.002/20 = 1×10⁻⁴ s. That is the number to use if the solver is explicit
Now the shedding constraint, which is a completely different argument. f = St·U/D = 0.2 × 20/0.05 = 80 Hz, so the shedding period is 12.5 ms. At 30 steps per cycle the step must be 12.5 ms/30 = 4.167×10⁻⁴ s
AND HERE THE COMMON GUIDANCE IS WRONG. It is often said that the shedding criterion binds tighter than the Courant condition. Compare them: 4.167×10⁻⁴ s from shedding against 1×10⁻⁴ s from CFL = 1. The Courant condition is over four times tighter. Work it out in general and the shedding criterion only binds when D/Δx is less than CFLtarget·St·N, which here is 1 × 0.2 × 30 = 6 cells across the body. This mesh has 25. On any grid that resolves the body at all, the Courant target binds. What is true is that an implicit solver has no Courant STABILITY limit, so on an implicit run the shedding criterion is often the only constraint left — which is a different statement
At your own time step the shedding cycle gets 12.5 ms/1.5×10⁻⁴ = 83 steps, comfortably inside the 20 to 40 guidance and heading towards acoustic resolution
The bill. One second of flow time at 1.5×10⁻⁴ s is 6,667 steps; at 2.5 s of wall clock each that is 16,667 s, or 4.63 hours. Drop to the binding step of 1×10⁻⁴ s and it is 10,000 steps and 6.94 hours. One second of flow time is also 80 shedding cycles, which is a generous averaging window — halve the flow time and you halve the bill
One more limit that is not on this page because it needs the viscosity: the explicit diffusive limit ν·Δt/Δx² at most about 0.5 in 1-D and 1/6 in 3-D. For air at 20 °C in these 2 mm cells that allows Δt up to 0.13 s, so convection binds here by three orders of magnitude. In a 10 μm near-wall cell the same limit is 3.3×10⁻⁶ s and it would be the binding one

The same Courant number, read three ways

Courant numberExplicit schemeImplicit unsteady RANSLES, DES or SAS
0.2stable, cheap per step, expensive in stepsmore time accuracy than most RANS transients needideal
0.5normal working valueconservativethe usual target
1.0the one-dimensional stability limit exactlyfinethe upper edge of good practice
2DIVERGESnormaleddies starting to smear
5DIVERGESthe upper end of normalthe resolved spectrum is being damped
20DIVERGESstable; second-order time accuracy is gonenot scale-resolving in any meaningful sense
1000DIVERGESstable, converged residuals, meaningless time historyno
There is no single answer to “what CFL should I use”, and a page that prints one number is not helping. The dividing line is stability against accuracy: an explicit scheme cannot exceed 1 because the arithmetic forbids it, while an implicit scheme has no stability limit at all and will report healthy residuals at any Courant number you like. That is precisely what makes the implicit case dangerous — nothing in the solver output tells you the time step is too big.

Which constraint binds: the Courant target or the shedding resolution

Cells across the body D/ΔxΔt from CFL = 1Δt from 30 steps per cycle (St = 0.2)Which binds
2D/(2U)D/(6U)shedding, by 3×
6D/(6U)D/(6U)exactly equal — the crossover
10D/(10U)D/(6U)Courant, by 1.67×
25D/(25U)D/(6U)Courant, by 4.17×
100D/(100U)D/(6U)Courant, by 16.7×
400D/(400U)D/(6U)Courant, by 66.7×
Both time steps are proportional to D/U, so the whole comparison collapses to one number: the shedding criterion binds only when D/Δx is below CFL_target·St·N, which is 6 for the common combination of CFL = 1, St = 0.2 and 30 steps per cycle. Six cells across a cylinder is not a mesh anyone would run. The reason the shedding constraint nonetheless dominates real work is different and worth stating plainly: implicit solvers have no Courant stability limit, so on an implicit run there is nothing else setting the step.

Strouhal numbers worth having to hand

BodyStReynolds number range where it holds
Circular cylinder, subcritical0.20 to 0.21about 300 to 1.5×10⁵
Circular cylinder, laminar street0.12 to 0.20, rising with Reabout 47 to 190
Circular cylinder, above the drag crisis0.25 to 0.30above about 3.5×10⁶
Square cylinder, face normal to the flow0.12 to 0.1410³ to 10⁵
Flat plate normal to the flowabout 0.1510³ to 10⁵
Sphereabout 0.2800 to 2×10⁵
Referenced to the dimension projected normal to the flow in every case, which is the definition the Strouhal number needs and the thing most often got wrong for a non-circular body. The cylinder value is remarkably flat: it stays close to 0.2 from Reynolds 10² to 10⁵, which is why 0.2 works as a first estimate for almost any bluff body and why a shedding frequency that comes out a factor of two off is nearly always a length, not a Strouhal number.

Stability, accuracy, and why the same Courant number means three different things

The Courant number is the number of cells a fluid particle crosses in one time step, and that is all it is. CFL = UΔt/Δx. Everything interesting about it follows from asking what happens when the answer exceeds one, and the honest answer is: it depends entirely on how the equations are being advanced in time. That is the distinction this page is built around, because a calculator that prints UΔt/Δx and stops has told you nothing you could not do in your head.

For an explicit scheme the limit is arithmetic, not judgement. An explicit update computes the new value in a cell from old values in that cell and its neighbours. If the physical domain of dependence — where the information actually comes from — reaches outside the cells the scheme looked at, no amount of care in the discretisation can recover it, and the scheme is unconditionally unstable. That is the Courant–Friedrichs–Lewy condition of 1928, and above CFL = 1 an explicit run does not degrade, it diverges. Two refinements matter in practice. In more than one dimension the condition is Δt·Σ|u_i|/Δx_i at most 1, so a flow at 45 degrees through cubic cells hits the limit when the reported one-dimensional Courant number is 0.707 in 2-D or 0.577 in 3-D. And for a compressible solver the relevant speed is |u| + c, not |u| — at Mach 0.2 that is six times larger and the allowable step is six times smaller, which is the whole reason low-Mach compressible work is done with preconditioning or an implicit scheme.

For an implicit scheme there is no stability limit at all, and that is the trap. An implicit solver assembles and solves a system that couples the whole domain at each step, so information can travel any distance in one step and the scheme is stable at a Courant number of ten, or a hundred, or ten thousand. It will report converged residuals the whole way. What degrades is accuracy: a second-order implicit scheme retains its formal order only when the solution changes little per step, and once a feature moves several cells per step it is being stepped over rather than followed. Nothing in the solver monitors this. A transient run at CFL = 200 that reports beautiful residuals and a smooth force history is very often a sequence of loosely coupled steady solutions, and the time history it produces is fiction.

For a scale-resolving run, target CFL of about 1 regardless of the scheme. LES and DES resolve eddies in space, and the argument for keeping the Courant number near 1 is that there is no point resolving a structure on the grid and then advecting it in jumps. The temporal discretisation damps what the grid resolved, the resolved spectrum rolls off too early, and the subgrid model is credited with dissipation the time step is really supplying. Most LES practitioners aim for a maximum Courant number of about 1 in the region of interest with an average well below that. The scheme being implicit does not change the target, it only changes what happens when you miss it: an explicit LES blows up, an implicit one quietly under-resolves.

The vortex-shedding constraint is a separate argument and the common guidance about it is wrong. It is widely said that resolving a shedding cycle binds tighter than the Courant condition. Set both out: the Courant target gives Δt = CFL·Δx/U, and N steps per shedding cycle gives Δt = D/(St·U·N). Both are proportional to a length over U, so the velocity cancels and the comparison reduces to a pure ratio of lengths. The shedding criterion binds only when D/Δx is below CFL·St·N — with the usual CFL = 1, St = 0.2 and N = 30, that is six cells across the body. Nobody meshes a cylinder with six cells across it. On a mesh with a hundred cells across the body the Courant target is seventeen times tighter. The grain of truth is that an implicit solver has no Courant limit, so on implicit runs the shedding criterion is often the only constraint anybody applies — which is a statement about practice, not about which number is smaller.

Two limits this page deliberately does not compute, and one it does. It does not compute the diffusive (Fourier) limit νΔt/Δx², which for an explicit viscous term must stay under about 0.5 in 1-D and 1/6 in 3-D; in fine near-wall cells that limit binds long before the convective one, and it needs a viscosity this page does not ask for. It does not compute the acoustic Courant number for a compressible solver, because you should put |u| + c into the velocity box yourself and see it. What it does compute is the bill: total steps and wall clock at both your step and the binding step, because the decision that actually gets made is not “what is the right time step” but “what can I afford between now and Thursday”, and it is better made with the two numbers side by side.

Advertisement

Frequently asked questions

What Courant number should I use?

There is no single answer, which is why this page asks which solver you are on. Explicit: 0.5 to 0.9, and never above 1, less in 3-D. Implicit unsteady RANS: 1 to 5 is normal, and the real constraint is resolving the physical timescale rather than the cell crossing. LES, DES or SAS: aim for a maximum of about 1 in the resolved region whatever the scheme. Pseudo-transient marching to a steady state: as large as the solver will take, because the time history is not being used for anything.

My implicit run has a Courant number of 300 and the residuals are perfect. Is that a problem?

The residuals are telling you the linear system was solved, which it was. They say nothing about whether the time step resolves the physics. At CFL = 300 a feature moving with the flow crosses three hundred cells per step, so anything transient is being stepped over. If you are driving to a steady state this is exactly right and the time history is meaningless by design. If you intend to report a time history, a frequency, a phase or an unsteady load, cut the step until the quantity you care about stops moving when you halve it — that is the only convergence test that means anything in time.

Which velocity and which cell size go in?

The velocity at which information crosses the cell, and the cell it crosses. For an incompressible solver that is the local flow speed; for a compressible density-based solver it is |u| + c, which at Mach 0.2 in air is about six times the flow speed. The cell size is measured ALONG the flow and it is the cell that produces the worst Courant number in the domain — usually a small cell somewhere fast, not the thin near-wall cell, where the velocity is small for the same reason the cell is thin.

Does the near-wall cell set the time step?

Rarely, for convection, because the velocity there is small: a y+ = 1 cell is thin but the streamwise velocity in it is a few per cent of the free stream, so the convective Courant number is modest. It very much does set the limit for an explicit viscous term, where the Fourier number νΔt/Δx² must stay below about 0.5 in 1-D and 1/6 in 3-D; a 10 μm cell in air allows only about 3×10⁻⁶ s on that basis. This is why explicit codes use local time stepping for steady work and implicit schemes for wall-resolved unsteady work.

How many time steps per shedding cycle do I actually need?

20 to 40 is the usual engineering guidance and it will give you the shedding frequency and the force amplitudes. It is not enough for aeroacoustics, for the fine structure of the wake, or for anything where the pressure spectrum matters — Flexcompute’s Flow360 documentation, for example, recommends about 100 steps per cycle. The test to trust is your own: halve the step, and if the frequency and the RMS lift move, you were not resolved.

Is the Courant number the same as the diffusion number?

No, and confusing them costs explicit runs. The Courant number UΔt/Δx is about convection and its explicit limit is 1. The diffusion or Fourier number νΔt/Δx² is about viscous transport and its explicit limit is about 0.5 in one dimension and 1/6 in three. Because it goes as Δx², halving the cell size quarters the allowable time step instead of halving it, so on a fine mesh the diffusive limit overtakes the convective one. A stable-looking explicit run that blows up when the mesh is refined is almost always hitting this.

Why does my compressible run need such a tiny time step?

Because the Courant number for a density-based compressible solver is built on |u| + c, the fastest wave in the system, not on the flow speed. In air at 20 °C the speed of sound is about 343 m/s, so a 20 m/s flow has an acoustic Courant number eighteen times the convective one. If the acoustics are not part of the answer, that entire factor is wasted; the standard remedies are low-Mach preconditioning, an implicit scheme, or a pressure-based solver.

How long will my run take?

Steps times seconds per step, and the page does both with your own cost figure. The part people get wrong is the flow time: a shedding case needs several cycles to flush the initial transient and then enough cycles to average over, so ten to thirty cycles is a realistic target and the initial transient is usually the cheapest thing to cut. Measure the cost per step from a short trial rather than estimating it — the inner-iteration count is often the difference between a run that finishes overnight and one that does not.

Related calculators

References

  1. R. Courant, K. Friedrichs and H. Lewy, Über die partiellen Differenzengleichungen der mathematischen Physik, Mathematische Annalen 100 (1928), 32–74. The origin of the condition and of the statement that the numerical domain of dependence must contain the physical one — which is why the explicit limit is a property of the scheme rather than a tuning parameter.
  2. ANSYS Fluent Theory and User’s Guides, sections on transient formulations and the Courant number, for the distinction between the explicit density-based solver’s stability limit and the implicit formulation’s unconditional stability. Cited, not reproduced.
  3. Flexcompute, Flow360 documentation — Time Stepping. Source for the shedding frequency estimate f = St·U/D used as a time-step criterion and for the recommendation of about 100 steps per shedding cycle, which is quoted here beside the more common 20 to 40 engineering guidance rather than in place of it.
  4. A. Roshko, On the Development of Turbulent Wakes from Vortex Streets, NACA Technical Note 2913 (1953) and NACA Report 1191. A US Government work. Source for the cylinder Strouhal behaviour underlying the St values tabulated here.
  5. Derivation performed for this page rather than taken from a source: the two candidate time steps are Δt = CFL·Δx/U and Δt = D/(St·U·N), so their ratio is D/(CFL·St·N·Δx) and the velocity cancels. The shedding criterion binds only when D/Δx < CFL·St·N, which is 6 for CFL = 1, St = 0.2 and N = 30. This contradicts the common claim that the shedding criterion usually binds tighter, and the contradiction is arithmetic rather than a matter of opinion.

Setup guidance, not validation. Correlations have ranges of validity and cell-count estimates are order-of-magnitude. A converged simulation is not a correct one. Full disclaimer at calcengines.com/disclaimer/