19 template<
typename GasT>
21 inline static void ComputeVolumeFluxKernel(
const GasT &gas,
22 const mfem::real_t* q1,
23 const mfem::real_t* q2,
24 const mfem::real_t* met1,
25 const mfem::real_t* met2,
26 mfem::real_t* F_tilde)
28 const int dim = gas.dim();
29 const int neq = gas.num_equations();
32 mfem::real_t met[3] = {0,0,0};
38 NavierStokesFlux::ComputeInviscidFluxKernel(gas, q1, inv_flux_1);
39 NavierStokesFlux::ComputeInviscidFluxKernel(gas, q2, inv_flux_2);
40 for(
int ieq=0;ieq < neq;ieq++){
41 inv_flux_bar[ieq] = 0;
42 for(
int idim = 0;idim < dim;idim++){
43 inv_flux_bar[ieq] += 0.5*(inv_flux_1[ieq][idim] + inv_flux_2[ieq][idim])*met[idim];
47 for(
int ieq = 0;ieq < neq;ieq++){
48 F_tilde[ieq] = inv_flux_bar[ieq];
53 template<
typename GasModelT>
54 MFEM_HOST_DEVICE
inline static void
55 ComputeFaceFluxKernel(
const GasModelT &gasModel,
56 const mfem::real_t *state1,
57 const mfem::real_t *state2,
58 const mfem::real_t *nor,
61 const int dim = gasModel.dim();
62 const int neq = gasModel.num_equations();
70 NavierStokesFlux::ComputeInviscidFluxKernel(gasModel, state1, inv_flux_1);
71 NavierStokesFlux::ComputeInviscidFluxKernel(gasModel, state2, inv_flux_2);
73 mfem::real_t un1 = 0.0;
74 mfem::real_t un2 = 0.0;
75 mfem::real_t nor_mag2 = 0.0;
77 for (
int d = 0; d < dim; ++d)
79 un1 += gasModel.velocity(S1, d) * nor[d];
80 un2 += gasModel.velocity(S2, d) * nor[d];
81 nor_mag2 += nor[d] * nor[d];
86 const mfem::real_t c1 = gasModel.sound_speed(S1) * nor_mag;
87 const mfem::real_t c2 = gasModel.sound_speed(S2) * nor_mag;
89 const mfem::real_t sL1 = un1 - c1;
90 const mfem::real_t sL2 = un2 - c2;
91 const mfem::real_t sR1 = un1 + c1;
92 const mfem::real_t sR2 = un2 + c2;
94 const mfem::real_t sL = (sL1 < sL2) ? sL1 : sL2;
95 const mfem::real_t sR = (sR1 > sR2) ? sR1 : sR2;
97 for (
int ieq = 0; ieq < neq; ++ieq)
99 mfem::real_t fn1 = 0.0;
100 mfem::real_t fn2 = 0.0;
101 for (
int d = 0; d < dim; ++d)
103 fn1 += inv_flux_1[ieq][d] * nor[d];
104 fn2 += inv_flux_2[ieq][d] * nor[d];
117 (sR * fn1 - sL * fn2 + sL * sR * (state2[ieq] - state1[ieq]))
125 template<
typename GasModelT>
127 const mfem::real_t *q1,
const mfem::real_t *q2,
128 const mfem::real_t *met1,
const mfem::real_t *met2,
129 mfem::real_t *F_tilde)
const{
130 ComputeVolumeFluxKernel(gasModel, q1, q2, met1, met2, F_tilde);
132 template<
typename GasModelT>
133 MFEM_HOST_DEVICE
inline void ComputeFaceFlux(
const GasModelT &gasModel,
const mfem::real_t *qminus,
134 const mfem::real_t *qplus,
const mfem::real_t *nor,
135 mfem::real_t *flux)
const {
136 ComputeFaceFluxKernel(gasModel, qminus, qplus, nor, flux);
MFEM_HOST_DEVICE void ComputeMeanVec(const mfem::real_t *a, const mfem::real_t *b, mfem::real_t *out, int n)
Definition theseus_kernels.hpp:101
MFEM_HOST_DEVICE void ComputeVolumeFlux(const GasModelT &gasModel, const mfem::real_t *q1, const mfem::real_t *q2, const mfem::real_t *met1, const mfem::real_t *met2, mfem::real_t *F_tilde) const
Definition HLLFlux.hpp:126
MFEM_HOST_DEVICE void ComputeFaceFlux(const GasModelT &gasModel, const mfem::real_t *qminus, const mfem::real_t *qplus, const mfem::real_t *nor, mfem::real_t *flux) const
Definition HLLFlux.hpp:133