Peano
Loading...
Searching...
No Matches
LoopBodies.h File Reference
Include dependency graph for LoopBodies.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Namespaces

namespace  exahype2
 For the generic kernels that I use here most of the time.
 
namespace  exahype2::fv
 
namespace  exahype2::fv::rusanov
 
namespace  exahype2::fv::rusanov::loopbodies
 

Functions

template<class QInEnumeratorType , class QOutEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions GPUCallableInlineMethod void exahype2::fv::rusanov::loopbodies::copySolution (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
 Copy solution from QIn to QOut.
 
template<int NumberOfUnknowns, int NumberOfAuxiliaryVariables, class QInEnumeratorType , class QOutEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void exahype2::fv::rusanov::loopbodies::copySolutionAndAddSourceTerm (const double *__restrict__ QIn, const QInEnumeratorType &QInEnumerator, const SourceFunctor &sourceFunctor, 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<int NumberOfUnknowns, int NumberOfAuxiliaryVariables>
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void exahype2::fv::rusanov::loopbodies::copySolutionAndAddSourceTerm (const double *__restrict__ QIn, const enumerator::AoSLexicographicEnumerator &QInEnumerator, const SourceFunctor &sourceFunctor, 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 enumerator::AoSLexicographicEnumerator &QOutEnumerator) InlineMethod
 Specialisation of the other exahype2::fv::rusanov::loopbodies::copySolutionAndAddSourceTerm() which exploits knowledge that we do not have to gather input data, as the input data is delivered as AoS already.
 
template<class SolverType , class QInEnumeratorType , class QOutEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions GPUCallableInlineMethod void exahype2::fv::rusanov::loopbodies::copySolutionAndAddSourceTerm (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
 Specialisation invoking the static source variant via SolverType (for GPUs).
 
template<class SolverType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions GPUCallableInlineMethod void exahype2::fv::rusanov::loopbodies::copySolutionAndAddSourceTerm (const double *__restrict__ QIn, const 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 enumerator::AoSLexicographicEnumerator &QOutEnumerator) InlineMethod
 Specialisation invoking the static source variant via SolverType (for GPUs).
 
template<int NumberOfUnknowns, int NumberOfAuxiliaryVariables, class QInEnumeratorType , class MaxEigenvalueEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void exahype2::fv::rusanov::loopbodies::computeMaxEigenvalue (const double *__restrict__ QIn, const QInEnumeratorType &QInEnumerator, const MaxEigenvalueFunctor &maxEigenvalueFunctor, 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, int normal, double *__restrict__ maxEigenvalue, const MaxEigenvalueEnumeratorType &maxEigenvalueEnumerator) InlineMethod
 Compute maximum eigenvalue for one voxel in one direction.
 
template<int NumberOfUnknowns, int NumberOfAuxiliaryVariables>
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void exahype2::fv::rusanov::loopbodies::computeMaxEigenvalue (const double *__restrict__ QIn, const enumerator::AoSLexicographicEnumerator &QInEnumerator, const MaxEigenvalueFunctor &maxEigenvalueFunctor, 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, int normal, double *__restrict__ maxEigenvalue, const enumerator::AoSLexicographicEnumerator &maxEigenvalueEnumerator) InlineMethod
 Specialisation if input data is already in AoS format.
 
template<class SolverType , class QInEnumeratorType , class MaxEigenvalueEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions GPUCallableInlineMethod void exahype2::fv::rusanov::loopbodies::computeMaxEigenvalue (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, int normal, double *__restrict__ maxEigenvalue, const MaxEigenvalueEnumeratorType &maxEigenvalueEnumerator) InlineMethod
 Specialisation invoking the static eigenvalue variant (for GPUs).
 
template<class SolverType , class MaxEigenvalueEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions GPUCallableInlineMethod void exahype2::fv::rusanov::loopbodies::computeMaxEigenvalue (const double *__restrict__ QIn, const 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, int normal, double *__restrict__ maxEigenvalue, const MaxEigenvalueEnumeratorType &maxEigenvalueEnumerator) InlineMethod
 Specialisation for static eigenvalue call plus AoS input data.
 
template<int NumberOfUnknowns, int NumberOfAuxiliaryVariables, class QOutEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions double exahype2::fv::rusanov::loopbodies::reduceMaxEigenvalue (const double *__restrict__ QOut, const QOutEnumeratorType &QOutEnumerator, const MaxEigenvalueFunctor &maxEigenvalueFunctor, 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
 This is the actual eigenvalue loop which reduces the directional eigenvalues.
 
template<int NumberOfUnknowns, int NumberOfAuxiliaryVariables>
KeywordToAvoidDuplicateSymbolsForInlinedFunctions double exahype2::fv::rusanov::loopbodies::reduceMaxEigenvalue (const double *__restrict__ QOut, const enumerator::AoSLexicographicEnumerator &QOutEnumerator, const MaxEigenvalueFunctor &maxEigenvalueFunctor, 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 anticipating that the ordering of the output data will be AoS in almost all the cases.
 
template<class SolverType , class QOutEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions GPUCallableInlineMethod double exahype2::fv::rusanov::loopbodies::reduceMaxEigenvalue (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
 Specialised version for GPU.
 
template<class SolverType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions GPUCallableInlineMethod double exahype2::fv::rusanov::loopbodies::reduceMaxEigenvalue (const double *__restrict__ QOut, const 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
 Optimised version for the GPU which is furthermore optimised towards one specific unknown enumeration.
 
template<int NumberOfUnknowns, int NumberOfAuxiliaryVariables, class QInEnumeratorType , class FluxEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void exahype2::fv::rusanov::loopbodies::computeFlux (const double *__restrict__ QIn, const QInEnumeratorType &QInEnumerator, const FluxFunctor &fluxFunctor, 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, int normal, double *__restrict__ flux, const FluxEnumeratorType &fluxEnumerator) InlineMethod
 Compute the flux in one direction for a volume and store it.
 
template<int NumberOfUnknowns, int NumberOfAuxiliaryVariables>
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void exahype2::fv::rusanov::loopbodies::computeFlux (const double *__restrict__ QIn, const enumerator::AoSLexicographicEnumerator &QInEnumerator, const FluxFunctor &fluxFunctor, 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, int normal, double *__restrict__ flux, const enumerator::AoSLexicographicEnumerator &fluxEnumerator) InlineMethod
 
template<class SolverType , class QInEnumeratorType , class FluxEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions GPUCallableInlineMethod void exahype2::fv::rusanov::loopbodies::computeFlux (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, int normal, double *__restrict__ flux, const FluxEnumeratorType &fluxEnumerator) InlineMethod
 Specialisation invoking the static flux variant via SolverType (for GPUs).
 
template<class SolverType , class FluxEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions GPUCallableInlineMethod void exahype2::fv::rusanov::loopbodies::computeFlux (const double *__restrict__ QIn, const 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, int normal, double *__restrict__ flux, const FluxEnumeratorType &fluxEnumerator) InlineMethod
 
template<class SolverType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions GPUCallableInlineMethod void exahype2::fv::rusanov::loopbodies::computeFlux (const double *__restrict__ QIn, const 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, int normal, double *__restrict__ flux, const enumerator::AoSLexicographicEnumerator &fluxEnumerator) InlineMethod
 
template<class FluxEnumeratorType , class QOutEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions GPUCallableInlineMethod void exahype2::fv::rusanov::loopbodies::updateSolutionWithFlux (const double *__restrict__ tempFluxX, const double *__restrict__ tempFluxY, const double *__restrict__ tempFluxZ, const FluxEnumeratorType &fluxEnumerator, const ::tarch::la::Vector< Dimensions, double > &patchCentre, const ::tarch::la::Vector< Dimensions, double > &patchSize, int patchIndex, const ::tarch::la::Vector< Dimensions, int > &volumeIndex, int unknown, double dt, double *__restrict__ QOut, const QOutEnumeratorType &QOutEnumerator) InlineMethod
 Update one volume with the flux contribution.
 
template<class FluxEnumeratorType , class QOutEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions GPUCallableInlineMethod void exahype2::fv::rusanov::loopbodies::updateSolutionWithFlux (const double *__restrict__ fluxL, const double *__restrict__ fluxR, const FluxEnumeratorType &fluxEnumerator, const ::tarch::la::Vector< Dimensions, double > &patchCentre, const ::tarch::la::Vector< Dimensions, double > &patchSize, int patchIndex, const ::tarch::la::Vector< Dimensions, int > &volumeIndex, int unknown, double dt, int normal, double *__restrict__ QOut, const QOutEnumeratorType &QOutEnumerator) InlineMethod
 Constructs the average of the flux and adds it to the left and right neighbour cell with inverted sign.
 
template<class QInEnumeratorType , class MaxEigenvalueEnumeratorType , class QOutEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions GPUCallableInlineMethod void exahype2::fv::rusanov::loopbodies::updateSolutionWithEigenvalueDamping (const double *__restrict__ QIn, const QInEnumeratorType &QInEnumerator, const double *__restrict__ tempMaxEigenvalueX, const double *__restrict__ tempMaxEigenvalueY, const double *__restrict__ tempMaxEigenvalueZ, const MaxEigenvalueEnumeratorType &eigenvalueEnumerator, const ::tarch::la::Vector< Dimensions, double > &patchCentre, const ::tarch::la::Vector< Dimensions, double > &patchSize, int patchIndex, const ::tarch::la::Vector< Dimensions, int > &volumeIndex, int unknown, double dt, double *__restrict__ QOut, const QOutEnumeratorType &QOutEnumerator) InlineMethod
 Uses the eigenvalues to damp the solution update.
 
template<class QInEnumeratorType , class QOutEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions GPUCallableInlineMethod void exahype2::fv::rusanov::loopbodies::updateSolutionWithEigenvalueDamping (const double *__restrict__ QIn, const QInEnumeratorType &QInEnumerator, double maxEigenvalueL, double maxEigenvalueR, const ::tarch::la::Vector< Dimensions, double > &patchCentre, const ::tarch::la::Vector< Dimensions, double > &patchSize, int patchIndex, const ::tarch::la::Vector< Dimensions, int > &volumeIndex, int unknown, double dt, int normal, double *__restrict__ QOut, const QOutEnumeratorType &QOutEnumerator) InlineMethod
 Face-wise version of routine, i.e., it takes the eigenvalues and updates the left and right adjacent volume of it.
 
template<int NumberOfUnknowns, int NumberOfAuxiliaryVariables, class QInEnumeratorType , class NCPFaceEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void exahype2::fv::rusanov::loopbodies::computeNonconservativeFlux (const double *__restrict__ QIn, const QInEnumeratorType &QInEnumerator, const NonconservativeProductFunctor &ncpFunctor, 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, int normal, double *__restrict__ ncp, const NCPFaceEnumeratorType &ncpEnumerator) InlineMethod
 Compute non-conservative flux over one face along normal normal.
 
template<class SolverType , class QInEnumeratorType , class NCPFaceEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions GPUCallableInlineMethod void exahype2::fv::rusanov::loopbodies::computeNonconservativeFlux (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, int normal, double *__restrict__ ncp, const NCPFaceEnumeratorType &ncpEnumerator) InlineMethod
 Specialisation invoking the static NCP variant via SolverType (for GPUs).
 
template<class NCPFaceEnumeratorType , class QOutEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions GPUCallableInlineMethod void exahype2::fv::rusanov::loopbodies::updateSolutionWithNonconservativeFlux (const double *__restrict__ ncpX, const double *__restrict__ ncpY, const double *__restrict__ ncpZ, const NCPFaceEnumeratorType &ncpEnumerator, const ::tarch::la::Vector< Dimensions, double > &patchCentre, const ::tarch::la::Vector< Dimensions, double > &patchSize, int patchIndex, const ::tarch::la::Vector< Dimensions, int > &volumeIndex, int unknown, double dt, double *__restrict__ QOut, const QOutEnumeratorType &QOutEnumerator) InlineMethod
 Add the non-conservative flux contributions to one volume.
 
template<class NCPFaceEnumeratorType , class QOutEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions GPUCallableInlineMethod void exahype2::fv::rusanov::loopbodies::updateSolutionWithNonconservativeFlux (const double *__restrict__ ncp, const NCPFaceEnumeratorType &ncpEnumerator, const ::tarch::la::Vector< Dimensions, double > &patchCentre, const ::tarch::la::Vector< Dimensions, double > &patchSize, int patchIndex, const ::tarch::la::Vector< Dimensions, int > &faceIndex, int unknown, double dt, int normal, double *__restrict__ QOut, const QOutEnumeratorType &QOutEnumerator) InlineMethod
 Face-oriented flavour of NCP.