Finite Difference Computing with PDEs pp 323-351 | Cite as

# Advection-Dominated Equations

- 20k Downloads

## Abstract

Wave (Chap. 2) and diffusion (Chap. 3) equations are solved reliably by finite difference methods. As soon as we add a first-order derivative in space, representing advective transport (also known as convective transport), the numerics gets more complicated and intuitively attractive methods no longer work well. We shall show how and why such methods fail and provide remedies. The present chapter builds on basic knowledge about finite difference methods for diffusion and wave equations, including the analysis by Fourier components, truncation error analysis (Appendix B), and compact difference notation.

Wave (Chap. 2) and diffusion (Chap. 3) equations are solved reliably by finite difference methods. As soon as we add a first-order derivative in space, representing advective transport (also known as convective transport), the numerics gets more complicated and intuitively attractive methods no longer work well. We shall show how and why such methods fail and provide remedies. The present chapter builds on basic knowledge about finite difference methods for diffusion and wave equations, including the analysis by Fourier components, truncation error analysis (Appendix B), and compact difference notation.

### Remark on terminology

It is common to refer to movement of a fluid as convection, while advection is the transport of some material dissolved or suspended in the fluid. We shall mostly choose the word advection here, but both terms are in heavy use, and for mass transport of a substance the PDE has an advection term, while the similar term for the heat equation is a convection term.

Much more comprehensive discussion of dispersion analysis for advection problems can be found in the book by Duran [3]. This is a an excellent resource for further studies on the topic of advection PDEs, with emphasis on generalizations to real geophysical problems. The book by Fletcher [4] also has a good overview of methods for advection and convection problems.

## 4.1 One-Dimensional Time-Dependent Advection Equations

*v*is a given parameter, typically reflecting the transport velocity of a quantity

*u*with a flow. There is only one boundary condition (4.3) since the spatial derivative is only first order in the PDE (4.1). The information at

*x*= 0 and the initial condition get transported in the positive

*x*direction if

*v*> 0 through the domain.

Finally, we add that a discussion of appropriate boundary conditions for the advection PDE in multiple dimensions is a challenging topic beyond the scope of this text.

### 4.1.1 Simplest Scheme: Forward in Time, Centered in Space

### Method

*C*as the Courant number

### Implementation

A solver function for our scheme goes as follows.

### Test cases

*u*has the shape of

*I*and is transported at velocity

*v*to the right (if

*v*> 0). Let us consider two different initial conditions, one smooth (Gaussian pulse) and one non-smooth (half-truncated cosine pulse):

*A*is the maximum value of the initial condition.

*u*is scaled by the maximum value of the initial condition: \(\bar{u}=u/\max|I(x)|\) such that \(|\bar{u}(\bar{x},0)|\in[0,1]\). The scaled problem is solved by setting

*v*= 1,

*L*= 1, and

*A*= 1. From now on we drop the bars.

To run our test cases and plot the solution, we make the function

### Bug?

Running either of the test cases, the plot becomes a mess, and the printout of *u* values in the plot function reveals that *u* grows very quickly. We may reduce \(\Delta t\) and make it very small, yet the solution just grows. Such behavior points to a bug in the code. However, choosing a coarse mesh and performing one time step by hand calculations produces the same numbers as the code, so the implementation seems to be correct. The hypothesis is therefore that the solution is unstable.

### 4.1.2 Analysis of the Scheme

*B*. (Since the PDE to be investigated by this method is homogeneous and linear,

*B*will always cancel out, so we tend to skip this amplitude, but keep it here in the beginning for completeness.)

*A*) to learn about the quality of the scheme. Hence, to analyze the difference scheme we have just implemented, we look at how it treats the Fourier component

The numerical solution features the formula *A* ^{ n }. To find out whether *A* ^{ n } means growth in time, we rewrite *A* in polar form: \(A=A_{r}e^{i\phi}\), for real numbers *A* _{ r } and ϕ, since we then have \(A^{n}=A_{r}^{n}e^{i\phi n}\). The magnitude of *A* ^{ n } is \(A_{r}^{n}\). In our case, \(A_{r}=(1+C^{2}\sin^{2}(kx))^{1/2}> 1\), so \(A_{r}^{n}\) will increase in time, whereas the exact solution will not. Regardless of \(\Delta t\), we get unstable numerical solutions.

