Questions about Approximate Riemann Solvers ---- Roe

Dear all,
I recently read the file of roe.mako in the installed directory ‘PyFR-1.8.5\pyfr\solvers\euler\kernels\rsolvers’, and met problems about some functions and equations.

  1. Is there any document listed the equations related to this roe solver? I only found the equations related to Rusanov solver in appendix A of the thesis of Dr. Witherden.
  2. What is the role of ‘${pyfr.expand(‘inviscid_flux’, ‘ul’, ‘fl’, ‘pl’, ‘vl’)};’ in the roe.mako ? In my opinion, it is a function of ‘inviscid_flux’ and its input variables includes conserved quantity ‘ul’, flux ‘fl’, pressure ‘pl’, and velocity ‘vl’. With the command of ‘pyfr.expand’, the function of ‘inviscid_flux’ can be embedded within a kernel.
    Any hints are available.
    Regards

Kiny

Hi Kiny,

Thanks for getting in touch. I have answered your questions below, but if you are looking to understand the Riemann solvers a little better, there is an upcoming pull request (see my pyfr fork) where we simplify things by transforming the problem to one dimension. This makes the presentation of the method easier to understand and simpler to implement.There are also some more Riemann solvers there, including exact approaches.

Thanks,
Will

Dear all,
I recently read the file of roe.mako in the installed directory ‘PyFR-1.8.5\pyfr\solvers\euler\kernels\rsolvers’, and met problems about some functions and equations.

  1. Is there any document listed the equations related to this roe solver? I only found the equations related to Rusanov solver in appendix A of the thesis of Dr. Witherden.

So the Roe scheme is a fairly widely used method and there plenty of adaptations and modifications to the original method. The original paper by Roe can be found here Redirecting, but the form that people often refer to as the Roe method is that of Roe and Pike (1985) ‘Efficient Construction and Utilisation of Approximate Riemann Solutions’, but that paper can be a little hard to find. This over came some of the deficiencies of the original method. Very broadly the method attempts to form a constant Jacobian matrix for both the left and right state by using what is now commonly refereed to as a Roe average. A good source of further information on the topic of Riemann solvers and approximate Riemann solvers in the context of fluid dynamics is the book by Toro Riemann Solvers and Numerical Methods for Fluid Dynamics: A Practical Introduction | SpringerLink.

  1. What is the role of ‘${pyfr.expand(‘inviscid_flux’, ‘ul’, ‘fl’, ‘pl’, ‘vl’)};’ in the roe.mako ? In my opinion, it is a function of ‘inviscid_flux’ and its input variables includes conserved quantity ‘ul’, flux ‘fl’, pressure ‘pl’, and velocity ‘vl’. With the command of ‘pyfr.expand’, the function of ‘inviscid_flux’ can be embedded within a kernel.

Yes as the name implies this calculates the inviscid flux for a and given set of conservative variables. Also for convenience and to save on compute it does also return the velocities and pressure, as these are commonly used in the calculation of the approximate ‘Riemann’ flux. Yes ‘expand’ embeds the function that you pass it into the kernel, and it can be thought of as being somewhat similar to calling a subroutine in Fortran.

Hi Will,
Thanks for your kindly reply. I found the FORTRAN code open-sourced in https://doi.org/10.1007/b79761 and I finally understand the command of ‘pyfr.expand’.
Regards
Kiny