Dear Aidyn,

Thank you for raising this issue.
I am not too familiar with the AUSM Riemann solvers so I will need to look into it a bit more carefully, but the reference you suggest seems the correct one and I agree with your corrections.

I tried quickly to test a 2D shock tube with your corrections but the solution diverges after 11 iterations, there might be other errors.

I opened an issue on the Nektar++ gitlab so that we can sort this out.


One question, does your subsonic case run with the modifications you suggested?

Cheers,

Giacomo


On Thu, Jan 10, 2019 at 4:23 PM Aidyn Aitzhan <aidyn.b.aitzhan@gmail.com> wrote:
Dear Nektar++ Developers,

I was working on CompressibleFlowSolver and noticed, that AUSM3 Riemann solver behaves unstable attempting to solve subsonic flows.
I was getting a NaN error every time I tried to use it at low Mach flows. Then I figured out that there is a bug in the code. As I understood AUSM3 is
AUSM+up solver from paper by Meng-Sing Liou, "A sequel to AUSM, Part II: AUSM+-up for all speeds," Journal of Computational Physics, Vol. 214, No. 1, 2006, pp. 137-170.
Comparing the code and section "3.3. Algorithm: AUSM+-up for all speeds" in the paper I made several corrections.

        // Parameters for specify the upwinding
        // Note: if fa = 1 then AUSM3 = AUSM2 // AUSM3 = AUSM3
        NekDouble Mco    = 0.01;
        NekDouble Mtilde = 0.5 * (ML * ML + MR * MR);
        NekDouble Mo     = sqrt(std::min(1.0, std::max(Mtilde, Mco*Mco))); //std::min(1.0, std::max(Mtilde, Mco*Mco));
        NekDouble fa       = Mo * (2.0 - Mo);
        NekDouble beta    = 0.125;
        NekDouble alpha  = 0.1875*(5.0*fa*fa - 4.0); //0.1875;
        NekDouble sigma = 1.0;
        NekDouble Kp      = 0.25;
        NekDouble Ku      = 0.75;
        NekDouble rhoA   = 0.5 * (rhoL + rhoR);
        NekDouble Mp     = -(Kp / fa) * ((pR - pL) / (rhoA * cA * cA)) *
                            std::max(1.0 - sigma * Mtilde, 0.0);
       
        NekDouble Mbar   = M4Function(0, beta, ML) +
                           M4Function(1, beta, MR) + Mp;
       
        NekDouble pu     = -2.0 * Ku * rhoA * cA * fa * (uR - uL) *  // -2.0 * Ku * rhoA * cA * cA * (MR - ML) *
                           P5Function(0, alpha, ML) * P5Function(1, alpha, MR);


An AUSM3Solver.cpp file is also attached.
If you are agree with me please update the code in repository.

Best regards,
Aidyn



_______________________________________________
Nektar-users mailing list
Nektar-users@imperial.ac.uk
https://mailman.ic.ac.uk/mailman/listinfo/nektar-users