Homework due Monday 4/26

Please come see me or send me e-mail if you're having any problems mathematically, computationally, or otherwise.



Solving the advection equation with upwinding

Consider the equation on [0,2*pi]

u_t + u_x = 0

Write a code based on upwinding:

u_{i,j+1} = u_{i,j} - dt/dx (u_{i,j}-u_{i-1,j})

and a code based on downwinding:

u_{i,j+1} = u_{i,j} - dt/dx (u_{i+1,j}-u_{i,j})

You know that the upwinding code is stable if dt/dx <= 1. And that the downwinding code is unstable no matter what.

Choose smooth initial data and check that your upwinding code is O(dt) in time and O(dx) in space. (Remember that you know the exact solution for this problem.)

Choose step-function initial data and find the order of convergence in time and space. (Is it still O(dt) and O(dx)? If not, why not? And what is it?)

For the upwinding code, demonstrate that if you violate the CFL condition the computation becomes unstable.

Demonstrate that the downwinding code is unstable by checking compuations that were stable for the upwinding code. Demonstrate this in two ways. First of all, plot solutions and show that they're oscillating and looking bad. Secondly, modify your code so that it also gives the power spectrum of your solution and show what's happening to your power spectrum as time passes.

Demonstrate that the upwinding code preserves the monotonicity of the solution.


Solving the advection equation with Lax-Wendroff

Consider the equation on [0,2*pi]

u_t + u_x = 0

Write a code based on the Lax-Wendroff method:

u_{i,j+1} = u_{i,j} - dt/(2*dx) (u_{i+1,j}-u_{i-1,j}) + dt^2/(2*dx^2) (u_{i+1,j}-2 u_{i,j} + u_{i-1,j})

Choose smooth initial data and check that your Lax-Wendroff code is O(dt^2) in time and O(dx^2) in space. (Remember that you know the exact solution for this problem.)

Choose step-function initial data and find the order of convergence in time and space. (Is it still O(dt^2) and O(dx^2)? If not, why not? And what is it?)

Demonstrate that if you violate the CFL condition the computation becomes unstable. Demonstrate this in two ways. First of all, plot solutions and show that they're oscillating and looking bad. Secondly, modify your code so that it also gives the power spectrum of your solution and show what's happening to your power spectrum as time passes.

Demonstrate that the Lax-Wendroff code breaks the monotonicity of the solution.


The modified equation, part 1

Find the modified equation for the method

u_{i,j+1} = u_{i,j} - c dt/(2*dx) (u_{i+1,j} - u_{i-1,j})

What does the modified equation tell you about this method?


The modified equation, part 2

In class, I presented the modified equation for upwinding. Specifically, if u is the solution from the method

u_{i,j+1} = u_{i,j} - dt/dx (u_{i,j}-u_{i-1,j})

then u is a good approximation of the solution v to the PDE

v_t + c v_x = c dx/2 (1 - dt/dx c) v_xx

Write a code that find a numerical approximation of the modified equation. (Take one of the heat equation codes and add an advective term.)
Now choose dt and dx and find the approximate solution to u_t + c u_x = 0 using your upwinding code. Use your values of dt and dx to find the diffusion for the modified equation and compute the solution to the modified eqation using the code you just wrote.
Fix a time and plot the exact solution to u_t + c u_x = 0, the approximate solution u, and the approximate solution v. What do you see?