11 #include "AbstractCCZ4.h"
12 #include "tarch/logging/Log.h"
16 #include "InitialValues.h"
18 #include "CCZ4Kernels.h"
32 static tarch::logging::Log
_log;
73 const double * NOALIAS Q,
74 const tarch::la::Vector<DIMENSIONS,double>& volumeCentre,
75 const tarch::la::Vector<DIMENSIONS,double>& volumeH,
79 #ifdef IncludeTwoPunctures
85 const tarch::la::Vector<DIMENSIONS,double>& volumeCentre,
86 const tarch::la::Vector<DIMENSIONS,double>& volumeH,
87 bool gridIsConstructed
94 const double * NOALIAS Qinside,
95 double * NOALIAS Qoutside,
96 const tarch::la::Vector<DIMENSIONS,double>& faceCentre,
97 const tarch::la::Vector<DIMENSIONS,double>& volumeH,
107 const double * NOALIAS Q,
108 const tarch::la::Vector<DIMENSIONS,double>& volumeCentre,
109 const tarch::la::Vector<DIMENSIONS,double>& volumeH,
125 const double * NOALIAS Q,
126 const tarch::la::Vector<DIMENSIONS,double>& faceCentre,
127 const tarch::la::Vector<DIMENSIONS,double>& volumeH,
136 const double * NOALIAS Q,
137 const double * NOALIAS deltaQ,
138 const tarch::la::Vector<DIMENSIONS,double>& faceCentre,
139 const tarch::la::Vector<DIMENSIONS,double>& volumeH,
143 double * NOALIAS BgradQ
163 #if defined(WITH_GPU_OMP_TARGET)
164 #pragma omp declare target
167 const double * NOALIAS Q,
168 const tarch::la::Vector<DIMENSIONS,double>& volumeCentre,
169 const tarch::la::Vector<DIMENSIONS,double>& volumeH,
173 ::exahype2::Solver::Offloadable
175 std::memset(S, 0, NumberOfUnknowns*
sizeof(
double));
176 source(S,Q, CCZ4LapseType, CCZ4ds, CCZ4c, CCZ4e, CCZ4f, CCZ4bs, CCZ4sk, CCZ4xi, CCZ4itau, CCZ4eta, CCZ4k1, CCZ4k2, CCZ4k3, CCZ4SO);
178 #if defined(WITH_GPU_OMP_TARGET)
179 #pragma omp end declare target
199 #if defined(WITH_GPU_OMP_TARGET)
200 #pragma omp declare target
203 const double * NOALIAS Q,
204 const tarch::la::Vector<DIMENSIONS,double>& faceCentre,
205 const tarch::la::Vector<DIMENSIONS,double>& volumeH,
209 ::exahype2::Solver::Offloadable
211 const double np = 1.0;
212 #if defined(CCZ4EINSTEIN)
213 const double qmin =
std::min({Q[0],Q[3],Q[5]});
214 const double alpha = std::max({1.0, Q[16]}) * std::max({1.0, pow(Q[54],1.0/np)}) / std::sqrt(qmin);
216 const double alpha = 1.0;
219 constexpr
double sqrtwo = 1.4142135623730951;
221 const double tempA = alpha * std::max({sqrtwo, CCZ4e, CCZ4ds, CCZ4GLMc/alpha, CCZ4GLMd/alpha});
222 const double tempB = Q[17+normal];
223 double tem = std::max({1.0, std::abs(-tempA-tempB), std::abs(tempA-tempB)});
228 #if defined(WITH_GPU_OMP_TARGET)
229 #pragma omp end declare target
251 #if defined(WITH_GPU_OMP_TARGET)
252 #pragma omp declare target
255 const double * NOALIAS Q,
256 const double * NOALIAS deltaQ,
257 const tarch::la::Vector<DIMENSIONS,double>& faceCentre,
258 const tarch::la::Vector<DIMENSIONS,double>& volumeH,
262 double * NOALIAS BgradQ,
263 ::exahype2::Solver::Offloadable
265 #if defined(WITH_GPU_OMP_TARGET)
266 #pragma omp end declare target
::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.
static GPU_CALLABLE_METHOD double maxEigenvalue(const double *NOALIAS Q, const tarch::la::Vector< DIMENSIONS, double > &faceCentre, const tarch::la::Vector< DIMENSIONS, double > &volumeH, double t, double dt, int normal, ::exahype2::Solver::Offloadable)
To obtain the best performance, I recommend to man inline command to this signature and to copy the i...
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
void prepare(TP::TwoPunctures *tp)
static tarch::logging::Log _log
static GPU_CALLABLE_METHOD void sourceTerm(const double *NOALIAS Q, const tarch::la::Vector< DIMENSIONS, double > &volumeCentre, const tarch::la::Vector< DIMENSIONS, double > &volumeH, double t, double dt, double *NOALIAS S, ::exahype2::Solver::Offloadable)
To obtain the best performance, I recommend to man inline command to this signature and to copy the i...
void sourceTerm(const double *NOALIAS Q, const tarch::la::Vector< DIMENSIONS, double > &volumeCentre, const tarch::la::Vector< DIMENSIONS, double > &volumeH, double t, double dt, double *NOALIAS S) override
virtual void nonconservativeProduct(const double *NOALIAS Q, const double *NOALIAS deltaQ, const tarch::la::Vector< DIMENSIONS, double > &faceCentre, const tarch::la::Vector< DIMENSIONS, double > &volumeH, double t, double dt, int normal, double *NOALIAS BgradQ) override
virtual double maxEigenvalue(const double *NOALIAS Q, const tarch::la::Vector< DIMENSIONS, double > &faceCentre, const tarch::la::Vector< DIMENSIONS, double > &volumeH, double t, double dt, int normal) override
Determine max eigenvalue over Jacobian in a given point with solution values (states) Q.
void initialCondition(double *NOALIAS Q, const tarch::la::Vector< DIMENSIONS, double > &volumeCentre, const tarch::la::Vector< DIMENSIONS, double > &volumeH, bool gridIsConstructed) override
static GPU_CALLABLE_METHOD void nonconservativeProduct(const double *NOALIAS Q, const double *NOALIAS deltaQ, const tarch::la::Vector< DIMENSIONS, double > &faceCentre, const tarch::la::Vector< DIMENSIONS, double > &volumeH, double t, double dt, int normal, double *NOALIAS BgradQ, ::exahype2::Solver::Offloadable)
To obtain the best performance, I recommend to man inline command to this signature and to copy the i...
static double min(double const x, double const y)
static void source(double *S, const double *const Q, const int CCZ4LapseType, const double CCZ4ds, const double CCZ4c, const double CCZ4e, const double CCZ4f, const double CCZ4bs, const double CCZ4sk, const double CCZ4xi, const double CCZ4itau, const double CCZ4eta, const double CCZ4k1, const double CCZ4k2, const double CCZ4k3, const double CCZ4SO)
The source term is one out of two terms that we use in our CCZ4 formulation.
This code is taken from the original ExaHyPE project written by colleagues from the University of Tre...