### 4.1.3 Leapfrog in Time, Centered Differences in Space

### Method

*u*

^{1}, but we leave that problem for now. Anyway, this special scheme can be found in advec1D.py .

### Implementation

We now need to work with three time levels and must modify our solver a bit:

### Running a test case

*T*= 1, and

*C*= 1 gives the plot in Fig. 4.1, which is in fact identical to the exact solution (!).

### Running more test cases

*C*= 0.8: one very smooth with a Gaussian function (Fig. 4.2) and one with a discontinuity in the first derivative (Fig. 4.3). Unless we have a very fine mesh, as in the left plots in the figures, we get small ripples behind the main wave, and this main wave has the amplitude reduced.

Advection of the Gaussian function with a leapfrog scheme, using *C* = 0.8 and \(\Delta t=0.01\) can be seen in a movie file ^{1}. Alternatively, with \(\Delta t=0.001\), we get this movie file ^{2}.

Advection of the cosine hat function with a leapfrog scheme, using *C* = 0.8 and \(\Delta t=0.01\) can be seen in a movie file ^{3}. Alternatively, with \(\Delta t=0.001\), we get this movie file ^{4}.

### Analysis

*C*> 1, the square root can become complex valued, so stability is obtained only as long as

*C*≤ 1.

### Stability

*C*≤ 1:

### 4.1.4 Upwind Differences in Space

*x*direction, when

*v*> 0, it could be natural to go (what is called) upstream and not downstream in the spatial derivative to collect information about the change of the function. That is, we approximate

*C*≤ 1. As with the Leapfrog scheme, it becomes exact if

*C*= 1, exactly as shown in Fig. 4.1. This is easy to see since

*C*= 1 gives the property (4.6). However, any

*C*< 1 gives a significant reduction in the amplitude of the solution, which is a purely numerical effect, see Fig. 4.4 and 4.5. Experiments show, however, that reducing \(\Delta t\) or \(\Delta x\), while keeping

*C*reduces the error.

Advection of the Gaussian function with a forward in time, upwind in space scheme, using *C* = 0.8 and \(\Delta t=0.01\) can be seen in a movie file ^{5}. Alternatively, with \(\Delta t=0.005\), we get this movie file ^{6}.

Advection of the cosine hat function with a forward in time, upwind in space scheme, using *C* = 0.8 and \(\Delta t=0.01\) can be seen in a movie file ^{7}. Alternatively, with \(\Delta t=0.001\), we get this movie file ^{8}.

*C*< 1 there is, unfortunately, non-physical damping of discrete Fourier components, giving rise to reduced amplitude of \(u^{n}_{i}\) as in Fig. 4.4 and 4.5. The damping seen in these figures is quite severe. Stability requires

*C*≤ 1.

### Interpretation of upwind difference as artificial diffusion

### 4.1.5 Periodic Boundary Conditions

So far, we have given the value on the left boundary, \(u_{0}^{n}\), and used the scheme to propagate the solution signal through the domain. Often, we want to follow such signals for long time series, and periodic boundary conditions are then relevant since they enable a signal that leaves the right boundary to immediately enter the left boundary and propagate through the domain again.

In some schemes we may need \(u^{n}_{N_{x}+1}\) and \(u^{n}_{-1}\). Periodicity then means that these values are equal to \(u^{n}_{1}\) and \(u^{n}_{N_{x}-1}\), respectively. For the upwind scheme, it is sufficient to set u_1[0]=u_1[Nx] at a new time level before computing u[1]. This ensures that u[1] becomes right and at the next time level u[0] at the current time level is correctly updated. For the Leapfrog scheme we must update u[0] and u[Nx] using the scheme:

### 4.1.6 Implementation

### Test condition

*C*≠ 1 will deviate from the constant, expected value, so the integral is a measure of the error in the scheme. The integral can be computed by the Trapezoidal integration rule

