|
template<class QInEnumeratorType , class QOutEnumeratorType > |
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 |
|
template<class QOutEnumeratorType > |
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.
|
|
template<class QInEnumeratorType , class QOutEnumeratorType > |
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.
|
|
template<typename Solver , class QInEnumeratorType , class QOutEnumeratorType > |
static void | addAlgebraicSourceTerm_LoopBody (const double *__restrict__ QIn, const QInEnumeratorType &QInEnumerator, 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 |
| Overloaded version which uses static invocation instead of a functor.
|
|
template<typename Solver > |
static void | addAlgebraicSourceTerm_LoopBody (const double *__restrict__ QIn, const exahype2::enumerator::AoSLexicographicEnumerator &QInEnumerator, 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 exahype2::enumerator::AoSLexicographicEnumerator &QOutEnumerator) InlineMethod |
| Specialised version.
|
|
template<class QOutEnumeratorType > |
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 |
|
template<> |
double | reduceMaxEigenvalue_LoopBody (const double *__restrict__ QOut, const exahype2::enumerator::AoSLexicographicEnumerator &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 |
| Specialisation without the gather.
|
|
template<typename Solver , class QOutEnumeratorType > |
static double | reduceMaxEigenvalue_LoopBody (const double *__restrict__ QOut, const QOutEnumeratorType &QOutEnumerator, 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 |
| Overloaded version with static function calls.
|
|
template<typename Solver > |
static double | reduceMaxEigenvalue_LoopBody (const double *__restrict__ QOut, const exahype2::enumerator::AoSLexicographicEnumerator &QOutEnumerator, 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 |
| Overloaded version with static function calls.
|
|
template<class QInEnumeratorType , class QOutEnumeratorType >
static void exahype2::fd::internal::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 ) |
|
static |
Copy previous solution over into new time step and add source term.
This is the first step of the method of line, where we basically copy \( Q^{(old)} \) into \( Q^{(new)} \). In the same sweep, we also add the algebraic source term subject to the time step size:
\( Q^{(new)} = Q^{(old)} + \Delta t \cdot S(Q^{(old)}) \)
We reiterate that Q holds two types of entries: The actual data subject to the PDE (and algebraic and differential source terms) and arbitrary auxiliary variables per volume that the user has specified. Auxiliary parameters are coupling terms, material parameters, helper variables that you use to compute some metrics, ... They are not evolved as part of the PDE. As the source term affects only the PDE variables, we copy these entries in Q over and add the source term contribution, while the auxilibary parameters remain plain copies.
No SIMD declaration here, as we can't SIMDise over functors anyway.
- See also
- copySolution_LoopBody() for vectorisation details.
Referenced by exahype2::fd::fd4::timeStep_patchwise_heap_functors().