Burgers’ Equation

Burgers’ Equation is a nonlinear hyperbolic equation. It has the same form as the advection equation, except that the quantity being advected is the velocity itself.

Inviscid Burgers

A 2D inviscid Burgers’ Equation has the following form:

$\begin{split}u_t + u u_x + v u_y = 0\\ v_t + u v_x + v v_y = 0\end{split}$

Here we have two 2D advection equations, where the x-velocity, $$u$$, and y-velocity, $$v$$, are the two quantities that we wish to advect with.

pyro.burgers is modified based on the pyro.advection with a different Riemann solver and timestep restriction.

Since velocity is no longer a constant, the timestep is now restricted to the each minimum velocity in each cell:

$\Delta t < \min \left \{ \min \left \{ \frac{\Delta x}{|u_i|} \right \}, \min \left \{ \frac{\Delta y}{|v_i|} \right \} \right \}$

The main difference of Burgers equation compared to the linear advection equation is the creation of shock and rarefactions due velocity been non-constant. This introduces a slightly different Riemann’s problem which depends on shock speed by using the Rankine-Hugoniot jump condition.

The parameters for this solver are:

option

value

description

limiter

2

limiter (0 = none, 1 = 2nd order, 2 = 4th order)

• section: [driver]

option

value

description

cfl

0.8

• section: [particles]

option

value

description

do_particles

0

particle_generator

grid

The figure above is generated using burgers/problems/test.py, which is used to test the validity of the solver. Bottom-left of the domain has a higher velocity than the top-right domain. With $$u_{i,j}=v_{i,j}$$, the wave travels diagonally to the top-right with a constant velocity that is equal to the shock speed. burgers/problem/verify.py can be used to calculate the wave speed using outputs from test.py and compare to the theoretical shock speed.

Viscous Burgers

A 2D viscous Burgers’ Equation has the following form:

$\begin{split}u_t + u u_x + v u_y = \epsilon \left( u_{xx} + u_{yy}\right) \\ v_t + u v_x + v v_y = \epsilon \left( v_{xx} + v_{yy}\right)\end{split}$

The viscous Burgers’ equation has an additional velocity diffusion term on the RHS compared to the inviscid Burgers’ equation. Here $$\epsilon$$ represents the constant viscosity.

pyro.viscous_burgers is inherited from pyro.burgers, where we added an additional diffusion term when constructing the interface states. We then solve for diffusion along with the extra advective source to the Helmholtz equation by using the Crank-Nicolson discretization and multigrid solvers.

The parameters for this solver are:

option

value

description

limiter

2

limiter (0 = none, 1 = 2nd order, 2 = 4th order)

• section: [diffusion]

option

value

description

eps

0.005

Viscosity for diffusion

• section: [driver]

option

value

description

cfl

0.8

• section: [particles]

option

value

description

do_particles

0

particle_generator

grid

The figure above is generated using viscous_burgers/problems/test.py, which has the identical setup as in burgers/problems/test.py. With diffusion added to the system, we see the shock (discontinuity) is smeared out as system evolves.