Branch data Line data Source code
1 : : // ***************************************************************************** 2 : : /*! 3 : : \file src/PDE/Riemann/SplitMachFns.hpp 4 : : \copyright 2012-2015 J. Bakosi, 5 : : 2016-2018 Los Alamos National Security, LLC., 6 : : 2019-2021 Triad National Security, LLC. 7 : : All rights reserved. See the LICENSE file for details. 8 : : \brief Split-Mach functions for the AUSM+ Riemann solver 9 : : \details This file implements the split-Mach functions used by the AUSM 10 : : Riemann solver, with the all-speed corrections. 11 : : Ref. Liou, M. S. (2006). A sequel to AUSM, Part II: AUSM+-up for 12 : : all speeds. Journal of computational physics, 214(1), 137-170. 13 : : */ 14 : : // ***************************************************************************** 15 : : #ifndef SplitMachFns_h 16 : : #define SplitMachFns_h 17 : : 18 : : namespace inciter { 19 : : 20 : : //! Split Mach polynomials for AUSM+ flux 21 : : //! \param[in] fa All-speed parameter 22 : : //! \param[in] mach Local Mach numner 23 : : //! \return Values of the positive and negative split Mach and pressure 24 : : //! polynomials. 25 : : //! \details This function returns a vector with positive and negative Mach 26 : : //! and pressure polynomials, as: 27 : : //! ms[0] = M_4(+), 28 : : //! ms[1] = M_4(-), 29 : : //! ms[2] = P_5(+), and 30 : : //! ms[3] = P_5(-). 31 : : //! For more details, ref. Liou, M. S. (2006). A sequel to AUSM, Part II: 32 : : //! AUSM+-up for all speeds. J. Comp. Phys., 214(1), 137-170. 33 : 15938282 : static std::array< tk::real, 4 > splitmach_ausm( tk::real fa, 34 : : tk::real mach ) 35 : : { 36 : : std::array< tk::real, 4 > ms; 37 : : 38 : : std::array< tk::real, 3 > msplus, msminus; 39 : : tk::real psplus, psminus; 40 : : 41 : 15938282 : msplus[0] = 0.5*(mach + std::fabs(mach)); 42 : 15938282 : msminus[0]= 0.5*(mach - std::fabs(mach)); 43 : : 44 : 15938282 : msplus[1] = +0.25*(mach + 1.0)*(mach + 1.0); 45 : 15938282 : msminus[1]= -0.25*(mach - 1.0)*(mach - 1.0); 46 : : 47 : 15938282 : auto alph_fa = (3.0/16.0) * (-4.0 + 5.0*fa*fa); 48 : 15938282 : auto beta = 1.0/8.0; 49 : : 50 [ + + ]: 15938282 : if (std::fabs(mach) >= 1.0) 51 : : { 52 : 473 : msplus[2] = msplus[0]; 53 : 473 : msminus[2]= msminus[0]; 54 : 473 : psplus = msplus[0]/mach; 55 : 473 : psminus = msminus[0]/mach; 56 : : } 57 : : else 58 : : { 59 : 15937809 : msplus[2] = msplus[1]* (1.0 - 16.0*beta*msminus[1]); 60 : 15937809 : msminus[2]= msminus[1]* (1.0 + 16.0*beta*msplus[1]); 61 : 15937809 : psplus = msplus[1]* 62 : 15937809 : ((+2.0 - mach) - (16.0 * alph_fa)*mach*msminus[1]); 63 : 15937809 : psminus = msminus[1]* 64 : 15937809 : ((-2.0 - mach) + (16.0 * alph_fa)*mach*msplus[1]); 65 : : } 66 : : 67 : 15938282 : ms[0] = msplus[2]; 68 : 15938282 : ms[1] = msminus[2]; 69 : 15938282 : ms[2] = psplus; 70 : 15938282 : ms[3] = psminus; 71 : : 72 : 15938282 : return ms; 73 : : } 74 : : 75 : : } // inciter:: 76 : : 77 : : #endif // SplitMachFns_h