5#include "AbstractSSInfall.h"
20#if defined(GPUOffloadingOMP)
21#pragma omp declare target
43#if defined(GPUOffloadingOMP)
44#pragma omp end declare target
58 static double getForceDensityNorm(
double r_coord,
double m_in,
double t,
double density,
double a_input);
64 double globalMinTimeStamp,
double globalMaxTimeStamp,
double globalMinTimeStepSize,
double globalMaxTimeStepSize
70 const double* __restrict__ Q,
78 double* __restrict__ Q,
81 bool gridIsConstructed
90 const double* __restrict__ Q,
95 double* __restrict__ S
99#if defined(GPUOffloadingOMP)
100#pragma omp declare target
107 const double* __restrict__ Q,
112 double* __restrict__ S,
115#if defined(GPUOffloadingOMP)
116#pragma omp end declare target
121 const double* __restrict__ Qinside,
122 double* __restrict__ Qoutside,
134 const double* __restrict__ Q,
143#if defined(GPUOffloadingOMP)
144#pragma omp declare target
147 const double* __restrict__ Q,
155#if defined(GPUOffloadingOMP)
156#pragma omp end declare target
168 const double* __restrict__ Q,
174 double* __restrict__ F
178#if defined(GPUOffloadingOMP)
179#pragma omp declare target
182 const double* __restrict__ Q,
188 double* __restrict__ F,
191#if defined(GPUOffloadingOMP)
192#pragma omp end declare target
196 void add_mass(
const double r_coor,
const double rho,
const double size);
virtual void flux(const double *__restrict__ Q, const tarch::la::Vector< Dimensions, double > &faceCentre, const tarch::la::Vector< Dimensions, double > &volumeH, double t, double dt, int normal, double *__restrict__ F) override
The flux in the SSInfall does not depend on any variable of the solver.
static double _rMax
This is a straight 1:1 copy of r_s[sample_number-1].
static void sourceTerm(const double *__restrict__ Q, const tarch::la::Vector< Dimensions, double > &volumeCentre, const tarch::la::Vector< Dimensions, double > &volumeH, double t, double dt, double *__restrict__ S, Offloadable)
This is the variation that's used on the GPU.
std::string plotGlobalMTot(bool plotCopy) const
void finishTimeStep() override
virtual void boundaryConditions(const double *__restrict__ Qinside, double *__restrict__ Qoutside, const tarch::la::Vector< Dimensions, double > &faceCentre, const tarch::la::Vector< Dimensions, double > &volumeH, double t, int normal) override
bool isOutsideOfLargestRadius(const tarch::la::Vector< Dimensions, double > &patchCentre, const tarch::la::Vector< Dimensions, double > &patchH) const
This is a very conservative routine.
static tarch::logging::Log _log
static double _rhoMax
This is a straight 1:1 copy of rho_x[sample_number-1].
void add_mass(const double r_coor, const double rho, const double size)
static const tarch::la::Vector< Dimensions, double > OverDensityCentre
::exahype2::RefinementCommand refinementCriterion(const double *__restrict__ Q, const tarch::la::Vector< Dimensions, double > &volumeCentre, const tarch::la::Vector< Dimensions, double > &volumeH, double t) override
static void flux(const double *__restrict__ Q, const tarch::la::Vector< Dimensions, double > &faceCentre, const tarch::la::Vector< Dimensions, double > &volumeH, double t, double dt, int normal, double *__restrict__ F, Offloadable)
static double maxEigenvalue(const double *__restrict__ Q, const tarch::la::Vector< Dimensions, double > &faceCentre, const tarch::la::Vector< Dimensions, double > &volumeH, double t, double dt, int normal, Offloadable)
static double getForceDensityNorm(double r_coord, double m_in, double t, double density, double a_input)
double getInitialMIn(double r_coord) const
Returns m_in for time t=0.
static double _mTotMax
From m_tot_copy[sample_number-1].
virtual double maxEigenvalue(const double *__restrict__ Q, const tarch::la::Vector< Dimensions, double > &faceCentre, const tarch::la::Vector< Dimensions, double > &volumeH, double t, double dt, int normal) override
See flux() for a description why there are two maxEigenvalue() versions.
std::string plotRs() const
double mass_interpolate(const double r_coor, const int MassCal)
void initialCondition(double *__restrict__ Q, const tarch::la::Vector< Dimensions, double > &volumeCentre, const tarch::la::Vector< Dimensions, double > &volumeH, bool gridIsConstructed) override
virtual bool patchCanUseStatelessPDETerms(const tarch::la::Vector< Dimensions, double > &patchCentre, const tarch::la::Vector< Dimensions, double > &patchH, double t, double dt) const
Within the mass accumulation radius, I return false.
void startTimeStep(double globalMinTimeStamp, double globalMaxTimeStamp, double globalMinTimeStepSize, double globalMaxTimeStepSize) override
void sourceTerm(const double *__restrict__ Q, const tarch::la::Vector< Dimensions, double > &volumeCentre, const tarch::la::Vector< Dimensions, double > &volumeH, double t, double dt, double *__restrict__ S) override
There are two variants of the source term.