Peano
Loading...
Searching...
No Matches
exahype2::fd::internal Namespace Reference

Functions

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.
 

Function Documentation

◆ addAlgebraicSourceTerm_LoopBody() [1/3]

template<typename Solver >
static void exahype2::fd::internal::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 )
static

Specialised version.

◆ addAlgebraicSourceTerm_LoopBody() [2/3]

template<typename Solver , class QInEnumeratorType , class QOutEnumeratorType >
static void exahype2::fd::internal::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 )
static

Overloaded version which uses static invocation instead of a functor.

◆ addAlgebraicSourceTerm_LoopBody() [3/3]

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().

Here is the caller graph for this function:

◆ clearSolution_LoopBody()

template<class QOutEnumeratorType >
static void exahype2::fd::internal::clearSolution_LoopBody ( int patchIndex,
const tarch::la::Vector< Dimensions, int > & volumeIndex,
int unknown,
double *__restrict__ QOut,
const QOutEnumeratorType & QOutEnumerator )
static

◆ copySolution_LoopBody()

template<class QInEnumeratorType , class QOutEnumeratorType >
static void exahype2::fd::internal::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 )
static

◆ reduceMaxEigenvalue_LoopBody() [1/4]

template<typename Solver >
static double exahype2::fd::internal::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 )
static

Overloaded version with static function calls.

◆ reduceMaxEigenvalue_LoopBody() [2/4]

template<>
double exahype2::fd::internal::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 )

Specialisation without the gather.

Definition at line 38 of file LoopBody.cpp.

References exahype2::enumerator::AoSLexicographicEnumerator::_numberOfDoFsPerAxisInCell, exahype2::fd::getGridCellCentre(), exahype2::fd::getGridCellSize(), and exahype2::volumeIndex().

Here is the call graph for this function:

◆ reduceMaxEigenvalue_LoopBody() [3/4]

template<typename Solver , class QOutEnumeratorType >
static double exahype2::fd::internal::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 )
static

Overloaded version with static function calls.

◆ reduceMaxEigenvalue_LoopBody() [4/4]

template<class QOutEnumeratorType >
static double exahype2::fd::internal::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 )
static

Referenced by exahype2::fd::reduceMaxEigenvalue_patchwise_functors().

Here is the caller graph for this function: