Numerical dispersion

Numerical Dispersion is part of a free web series, GWB Online Academy, by Aqueous Solutions LLC.

What you need:

Download this unit to use in your courses:

Click on a file or right-click and select “Save link as…” to download.


Von Neumann's criterion tells us the maximum time step our numerical solver can take to yield a stable solution to a pure diffusive transport problem

Von Neumann's analysis

The Courant condition

Courant condition

accounts for advective transport. It states that fluid cannot travel farther than the length of a nodal block within a single time step. Taken together, the stability criterion in one dimension is show below

combined stability criterion

The Grid Courant number

Grid Courant number

is the number of nodal blocks traversed by the fluid over the course of a time step.

This number is reported on the Results pane

Results pane

Numerical dispersion is a special class of truncation error that appears when solving the diffusion-advection equation by finite differences. The phenomenon adds an artificial dispersion to the solution

Coefficient of Numerical Dispersion

so that in effect we are solving

ADE with Numerical Dispersion

Where numerical dispersion is small relative to physical dispersion, this may not be a huge deal. On the other hand, if numerical dispersion is very large, then we are introducing error, which is undesirable.

Task 1: Effect of numerical dispersion

Open "Pulse.x1t", the example we looked at in our Mass Transport lesson, and on the Medium pane, set αL to “0”

to eliminate physical dispersion from the model. On Config → Output… set a suffix "_num400"

and select Run → Go.

Now, redo the calculation using fewer nodal blocks. On the Domain pane set Nx to 100

and specify a new suffix "_num100". Run the model, then repeat using 40 nodal blocks: Nx = 40 and suffix "_num40".

How do the simulation results vary, depending on your choice of nodal block spacing?

Here are the results from the three different calculations. The bottom plot shows results of the first simulation, in which the domain is discretized into Nx = 400 nodal blocks. In the absence of hydrodynamic dispersion, the pulse migrates as a square wave across the domain

By decreasing the resolution of the domain (decreasing Nx to 100 or 40 nodal blocks), we introduce numerical dispersion into the calculation. As you can see, numerical dispersion is a serious problem when the coarsest grid is used.

How might we minimize numerical dispersion? Remember, we can quantify a coefficient of numerical dispersion as shown below:

Three strategies come to mind:

  • Decrease DL to accommodate Dnum
  • Set time step so that Co ≈ 1
  • Refine gridding to decrease Δx

The program automatically chooses time steps that will results in a Courant number as close to 1 as possible, subject to stability criterion, like those mentioned above. Refining the gridding will produce a more accurate solution, but this accuracy comes at the expense of computing time.

A good strategy is to start working with a simple model, then add complexity as it is needed. After running a model with a course grid, cut the length of nodal blocks in half and see whether the solution changes. Once you reach the point where you can't observe any change between subsequent runs, you've likely minimized numerical dispersion as much as you can.


Craig M. Bethke and Brian Farrell. © Copyright 2016–2024 Aqueous Solutions LLC. This lesson may be reproduced and modified freely to support any licensed use of The Geochemist's Workbench® software, provided that any derived materials acknowledge original authorship.


Bethke, C.M., 2022, Geochemical and Biogeochemical Reaction Modeling, 3rd ed. Cambridge University Press, New York, 520 pp.

Bethke, C.M., B. Farrell, and M. Sharifi, 2024, The Geochemist's Workbench®, Release 17: GWB Reactive Transport Modeling Guide. Aqueous Solutions LLC, Champaign, IL, 191 pp.

Comfortable with numerical dispersion?

Move on to the next topic, Dual Porosity, or return to the GWB Online Academy home.