if u is an array holding the solution.

### The code

An appropriate solver function for multiple schemes may go as shown below.

### Solving a specific problem

We need to call up the solver function in some kind of administering problem solving function that can solve specific problems and make appropriate visualization. The function below makes both static plots, screen animation, and hard copy videos in various formats.

The complete code is found in the file advec1D.py .

### 4.1.7 A Crank-Nicolson Discretization in Time and Centered Differences in Space

*u*= 0 and simulate just to the point of time when the signal hits the boundary (and gets reflected).

### Movie 1

Crank-Nicolson in time, centered in space, *C* = 0.8, \(\Delta t=0.005\). https://raw.githubusercontent.com/hplgit/fdm-book/master/doc/pub/book/html/mov-advec/gaussian/CN/C08_dt0005/movie.ogg

### Movie 2

Backward-Euler in time, centered in space, *C* = 0.8, \(\Delta t=0.005\). https://raw.githubusercontent.com/hplgit/fdm-book/master/doc/pub/book/html/mov-advec/cosinehat/BE/C_08_dt005.ogg

*C*= 0.8 and the Crank-Nicolson with severe oscillations behind the main wave. These oscillations are damped as the mesh is refined. Switching to the Backward Euler scheme removes the oscillations, but the amplitude is significantly reduced. One could expect that the discontinuous derivative in the initial condition of the half a cosine wave would make even stronger demands on producing a smooth profile, but Fig. 4.7 shows that also here, Backward-Euler is capable of producing a smooth profile. All in all, there are no major differences between the Gaussian initial condition and the half a cosine condition for any of the schemes.

### 4.1.8 The Lax-Wendroff Method

- 1.
Express the new unknown \(u^{n+1}_{i}\) in terms of known quantities at \(t=t_{n}\) by means of a Taylor polynomial of second degree.

- 2.
Replace time-derivatives at \(t=t_{n}\) by spatial derivatives, using the PDE.

- 3.
Discretize the spatial derivatives by second-order differences so we achieve a scheme of accuracy \(\mathcal{O}(\Delta t^{2})+\mathcal{O}(\Delta x^{2})\).

### Lax-Wendroff works because of artificial viscosity

From the formulas above, we notice that the Lax-Wendroff method is nothing but a Forward Euler, central difference in space scheme, which we have shown to be useless because of chronic instability, plus an artificial diffusion term of strength \(\frac{1}{2}\Delta tv^{2}\). It means that we can take an unstable scheme and add some diffusion to stabilize it. This is a common trick to deal with advection problems. Sometimes, the real physical diffusion is not sufficiently large to make schemes stable, so then we also add artificial diffusion.

*C*= 1!

### 4.1.9 Analysis of Dispersion Relations

We have developed expressions for \(A(C,p)\) in the exact solution \(u_{q}^{n}=A^{n}e^{ikq\Delta x}\) of the discrete equations. Note that the Fourier component that solves the original PDE problem has no damping and moves with constant velocity *v*. There are two basic errors in the numerical Fourier component: there may be damping and the wave velocity may depend on *C* and \(p=k\Delta x\).

The shortest wavelength that can be represented is \(\lambda=2\Delta x\). The corresponding *k* is \(k=2\pi/\lambda=\pi/\Delta x\), so \(p=k\Delta x\in(0,\pi]\).

*A*as a function of

*C*and

*p*, how can we visualize it? The two key ingredients in

*A*is the magnitude, reflecting damping or growth of the wave, and the angle, closely related to the velocity of the wave. The Fourier component

*D*and wave velocity

*c*. Let us express our

*A*in polar form, \(A=A_{r}e^{-i\phi}\), and insert this expression in our discrete component \(u_{q}^{n}=A^{n}e^{ikq\Delta x}=A^{n}e^{ikx}\):

*c*∕

*v*:

*C*. The horizontal axis shows the dimensionless frequency

*p*of the wave, while the figures to the left illustrate the error in wave velocity

*c*∕

*v*(should ideally be 1 for all

*p*), and the figures to the right display the absolute value (magnitude) of the damping factor

*A*

