6 #include "exahype2/RefinementControl.h"
7 #include "tarch/NonCriticalAssertions.h"
19 const tarch::la::Vector<DIMENSIONS, double>& volumeX,
20 const tarch::la::Vector<DIMENSIONS, double>& volumeH,
21 bool gridIsConstructed
23 constexpr
int nVars = 59;
24 constexpr
double pi = M_PI;
25 constexpr
double peak_number = 2.0;
26 constexpr
double ICA = 0.1;
27 double HH = 1.0 - ICA * sin(peak_number *
pi * (volumeX[0] - 0));
28 double dxH = -peak_number *
pi * ICA * cos(peak_number *
pi * (volumeX[0] - 0));
29 double dxphi = -pow(HH, (-7.0 / 6.0)) * dxH / 6.0;
30 double phi = pow((1.0 / HH), (1.0 / 6.0));
31 double Kxx = -0.5 * peak_number *
pi * ICA * cos(peak_number *
pi * (volumeX[0] - 0))
32 / sqrt(1.0 - ICA * sin(peak_number *
pi * (volumeX[0] - 0)));
33 double traceK = Kxx / HH;
34 std::memset(Q, .0, nVars *
sizeof(
double));
35 Q[0] = phi * phi * HH;
38 Q[6] = phi * phi * (Kxx - 1.0 / 3.0 * traceK * HH);
39 Q[9] = phi * phi * (0.0 - 1.0 / 3.0 * traceK * 1.0);
40 Q[11] = phi * phi * (0.0 - 1.0 / 3.0 * traceK * 1.0);
42 Q[13] = 2.0 / (3.0 * pow(HH, (5.0 / 3.0))) * dxH;
43 Q[23] = 1.0 / (2.0) * dxH * pow(HH, (-1.0 / 2.0));
44 Q[35] = pow(HH, (-1.0 / 3.0)) * dxH / 3.0;
51 for (
int i = 0; i < NumberOfUnknowns; i++) {
52 assertion2(std::isfinite(Q[i]), volumeX, i);
57 const double* NOALIAS Qinside,
58 double* NOALIAS Qoutside,
59 const tarch::la::Vector<DIMENSIONS, double>& faceCentre,
60 const tarch::la::Vector<DIMENSIONS, double>& volumeH,
64 for (
int i = 0; i < NumberOfUnknowns + NumberOfAuxiliaryVariables; i++) {
65 assertion4(Qinside[i] == Qinside[i], faceCentre,
t, normal, i);
66 Qoutside[i] = Qinside[i];
71 const double* NOALIAS Q,
72 const tarch::la::Vector<DIMENSIONS, double>& volumeCentre,
73 const tarch::la::Vector<DIMENSIONS, double>& volumeH,
76 return ::exahype2::RefinementCommand::Keep;
void initialCondition(double *NOALIAS Q, const tarch::la::Vector< DIMENSIONS, double > &volumeCentre, const tarch::la::Vector< DIMENSIONS, double > &volumeH, bool gridIsConstructed) override
::exahype2::RefinementCommand refinementCriterion(const double *NOALIAS Q, const tarch::la::Vector< DIMENSIONS, double > &volumeCentre, const tarch::la::Vector< DIMENSIONS, double > &volumeH, double t) override
Refinement criterion.
virtual void boundaryConditions(const double *NOALIAS Qinside, double *NOALIAS Qoutside, const tarch::la::Vector< DIMENSIONS, double > &faceCentre, const tarch::la::Vector< DIMENSIONS, double > &volumeH, double t, int normal) override
static tarch::logging::Log _log