Courant Condition
Why FDTD Time Steps Have a Hard Ceiling
The condition was introduced in 1928 by Richard Courant, Kurt Friedrichs, and Hans Lewy for finite-difference solutions of partial differential equations, long before it became the central constraint of time-domain electromagnetic solvers. In an explicit scheme the field at the next instant is computed only from values already known at the current and previous instants. For that to remain physical, the numerical domain of dependence must contain the true physical domain of dependence, which is the cone defined by the wave speed. Stated plainly, a disturbance must not be able to propagate across more than one grid cell during a single time step. Violating that requirement breaks causality in the discrete update and the algorithm has no way to capture energy that has physically moved beyond the cells it is reading from.
In FDTD the electric and magnetic fields are interleaved in space and time on the staggered Yee grid and advanced by a leapfrog scheme. A von Neumann stability analysis of that update produces an amplification factor whose magnitude stays at unity only while the Courant number S = cΔt√(1/Δx² + 1/Δy² + 1/Δz²) remains at or below one. Above that threshold the amplification factor exceeds one for the highest spatial frequencies the grid can represent, so round-off noise at the Nyquist limit is multiplied every step and the solution blows up. There is no soft margin: the transition from stable to divergent is abrupt, which is why solvers compute the limit exactly and then apply a fractional safety factor.
Because the bound is set by the smallest cell anywhere in the model, mesh design and time-step cost are inseparable. A conformal or non-uniform mesh that adds a few tiny cells to resolve a feed gap, a thin dielectric, or a sharp metal edge forces every cell in the entire domain to march at the smaller step. This is the practical reason millimeter-wave structures with fine internal geometry are expensive to simulate, and it motivates subgridding, local time stepping, and unconditionally stable implicit formulations.
Dimensional Scaling and the Magic Time Step
The square-root-of-dimension factor tightens the limit as the problem gains spatial dimensions: 1D allows Δx/c, 2D allows Δx/(c√2), and 3D allows Δx/(c√3). A useful special case appears in 1D, where running exactly at the Courant limit cancels numerical dispersion entirely, giving an exact result known as the magic time step. That cancellation does not survive in two or three dimensions, so 3D solvers must still trade cell density against phase accuracy independently of stability.
Stability Limit by Dimension and Scheme
Δt ≤ 1 / (c × √(1/Δx² + 1/Δy² + 1/Δz²))
Uniform cubic cell (3D FDTD):
Δtmax = Δx / (c√3) ≈ 0.577 × Δx / c
Courant number (must satisfy):
S = cΔt√(1/Δx² + 1/Δy² + 1/Δz²) ≤ 1
Where c = wave speed in the medium, Δx = cell size, d = dimensionality. Practical solvers use a safety factor 0.5 ≤ S ≤ 0.99. Example: Δx = 1 mm cubic, c = 3 × 108 m/s → Δtmax ≈ 1.93 ps.
Time-Step Limits Across Schemes
| Scheme / Dimension | Courant limit | Δt at 1 mm cell | Stability | Typical use |
|---|---|---|---|---|
| 1D FDTD | Δx / c | 3.33 ps | Conditional (magic step exact) | Transmission-line models |
| 2D FDTD | Δx / (c√2) | 2.36 ps | Conditional | Planar / waveguide cross-section |
| 3D FDTD | Δx / (c√3) | 1.93 ps | Conditional | Full-wave 3D structures |
| Non-uniform mesh | Δxmin / (c√3) | Set by smallest cell | Conditional (worst cell) | Conformal millimeter-wave geometry |
| ADI-FDTD (implicit) | No CFL bound | Any Δt (accuracy-limited) | Unconditional | Fine features, large Δt |
Frequently Asked Questions
How do you calculate the maximum FDTD time step from the Courant condition?
For a uniform 3D Yee grid the maximum stable step is Δtmax = 1 / (c√(1/Δx² + 1/Δy² + 1/Δz²)). With a cubic cell this reduces to Δtmax = Δx / (c√3) ≈ 0.577Δx / c, so a 1 mm cell gives about 1.93 ps. Solvers apply a Courant safety factor S between 0.5 and 0.99 and run at Δt = S × Δtmax. A lower S adds margin against round-off and dispersion; S near 0.99 minimizes the iteration count to steady state.
What happens when the Courant condition is violated in an FDTD simulation?
The explicit leapfrog update goes unstable: field amplitudes grow exponentially each step and typically diverge to non-physical values or NaN within a few hundred iterations. It shows up as high-spatial-frequency checkerboard noise that doubles roughly every step once the Courant number passes 1/√d. There is no graceful degradation, so the only fixes are reducing Δt below the limit or switching to an unconditionally stable implicit scheme such as ADI-FDTD.
Does a finer mesh make the Courant time step smaller?
Yes. The stable step scales linearly with the smallest cell dimension, so halving the cell size halves Δt and doubles the iteration count for the same run time. On a non-uniform or conformal mesh the global step is set by the smallest cell anywhere in the domain, which is why a single fine feature like a thin substrate layer or a narrow gap can dominate runtime. Subgridding and local time-stepping relax this by letting fine regions step faster than the coarse grid.
How is the Courant stability limit different from numerical dispersion error?
The Courant condition governs stability, whether the solution stays bounded; numerical dispersion governs accuracy, how closely the simulated phase velocity matches the true one. A run can be perfectly stable yet still inaccurate if cells are coarse relative to the wavelength. The practical workflow is to size cells for dispersion (about 10 to 20 cells per wavelength) and then set Δt for stability via the Courant limit. Running exactly at the limit in 1D cancels dispersion (the magic step), but that does not hold in 2D or 3D.