_{ r }. The curves are labeled according to the table below.

Label | Method |
---|---|

FE | Forward Euler in time, centered difference in space |

LF | Leapfrog in time, centered difference in space |

UP | Forward Euler in time, upwind difference in space |

CN | Crank-Nicolson in time, centered difference in space |

LW | Lax-Wendroff’s method |

BE | Backward Euler in time, centered difference in space |

The total damping after some time \(T=n\Delta t\) is reflected by \(A_{r}(C,p)^{n}\). Since normally \(A_{r}<1\), the damping goes like \(A_{r}^{1/\Delta t}\) and approaches zero as \(\Delta t\rightarrow 0\). The only way to reduce damping is to increase *C* and/or the mesh resolution.

We can learn a lot from the dispersion relation plots. For example, looking at the plots for *C* = 1, the schemes LW, UP, and LF has no amplitude reduction, but LF has wrong phase velocity for the shortest wave in the mesh. This wave does not (normally) have enough amplitude to be seen, so for all practical purposes, there is no damping or wrong velocity of the individual waves, so the total shape of the wave is also correct. For the CN scheme, see Fig. 4.6, each individual wave has its amplitude, but they move with different velocities, so after a while, we see some of these waves lagging behind. For the BE scheme, see Fig. 4.7, all the shorter waves are so heavily dampened that we cannot see them after a while. We see only the longest waves, which have slightly wrong velocity, but visible amplitudes are sufficiently equal to produce what looks like a smooth profile.

Another feature was that the Leapfrog method produced oscillations, while the upwind scheme did not. Since the Leapfrog method does not dampen the shorter waves, which have wrong wave velocities of order 10 percent, we can see these waves as noise. The upwind scheme, however, dampens these waves. The same effect is also present in the Lax-Wendroff scheme, but the damping of the intermediate waves is hardly present, so there is visible noise in the total signal.

We realize that, compared to pure truncation error analysis, dispersion analysis sheds more light on the behavior of the computational schemes. Truncation analysis just says that Lax-Wendroff is better than upwind, because of the increased order in time, but most people would say upwind is the better one when looking at the plots.

## 4.2 One-Dimensional Stationary Advection-Diffusion Equation

*v*and α to be constant, but the extension to the variable-coefficient case is trivial. This equation can be viewed as the stationary limit of the corresponding time-dependent problem

Equations of the form (4.11) or (4.12) arise from transport phenomena, either mass or heat transport. One can also view the equations as a simple model problem for the Navier-Stokes equations. With the chosen boundary conditions, the differential equation problem models the phenomenon of a boundary layer, where the solution changes rapidly very close to the boundary. This is a characteristic of many fluid flow problems, which makes strong demands to numerical methods. The fundamental numerical difficulty is related to non-physical oscillations of the solution (instability) if the first-derivative spatial term dominates over the second-derivative term.

### 4.2.1 A Simple Model Problem

*x*by \(\bar{x}=x/L\), and

*u*by

There are two competing effects in this equation: the advection term transports signals to the right, while the diffusion term transports signals to the left and the right. The value \(u(0)=0\) is transported through the domain if ϵ is small, and *u* ≈ 0 except in the vicinity of *x* = 1, where \(u(1)=1\) and the diffusion transports some information about \(u(1)=1\) to the left. For large ϵ, diffusion dominates and the *u* takes on the ‘‘average’’ value, i.e., *u* gets a linear variation from 0 to 1 throughout the domain.

### 4.2.2 A Centered Finite Difference Scheme

*x*direction and a value of ϵ = 0.1. Decreasing ϵ to 0.01 leads to oscillatory solutions as depicted in Fig. 4.15. This is, unfortunately, a typical phenomenon in this type of problem: non-physical oscillations arise for small ϵ unless the resolution

*N*

_{ x }is big enough. Exercise 4.1 develops a precise criterion:

*u*is oscillation-free if

### Solver

A suitable solver for doing the experiments is presented below.

### 4.2.3 Remedy: Upwind Finite Difference Scheme

*v*> 0. For

*v*< 0 we set

*v*> 0 (and ϵ > 0).

