I'm trying to implement finite-difference WENO method to progressively complex equations and systems. At the moment I'm successful with singular scalar equations (constant advection and Burgers), and trying to advance to 1D system of Euler equations.

I've read that there are two approaches to apply WENO to systems of conservation laws:

1) Component-wise (by applying it to primitive values (rho, rho*u, e)). They say that this method is OK for simple test cases.

2) Characteristic-wise (by proper decomposition via eigen vectors of flux Jacobian etc). This method is said to be necessary for more complex flows.

Before trying complex characteristic decomposition, I try to implement simpler component-wise method. So far it work acceptably well on test case with contact discontinuities (i.e. only density varies while pressure and speed are constant) - it advects them with some smearing. But when I introduce even a weak shock, it generates growing instabilities near its front and computing collapses after some time.

Is it normal behavior of the method, or should it be able to compute shocks as well (maybe with some oscillations or much smearing etc)? Maybe the problem is that I use non-splitting flux function of Lax-Friedrich? Here is this flux function: $$ h(a,b) = \frac{1}{2} \left( f(a) + f (b) - \alpha (b-a) \right) $$ where $\alpha = \text{max}|\lambda|$ is maximum eigenvalue.

  • $\begingroup$ Correction on the flux function: Seems that it is splitting one as it is equal to $f^+(a) + f^-(b)$ for $f^{\pm} (u) = f(u) \pm \alpha u$. $\endgroup$
    – omican
    Commented Aug 19, 2017 at 8:10

1 Answer 1


Although the FD formulation has been used for nonlinear conservation laws [1], in principle, FV formulation is the way to go in case of flows with discontinuities.

That been said, growing instability can be a result of:

  • Incorrect time-step size. Try reducing the Courant number and check if instability still persists.
  • Incorrect upwinding. The characteristic fields in case of a supersonic region always advect in the same direction (i.e. eigenvalues $u$, $u+a$ and $u-a$ have the same sign since $u > a$). However, the characteristic fields for a subsonic flow have to be correctly advected. It is recommended to go for characteristic decoupling for nonlinear equations (especially with discontinuities in the solution) [2].

The checks you can perform:

  1. Turn off the WENO mechanism and perform a simple first-order reconstruction keeping everything else the same. If you still get the oscillations, then you need to revisit the flux function you are employing. Try Roe or splitting solvers. You have plenty of choices of Riemann solvers if you implement FV formulation.

  2. Try reducing time-step size by reducing the Courant number. Try with the Courant number $< 0.3$ for a system of equations with order of accuracy greater than $3$.

  3. Try implementing Finite Volume form of the WENO method. The reconstruction polynomials for the FV formulation are derived based on the cell averaged values unlike the cell-center values in FD [2].

If none of this works, you may have to perform the characteristic decoupling. Refer this answer on stack exchange for more discussion and details. Note that, in case of the FV formulation, you have to linearize the conservative variables vector for computing the Jacobian at a face (based on the left and the right cell average values). After that, find out the eigenvector matrix for decoupling the cons. vects. in rest of the stencil.

Answering your questions:

I could not find a reference where FD formulation with component-wise reconstruction has been used for shock computing. Thus, I don't precisely know answer the answer to the first question.

Lax Friedrich flux function is more dissipative than Roe for example. So it is unlikely that you are getting oscillations because of this. However, this can be easily ruled out by implementing some other method.

All the best!


[1] Jiang, G.-S., & Wu, C. (1999). A High-Order WENO Finite Difference Scheme for the Equations of Ideal Magnetohydrodynamics. Journal of Computational Physics, 150(2), 561–594.

[2] Shu, C. W. (1997). Essentially Non-Oscillatory and Weighted Essentially Non-Oscillatory Schemes for Hyperbolic Conservation Laws. ICASE Report, (97 - 65)

  • $\begingroup$ Thanks for such an elaborate answer! Using your ideas for testing, I stumbled upon one big and stupid error in my code: I have been reconstructing (rho, rho*u, e) and then using them as (rho, u, p) in later formulas. Such error is almost invisible in a test case with contact discontinuities only :-) After fixing this, I can say that the answer for my main question is: Yes! Component-wise FD WENO is viable with shocks. Lax-Friedrich flux function works well, but smears contact discontinuities up to ~30 point wide. $\endgroup$
    – omican
    Commented Aug 18, 2017 at 17:03
  • $\begingroup$ Some more moments: 1) LF flux function with $\alpha=\text{max}|\lambda|$ taken over all the computational area smears discontinuities much more than local version of it. 2) I was reconstructing primitive values $(\rho, u, p)$ and then calculating "reconstructed" flux from them via explicit formulas. I haven't tested component-wise method with reconstruction of fluxes themselves (as it actually should be done, I think). $\endgroup$
    – omican
    Commented Aug 24, 2017 at 7:48

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.