Program Listing for File convertConsToPrimMHD.hpp
↰ Return to documentation for file (hydro/convertConsToPrimMHD.hpp
)
// ***********************************************************************************
// Idefix MHD astrophysical code
// Copyright(C) 2020-2022 Geoffroy R. J. Lesur <geoffroy.lesur@univ-grenoble-alpes.fr>
// and other code contributors
// Licensed under CeCILL 2.1 License, see COPYING for more information
// ***********************************************************************************
#ifndef HYDRO_CONVERTCONSTOPRIMMHD_HPP_
#define HYDRO_CONVERTCONSTOPRIMMHD_HPP_
#include "idefix.hpp"
#include "hydro.hpp"
KOKKOS_INLINE_FUNCTION void K_ConsToPrim(real Vc[], real Uc[], real gamma_m1) {
Vc[RHO] = Uc[RHO];
EXPAND( Vc[VX1] = Uc[MX1]/Uc[RHO]; ,
Vc[VX2] = Uc[MX2]/Uc[RHO]; ,
Vc[VX3] = Uc[MX3]/Uc[RHO]; )
EXPAND( Vc[BX1] = Uc[BX1]; ,
Vc[BX2] = Uc[BX2]; ,
Vc[BX3] = Uc[BX3]; )
#if HAVE_ENERGY
real kin,mag;
kin = HALF_F / Uc[RHO] * (EXPAND( Uc[MX1]*Uc[MX1] ,
+ Uc[MX2]*Uc[MX2] ,
+ Uc[MX3]*Uc[MX3] ));
mag = HALF_F * (EXPAND( Uc[BX1]*Uc[BX1] ,
+ Uc[BX2]*Uc[BX2] ,
+ Uc[BX3]*Uc[BX3] ));
Vc[PRS] = gamma_m1 * (Uc[ENG] - kin - mag);
// Check pressure positivity
if(Vc[PRS]<= ZERO_F) {
#ifdef SMALL_PRESSURE_TEMPERATURE
Vc[PRS] = SMALL_PRESSURE_TEMPERATURE*Vc[RHO];
#else
Vc[PRS] = SMALL_PRESSURE_FIX;
#endif
Uc[ENG] = Vc[PRS]/gamma_m1+kin+mag;
}
#endif // Have_energy
}
KOKKOS_INLINE_FUNCTION void K_PrimToCons(real Uc[], real Vc[], real gamma_m1) {
Uc[RHO] = Vc[RHO];
EXPAND( Uc[MX1] = Vc[VX1]*Vc[RHO]; ,
Uc[MX2] = Vc[VX2]*Vc[RHO]; ,
Uc[MX3] = Vc[VX3]*Vc[RHO]; )
EXPAND( Uc[BX1] = Vc[BX1]; ,
Uc[BX2] = Vc[BX2]; ,
Uc[BX3] = Vc[BX3]; )
#if HAVE_ENERGY
Uc[ENG] = Vc[PRS] / gamma_m1
+ HALF_F * Vc[RHO] * (EXPAND( Vc[VX1]*Vc[VX1] ,
+ Vc[VX2]*Vc[VX2] ,
+ Vc[VX3]*Vc[VX3] ))
+ HALF_F * (EXPAND( Uc[BX1]*Uc[BX1] ,
+ Uc[BX2]*Uc[BX2] ,
+ Uc[BX3]*Uc[BX3] ));
#endif // Have_energy
}
#endif // HYDRO_CONVERTCONSTOPRIMMHD_HPP_