4#include "EulerSolver.h"
6tarch::logging::Log tutorials::exahype2::euler::EulerSolver::_log(
"tutorials::exahype2::euler::EulerSolver");
11 * (0.2969 * sqrt(x / c) + ((((-0.1015) * (x / c) + 0.2843) * (x / c) - 0.3516) * (x / c) - 0.1260) * (x / c));
14void tutorials::exahype2::euler::EulerSolver::initialCondition(
15 [[maybe_unused]]
double*
const NOALIAS Q,
16 [[maybe_unused]]
const tarch::la::Vector<DIMENSIONS, double>& x,
17 [[maybe_unused]]
const tarch::la::Vector<DIMENSIONS, double>& h,
18 [[maybe_unused]]
const bool gridIsConstructed
22 Q[0] = (
y >
x[1] && -
y <
x[1]) ? 1000.0 : 1.0;
28void tutorials::exahype2::euler::EulerSolver::boundaryConditions(
29 [[maybe_unused]]
const double*
const NOALIAS Qinside,
30 [[maybe_unused]]
double*
const NOALIAS Qoutside,
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 int normal
36 if (normal == 0 && x[0] == DomainOffset[0]) {
42 Qoutside[0] = Qinside[0];
43 Qoutside[1] = Qinside[1];
44 Qoutside[2] = Qinside[2];
45 Qoutside[3] = Qinside[3];
49double tutorials::exahype2::euler::EulerSolver::maxEigenvalue(
50 [[maybe_unused]]
const double*
const NOALIAS Q,
51 [[maybe_unused]]
const tarch::la::Vector<DIMENSIONS, double>& x,
52 [[maybe_unused]]
const tarch::la::Vector<DIMENSIONS, double>& h,
53 [[maybe_unused]]
const double t,
54 [[maybe_unused]]
const double dt,
55 [[maybe_unused]]
const int normal
57 const double irho = 1.0 / Q[0];
58 constexpr double gamma = 1.4;
59 const double p = (
gamma - 1) * (Q[3] - 0.5 * irho * (Q[1] * Q[1] + Q[2] * Q[2]));
61 const double c = std::sqrt(gamma * p * irho);
62 const double u = Q[normal + 1] * irho;
64 return std::max(std::abs(u - c), std::abs(u + c));
67void tutorials::exahype2::euler::EulerSolver::flux(
68 [[maybe_unused]]
const double*
const NOALIAS Q,
69 [[maybe_unused]]
const tarch::la::Vector<DIMENSIONS, double>& x,
70 [[maybe_unused]]
const tarch::la::Vector<DIMENSIONS, double>& h,
71 [[maybe_unused]]
const double t,
72 [[maybe_unused]]
const double dt,
73 [[maybe_unused]]
const int normal,
74 [[maybe_unused]]
double*
const NOALIAS F
76 const double irho = 1.0 / Q[0];
77 constexpr double gamma = 1.4;
78 const double p = (
gamma - 1) * (Q[3] - 0.5 * irho * (Q[1] * Q[1] + Q[2] * Q[2]));
81 F[1] = Q[normal + 1] * Q[1] * irho;
82 F[2] = Q[normal + 1] * Q[2] * irho;
83 F[3] = Q[normal + 1] * irho * (Q[3] +
p);
double airfoilSymmetric(double x, double c=100, double t=0.12)