We see that the upwind scheme is always stable, but it gives a thicker boundary layer when the centered scheme is also stable. Why the upwind scheme is always stable is easy to understand as soon as we undertake the mathematical analysis in Exercise 4.1. Moreover, the thicker layer (seemingly larger diffusion) can be understood by doing Exercise 4.2.

### Exact solution for this model problem

It turns out that one can introduce a linear combination of the centered and upwind differences for the first-derivative term in this model problem. One can then adjust the weight in the linear combination so that the numerical solution becomes identical to the analytical solution of the differential equation problem at any mesh point.

## 4.3 Time-dependent Convection-Diffusion Equations

### Analytical insight

*v*> 0 to the right (

*v*< 0 to the left) due to convection, but at the same time we have a damping \(e^{-16a^{2}t^{2}}\) from diffusion.

### 4.3.1 Forward in Time, Centered in Space Scheme

Another problem is non-physical oscillations, but not growing amplitudes, due to centered differences in the advection term. There will hence be two types of instabilities to consider. Our analysis showed that pure advection with centered differences in space needs some artificial diffusion to become stable (and then it produces upwind differences for the advection term). Adding more physical diffusion should further help the numerics to stabilize the non-physical oscillations.

The scheme is quickly implemented, but suffers from the need for small space and time steps, according to this reasoning. A better approach is to get rid of the non-physical oscillations in space by simply applying an upwind difference on the advection term.

### 4.3.2 Forward in Time, Upwind in Space Scheme

*v*> 0. Use \(vD^{+}u\) if

*v*< 0. In this case the physical diffusion and the extra numerical diffusion \(v\Delta x/2\) will stabilize the solution, but give an overall too large reduction in amplitude compared with the exact solution.

## 4.4 Applications of Advection Equations

There are two major areas where advection and convection applications arise: transport of a substance and heat transport in a fluid. To derive the models, we may look at the similar derivations of diffusion models in Sect. 3.8, but change the assumption from a solid to fluid medium. This gives rise to the extra advection or convection term \(\boldsymbol{v}\cdot\nabla u\). We briefly show how this is done.

### 4.4.1 Transport of a Substance

*such that the effective flux now consists of two and not only one component as in ( 3.121):*

**v**### 4.4.2 Transport of Heat in Fluids

*being the velocity of the fluid. The convective term \(\boldsymbol{v}\cdot\nabla e\) must therefore be added to the governing equation, resulting typically in*

**v***f*is some external heating inside the medium.

## 4.5 Exercises

### Exercise 4.1 (Analyze 1D stationary convection-diffusion problem)

Explain the observations in the numerical experiments from Sect. 4.2.2 and 4.2.3 by finding exact numerical solutions.

### Hint

The difference equations allow solutions on the form *A* ^{ i }, where *A* is an unknown constant and *i* is a mesh point counter. There are two solutions for *A*, so the general solution is a linear combination of the two, where the constants in the linear combination are determined from the boundary conditions.

Filename: twopt_BVP_analysis1.

### Exercise 4.2 (Interpret upwind difference as artificial diffusion)

Consider an upwind, one-sided difference approximation to a term *du* ∕ *dx* in a differential equation. Show that this formula can be expressed as a centered difference plus an artificial diffusion term of strength proportional to \(\Delta x\). This means that introducing an upwind difference also means introducing extra diffusion of order \(\mathcal{O}(\Delta x)\).

Filename: twopt_BVP_analysis2.

## Footnotes

## Copyright information

Open Access This chapter is licensed under the terms of the Creative Commons Attribution 4.0 International License (http://creativecommons.org/licenses/by/4.0/), which permits use, sharing, adaptation, distribution and reproduction in any medium or format, as long as you give appropriate credit to the original author(s) and the source, provide a link to the Creative Commons license and indicate if changes were made. The images or other third party material in this chapter are included in the chapter’s Creative Commons license, unless indicated otherwise in a credit line to the material. If material is not included in the chapter’s Creative Commons license and your intended use is not permitted by statutory regulation or exceeds the permitted use, you will need to obtain permission directly from the copyright holder.