|
| | CCZ4 () |
| |
| ::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.
|
| |
| void | prepare (TP::TwoPunctures *tp) |
| |
| void | initialCondition (double *NOALIAS Q, const tarch::la::Vector< DIMENSIONS, double > &volumeCentre, const tarch::la::Vector< DIMENSIONS, double > &volumeH) override |
| |
| 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 | 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 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.
|
| |
| 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 |
| |
|
| 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 implementation into the header.
|
| |
| 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 implementation into the header.
|
| |
| 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 implementation into the header.
|
| |
Definition at line 30 of file CCZ4.h.
| static GPU_CALLABLE_METHOD double benchmarks::exahype2::ccz4::CCZ4::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 | ) |
|
static |
To obtain the best performance, I recommend to man inline command to this signature and to copy the implementation into the header.
So it would read
static inline double maxEigenvalue( ... ) { code here }
The GPU offloading requires static functions. As we cannot overload the original (virtual) function with a static alternative, we do the TBB trick and overload by adding an additional enum. It has no semantics but helps the compiler to distinguish the different function variants.
Definition at line 193 of file CCZ4.h.
| static GPU_CALLABLE_METHOD void benchmarks::exahype2::ccz4::CCZ4::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 | ) |
|
static |
To obtain the best performance, I recommend to man inline command to this signature and to copy the implementation into the header.
So it would read
static inline void nonconservativeProduct( ... ) { code here }
The GPU offloading requires static functions. As we cannot overload the original (virtual) function with a static alternative, we do the TBB trick and overload by adding an additional enum. It has no semantics but helps the compiler to distinguish the different function variants.
| exahype2::RefinementCommand benchmarks::exahype2::ccz4::CCZ4::refinementCriterion |
( |
const double *NOALIAS | Q, |
|
|
const tarch::la::Vector< DIMENSIONS, double > & | volumeCentre, |
|
|
const tarch::la::Vector< DIMENSIONS, double > & | volumeH, |
|
|
double | t ) |
|
override |
Refinement criterion.
Single black hole, low refinement (CCZ4ReSwi==2)
Single black hole (CCZ4ReSwi==6)
Single black hole setup with two refinement levels such that the finest volume is the same size as it is in the regular grid tests. We use two level of refinement which arrange around the area of interest. Within the innermost radius of 3.5, we enforce a mesh size of 0.04, while we have a compute cell size of at least 0.15 within the radius of 5. For everything futher away than 5 from the centre, we stick to the maximum mesh size.
We use the setup with
python3 ccz4.py -impl fd4-rk1-adaptive -s two-punctures -maxh 0.4 -minh 0.04 -ps 6 -plt 0.5 -et 0.5 -exn test --domain_r 9.0 --ReSwi 7 -cfl 0.1 -outdir ./ --KOSigma 8.0
in standard benchmarks.
Alternative settings would have been
double Radius[NumberOfRefinementLayers] = {5.0, 3.0};
double MaxH[NumberOfRefinementLayers] = {0.3, 0.15};
- Parameters
-
| Q | This is the (current) solution. The data is not set to a valid value throughout grid construction. That is: If t equals 0.0, you cannot assume that Q is properly initialised. Therefore, Q usually is only evaluated by dynamic AMR codes which make the solution follow |
Definition at line 69 of file CCZ4.cpp.
| static GPU_CALLABLE_METHOD void benchmarks::exahype2::ccz4::CCZ4::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 | ) |
|
static |
To obtain the best performance, I recommend to man inline command to this signature and to copy the implementation into the header.
So it would read
static inline void sourceTerm( ... ) { code here }
The GPU offloading requires static functions. As we cannot overload the original (virtual) function with a static alternative, we do the TBB trick and overload by adding an additional enum. It has no semantics but helps the compiler to distinguish the different function variants.
Definition at line 166 of file CCZ4.h.
References applications::exahype2::ccz4::source().