AUSM3 Riemann solver
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
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
Dear Giacomo, Sorry for long delay. With my modifications no one of my subsonic and supersonic cases work 100% fine. I have performed some tests on AUSM3 and realized that it requires smaller CFL (compare to LF and HLLC) values to maintain stability. But the real problem is that the error rises up from the (viscous)wall boundary for both subsonic and supersonic until it completely diverges. Unfortunately, I have no more ideas to make AUSM3 work. Aidyn пн, 14 янв. 2019 г. в 07:02, Giacomo Castiglioni <giacastiglioni@gmail.com>:
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
Dear Aidyn, Thank you for raising this issue. I believe your points regarding the AUSM solver are correct, but as Giacomo suggest, there might be other errors. Does the test case below works fine with other Riemann solvers? Best, Gianmarco — Gianmarco Mengaldo Website: gmengaldo.com
On Jan 23, 2019, at 12:15 AM, Aidyn Aitzhan <aidyn.b.aitzhan@gmail.com> wrote:
Dear Giacomo,
Sorry for long delay. With my modifications no one of my subsonic and supersonic cases work 100% fine. I have performed some tests on AUSM3 and realized that it requires smaller CFL (compare to LF and HLLC) values to maintain stability. But the real problem is that the error rises up from the (viscous)wall boundary for both subsonic and supersonic until it completely diverges.
Unfortunately, I have no more ideas to make AUSM3 work.
Aidyn
пн, 14 янв. 2019 г. в 07:02, Giacomo Castiglioni <giacastiglioni@gmail.com <mailto:giacastiglioni@gmail.com>>: 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 <mailto: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 <mailto:Nektar-users@imperial.ac.uk> https://mailman.ic.ac.uk/mailman/listinfo/nektar-users <https://mailman.ic.ac.uk/mailman/listinfo/nektar-users> <img.jpg>_______________________________________________ Nektar-users mailing list Nektar-users@imperial.ac.uk <mailto:Nektar-users@imperial.ac.uk> https://mailman.ic.ac.uk/mailman/listinfo/nektar-users <https://mailman.ic.ac.uk/mailman/listinfo/nektar-users>
Dear Gianmarco, I thing we are missing something in AUSM3 file. Because that test case works fine for HLLC, Lax–Friedrichs and also AUSM2 under both subsonic and supersonic. Best Regards, Aidyn ср, 23 янв. 2019 г. в 04:13, Gianmarco Mengaldo < gianmarco.mengaldo@gmail.com>:
Dear Aidyn,
Thank you for raising this issue. I believe your points regarding the AUSM solver are correct, but as Giacomo suggest, there might be other errors.
Does the test case below works fine with other Riemann solvers?
Best, Gianmarco
— Gianmarco Mengaldo Website: gmengaldo.com
On Jan 23, 2019, at 12:15 AM, Aidyn Aitzhan <aidyn.b.aitzhan@gmail.com> wrote:
Dear Giacomo,
Sorry for long delay. With my modifications no one of my subsonic and supersonic cases work 100% fine. I have performed some tests on AUSM3 and realized that it requires smaller CFL (compare to LF and HLLC) values to maintain stability. But the real problem is that the error rises up from the (viscous)wall boundary for both subsonic and supersonic until it completely diverges.
Unfortunately, I have no more ideas to make AUSM3 work.
Aidyn
пн, 14 янв. 2019 г. в 07:02, Giacomo Castiglioni <giacastiglioni@gmail.com
:
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
<img.jpg>_______________________________________________ Nektar-users mailing list Nektar-users@imperial.ac.uk https://mailman.ic.ac.uk/mailman/listinfo/nektar-users
Hi Aidyn, Yes, it looks like we are missing something if this test case is working correctly with the other Riemann solvers. Is there a specific reason why you need to use AUSM3? Cheers, Gianmarco
On Jan 23, 2019, at 11:24 PM, Aidyn Aitzhan <aidyn.b.aitzhan@gmail.com> wrote:
Dear Gianmarco,
I thing we are missing something in AUSM3 file. Because that test case works fine for HLLC, Lax–Friedrichs and also AUSM2 under both subsonic and supersonic.
Best Regards, Aidyn
ср, 23 янв. 2019 г. в 04:13, Gianmarco Mengaldo <gianmarco.mengaldo@gmail.com <mailto:gianmarco.mengaldo@gmail.com>>: Dear Aidyn,
Thank you for raising this issue. I believe your points regarding the AUSM solver are correct, but as Giacomo suggest, there might be other errors.
Does the test case below works fine with other Riemann solvers?
Best, Gianmarco
— Gianmarco Mengaldo Website: gmengaldo.com <http://gmengaldo.com/>
On Jan 23, 2019, at 12:15 AM, Aidyn Aitzhan <aidyn.b.aitzhan@gmail.com <mailto:aidyn.b.aitzhan@gmail.com>> wrote:
Dear Giacomo,
Sorry for long delay. With my modifications no one of my subsonic and supersonic cases work 100% fine. I have performed some tests on AUSM3 and realized that it requires smaller CFL (compare to LF and HLLC) values to maintain stability. But the real problem is that the error rises up from the (viscous)wall boundary for both subsonic and supersonic until it completely diverges.
Unfortunately, I have no more ideas to make AUSM3 work.
Aidyn
пн, 14 янв. 2019 г. в 07:02, Giacomo Castiglioni <giacastiglioni@gmail.com <mailto:giacastiglioni@gmail.com>>: 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 <mailto: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 <mailto:Nektar-users@imperial.ac.uk> https://mailman.ic.ac.uk/mailman/listinfo/nektar-users <https://mailman.ic.ac.uk/mailman/listinfo/nektar-users> <img.jpg>_______________________________________________ Nektar-users mailing list Nektar-users@imperial.ac.uk <mailto:Nektar-users@imperial.ac.uk> https://mailman.ic.ac.uk/mailman/listinfo/nektar-users <https://mailman.ic.ac.uk/mailman/listinfo/nektar-users>
participants (3)
-
Aidyn Aitzhan
-
Giacomo Castiglioni
-
Gianmarco Mengaldo