4 #include "exahype2/RefinementControl.h"
10 [[maybe_unused]]
const double*
const NOALIAS Q,
11 [[maybe_unused]]
const tarch::la::Vector<DIMENSIONS, double>&
x,
12 [[maybe_unused]]
const tarch::la::Vector<DIMENSIONS, double>&
h,
13 [[maybe_unused]]
const double t,
14 [[maybe_unused]]
const double dt,
15 [[maybe_unused]]
const int normal,
16 [[maybe_unused]]
double*
const NOALIAS L
19 static constexpr
double g = 9.81;
21 const double u = Q[0] > 1e-5 ? Q[1 + normal] / Q[0] : 0.0;
22 const double c = Q[0] > 1e-5 ? sqrt(
g * Q[0]) : 0.0;
30 [[maybe_unused]]
const double*
const NOALIAS Q,
31 [[maybe_unused]]
const tarch::la::Vector<DIMENSIONS, double>&
x,
32 [[maybe_unused]]
const tarch::la::Vector<DIMENSIONS, double>& h_,
33 [[maybe_unused]]
const double t,
34 [[maybe_unused]]
const double dt,
35 [[maybe_unused]]
const int normal,
36 [[maybe_unused]]
double*
const NOALIAS F
39 static constexpr
double g = 9.81;
41 const double ih = Q[0] > 1e-5 ? 1.0 / Q[0] : 0.0;
43 F[1 + 0] = ih * Q[1 + normal] * Q[1 + 0];
44 F[1 + 1] = ih * Q[1 + normal] * Q[1 + 1];
45 F[1 + normal] += 0.5 *
g * Q[0] * Q[0];
51 const double* NOALIAS ql,
52 const double* NOALIAS qr,
54 double* NOALIAS apdq,
const int* normal);
57 double exahype::limiting::swe::fvSWE::solveRiemannProblem(
58 [[maybe_unused]]
const double*
const NOALIAS QL,
59 [[maybe_unused]]
const double*
const NOALIAS QR,
60 [[maybe_unused]]
const tarch::la::Vector<DIMENSIONS, double>&
x,
61 [[maybe_unused]]
const tarch::la::Vector<DIMENSIONS, double>&
h,
62 [[maybe_unused]]
const double t,
63 [[maybe_unused]]
const double dt,
64 [[maybe_unused]]
const int normal,
65 [[maybe_unused]]
double*
const NOALIAS FL,
66 [[maybe_unused]]
double*
const NOALIAS FR
71 const double cL = std::sqrt(9.81 * QL[0]);
72 double uL = QL[normal + 1] * QL[0] * std::sqrt(2)/std::sqrt(std::pow(QL[0], 4) + std::pow(std::max(QL[0], 1e-5), 4));
74 double smaxL = std::max(std::abs(uL - cL), std::abs(uL + cL));
76 const double cR = std::sqrt(9.81 * QR[0]);
77 double uR = QR[normal + 1] * QR[0] * std::sqrt(2)/std::sqrt(std::pow(QR[0], 4) + std::pow(std::max(QR[0], 1e-5), 4));
79 double smaxR = std::max(std::abs(uR - cR), std::abs(uR + cR));
81 double smax = std::max(smaxL, smaxR);
90 FL[0] = 0.5*(FL[0]+FR[0] + smax*(QL[0]+QL[3]-QR[0]-QR[3]) );
91 FL[1] = 0.5*(FL[1]+FR[1] + smax*(QL[1]-QR[1]) );
92 FL[2] = 0.5*(FL[2]+FR[2] + smax*(QL[2]-QR[2]) );
101 FL[normal+1] += 0.5*9.81*0.5*(QL[0]+QR[0])*(QR[3]-QL[3]);
102 FR[normal+1] -= 0.5*9.81*0.5*(QL[0]+QR[0])*(QR[3]-QL[3]);
double rpn2_augmented_wrapper(const double *NOALIAS ql, const double *NOALIAS qr, double *NOALIAS amdq, double *NOALIAS apdq, const int *normal)
tarch::logging::Log _log
This is variant 1 of the fused kernels.