24 int numberOfGridCellsPerPatchPerAxis,
27 int auxiliaryVariables,
32 #if defined(SharedOMP) and ((!defined(__INTEL_LLVM_COMPILER) and !defined(__clang__) and !defined(__GNUC__)) or !defined(GPUOffloadingOMP))
33 #pragma omp declare simd
35 #if defined(GPUOffloadingOMP)
36 #pragma omp declare target
38 template <
class QInEnumeratorType,
class QOutEnumeratorType>
40 const double* __restrict__ QIn,
41 const QInEnumeratorType& QInEnumerator,
45 double* __restrict__ QOut,
46 const QOutEnumeratorType& QOutEnumerator
48 #if defined(GPUOffloadingOMP)
49 #pragma omp end declare target
55 #if defined(SharedOMP) and ((!defined(__INTEL_LLVM_COMPILER) and !defined(__clang__) and !defined(__GNUC__)) or !defined(GPUOffloadingOMP))
56 #pragma omp declare simd
58 #if defined(GPUOffloadingOMP)
59 #pragma omp declare target
61 template <
class QOutEnumeratorType>
66 double* __restrict__ QOut,
67 const QOutEnumeratorType& QOutEnumerator
69 #if defined(GPUOffloadingOMP)
70 #pragma omp end declare target
95 template <
class QInEnumeratorType,
class QOutEnumeratorType>
97 const double* __restrict__ QIn,
98 const QInEnumeratorType& QInEnumerator,
106 double* __restrict__ QOut,
107 const QOutEnumeratorType& QOutEnumerator
114 template <
typename Solver,
class QInEnumeratorType,
class QOutEnumeratorType>
116 const double* __restrict__ QIn,
117 const QInEnumeratorType& QInEnumerator,
124 double* __restrict__ QOut,
125 const QOutEnumeratorType& QOutEnumerator
131 template <
typename Solver>
133 const double* __restrict__ QIn,
141 double* __restrict__ QOut,
145 template <
class QOutEnumeratorType>
147 const double* __restrict__ QOut,
148 const QOutEnumeratorType& QOutEnumerator,
163 const double* __restrict__ QOut,
177 template <
typename Solver,
class QOutEnumeratorType>
179 const double* __restrict__ QOut,
180 const QOutEnumeratorType& QOutEnumerator,
192 template <
typename Solver>
194 const double* __restrict__ QOut,
207#include "LoopBody.cpph"
static void copySolution_LoopBody(const double *__restrict__ QIn, const QInEnumeratorType &QInEnumerator, int patchIndex, const tarch::la::Vector< Dimensions, int > &volumeIndex, int unknown, double *__restrict__ QOut, const QOutEnumeratorType &QOutEnumerator) InlineMethod
static void addAlgebraicSourceTerm_LoopBody(const double *__restrict__ QIn, const QInEnumeratorType &QInEnumerator, exahype2::fd::Source AlgebraicSource, const tarch::la::Vector< Dimensions, double > &patchCentre, const tarch::la::Vector< Dimensions, double > &patchSize, int patchIndex, const tarch::la::Vector< Dimensions, int > &volumeIndex, double t, double dt, double *__restrict__ QOut, const QOutEnumeratorType &QOutEnumerator) InlineMethod
Copy previous solution over into new time step and add source term.
static void clearSolution_LoopBody(int patchIndex, const tarch::la::Vector< Dimensions, int > &volumeIndex, int unknown, double *__restrict__ QOut, const QOutEnumeratorType &QOutEnumerator) InlineMethod
The complicated way to write =0.
static double reduceMaxEigenvalue_LoopBody(const double *__restrict__ QOut, const QOutEnumeratorType &QOutEnumerator, exahype2::fd::MaxEigenvalue maxEigenvalue, const tarch::la::Vector< Dimensions, double > &patchCentre, const tarch::la::Vector< Dimensions, double > &patchSize, int patchIndex, const tarch::la::Vector< Dimensions, int > &volumeIndex, double t, double dt) InlineMethod
std::function< void(const double *__restrict__ Q, const tarch::la::Vector< Dimensions, double > &gridCellX, const tarch::la::Vector< Dimensions, double > &gridCellH, double t, double dt, double *__restrict__ AlgeSrc) Source)
void reduceMaxEigenvalue_patchwise_functors(::exahype2::CellData< double, double > &patchData, int numberOfGridCellsPerPatchPerAxis, int overlap, int unknowns, int auxiliaryVariables, MaxEigenvalue maxEigenvalue)
constexpr int PickAllEntriesFromOutputVector
std::function< void(const double *__restrict__ Q, const tarch::la::Vector< Dimensions, double > &gridCellX, const tarch::la::Vector< Dimensions, double > &gridCellH, double t, double dt, int normal, double *__restrict__ maxEigen) MaxEigenvalue)
The max eigenvalue is used if and only if you have adaptive time stepping.
This file is part of the multigrid project within Peano 4.
auto volumeIndex(Args... args)
Representation of a number of cells which contains all information that's required to process the sto...
Array of struct enumerator.
#define InlineMethod
Generic identifier for inlined functions.