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