Courant Number Explained for Transient CFD: Stability, Accuracy, and Time Step Selection
Learn how the Courant number affects your transient CFD simulations, and how to select the right time step based on your mesh and flow velocity.
The Courant-Friedrichs-Lewy (CFL) condition, or simply the Courant number, is one of the most critical numerical concepts you will encounter when running transient Computational Fluid Dynamics (CFD) simulations.
It dictates the relationship between the speed of your fluid, the size of your computational cells, and the time step you choose. Getting it wrong will result in either an unstable simulation that diverges (crashes), or a simulation that takes unnecessarily long to solve while smearing important transient details.
What is the Courant Number?
In simple terms, the Courant number () represents the number of computational cells that a fluid particle moves through during a single time step ().
If , the fluid moves exactly one cell forward per time step. If , it jumps across five cells in a single time step.
The Formula and Units
The mathematical definition of the convective Courant number is:
Where:
- is the local flow velocity ()
- is the simulation time step size ()
- is the characteristic cell size or mesh length scale in the direction of flow ()
Because the units of the numerator () cancel out the units of the denominator (), the Courant number is dimensionless.
Input Guidance
- Velocity Input (): This should be the maximum expected velocity in your domain. Using an inlet velocity may be insufficient if the flow accelerates (e.g., through a nozzle or around an airfoil).
- Time-step Input (): This is the parameter you usually have control over. It is set by the user before running the simulation.
- Cell-size Input (): This represents your mesh density. In complex 3D unstructured meshes, is typically taken as the cube root of the cell volume, or the minimum edge length. Refined mesh regions (like boundary layers determined using our y+ Calculator) will have extremely small values, forcing the Courant number higher unless the time step is reduced.
Why Courant Number Matters in Transient CFD
Explicit vs. Implicit Solvers
The impact of the Courant number heavily depends on whether your solver relies on an explicit or implicit time-stepping formulation:
- Explicit Solvers: These calculate the state of a system at a later time solely from the state of the system at the current time. To remain mathematically stable, explicit solvers generally require . If fluid "skips" over a cell (), the solver lacks the mathematical information to pass fluxes correctly, and the simulation will immediately diverge (crash).
- Implicit Solvers: These calculate the state of a system by solving equations involving both the current state and the later state simultaneously. They are unconditionally stable from a purely mathematical standpoint, meaning you can often run with (even or ) without crashing.
Why a Single Threshold is Not Universal
While implicit solvers allow , you cannot blindly set massive time steps. The Courant number governs both stability and accuracy.
If is too high in an implicit solver, the simulation may run, but it will "smear" the temporal physics. High-frequency transient phenomena (like vortex shedding or acoustic waves) will be artificially damped out. The "acceptable" limit is not universal; it depends strictly on the discretization scheme, physics, mesh quality, and what flow phenomena you are trying to capture.
Local vs. Global Courant Number
It is crucial to understand that CFD solvers calculate the Courant number locally for every single cell in the domain.
Your global average Courant number might be 0.5, but a single highly skewed microscopic cell in a high-velocity region could have a local Courant number of 50. If you are using an explicit solver, that single cell will cause the entire simulation to crash.
Relationship to Mesh Refinement
There is a direct, unavoidable trade-off between spatial accuracy and computational cost. If you refine your mesh to capture more spatial detail ( decreases by half), the Courant number doubles. To maintain the same Courant number, you must reduce your time step () by half. Consequently, doubling the mesh resolution in a transient explicit simulation actually increases the computational cost significantly more than double, because you have more cells and require more time steps.
Examples
1. Convective Flow
Imagine studying the dispersion of a pollutant injected into a pipe. To accurately track the front of the pollutant plume without numerical diffusion (smearing), you generally want the Courant number near 1.0. This ensures the solver accurately steps the concentration field from cell to cell chronologically.
2. Moving Front / VOF Transient Behavior
In Volume of Fluid (VOF) simulations (e.g., water sloshing in a tank), capturing the sharp interface between air and water requires strict limits. Most VOF algebraic solvers require a Courant number strictly less than 1.0 (often at the interface) to prevent the water from jumping across cells and blurring the free surface.
Using the Courant Number Calculator Responsibly
You can use our Courant Number Calculator to quickly estimate the necessary time step for your mesh, but keep the following in mind:
- The calculator provides a numerical indicator, not a guarantee of accuracy or stability.
- It outputs an estimate based on your provided maximum velocity and minimum cell size. If you underestimate the velocity or overestimate your cell size, the real Courant number in the solver will be much higher.
- Use it to find a baseline , but monitor the maximum Courant number reported by your solver during the first few iterations.
Common Mistakes
- Arbitrary Time Steps: Guessing because it "feels right," without checking the actual mesh size or flow velocity.
- Ignoring Local Maxima: Looking only at the mean Courant number while ignoring the maximum Courant number, leading to unexplained crashes.
- Over-refining the Mesh: Refining the mesh in non-critical areas without realizing it severely restricts the allowable time step.
- Treating Implicit Solvers as Magic: Using in an implicit solver to finish faster, but completely missing the transient vortex shedding you were trying to study.
Practical Workflow
- Determine your required cell size based on spatial gradients and boundary layer requirements (use the y+ Calculator and Reynolds Number Calculator).
- Identify the expected maximum velocity in your domain.
- Use the Courant Number Calculator to estimate a time step that results in .
- Check your specific solver's documentation. Does it recommend for VOF? Can it handle for LES? Adjust your accordingly.
- Run a few time steps and verify the maximum Courant number reported by the solver log.
- (Future) Verify your temporal resolution against experimental data or a time-step independence study.
The Courant number is a numerical indicator of temporal resolution. Always validate your CFD decisions against experimental data, analytical solutions, or trusted benchmarks whenever possible. Consult your solver documentation to understand the specific stability requirements built into its algorithms.
Engineering Context & Constraints
Assumptions Made
- Assumes focus on convective Courant number for incompressible or weakly compressible flows.
- Assumes standard finite-volume CFD solver approaches.
Limitations
- Does not explicitly detail acoustic Courant number limits for highly compressible explicit solvers.
- Acceptable Courant limits will vary heavily by specific solver algorithm.
References & Bibliography
- NASA Glenn Research Center: CFL Condition
- H.K. Versteeg and W. Malalasekera, An Introduction to Computational Fluid Dynamics
Notice an error?
We strive for engineering accuracy. If you found a mistake, please let us know. See our correction policy.