Peano
Loading...
Searching...
No Matches
exahype2::fv::rusanov Namespace Reference

Namespaces

namespace  cpp
 
namespace  internal
 
namespace  loopbodies
 
namespace  omp
 
namespace  sycl
 
namespace  tests
 

Typedefs

typedef std::function< void(const double *__restrict__ Q, const tarch::la::Vector< Dimensions, double > &x, const tarch::la::Vector< Dimensions, double > &h, double t, double dt, double *__restrict__ S) SourceFunctor)
 
typedef std::function< void(const double *__restrict__ Q, const tarch::la::Vector< Dimensions, double > &x, const tarch::la::Vector< Dimensions, double > &h, double t, double dt, int normal, double *__restrict__ F) FluxFunctor)
 
typedef std::function< void(const double *__restrict__ Q, const double *__restrict__ deltaQ, const tarch::la::Vector< Dimensions, double > &x, const tarch::la::Vector< Dimensions, double > &h, double t, double dt, int normal, double *__restrict__ BTimesDeltaQ) NonconservativeProductFunctor)
 
typedef std::function< double(const double *__restrict__ Q, const tarch::la::Vector< Dimensions, double > &x, const tarch::la::Vector< Dimensions, double > &h, double t, double dt, int normal) MaxEigenvalueFunctor)
 

Functions

template<int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep, class TempDataEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void timeStepWithRusanovPatchwiseHeapFunctors (CellData< double, double > &patchData, const FluxFunctor &fluxFunctor, const NonconservativeProductFunctor &nonconservativeProductFunctor, const SourceFunctor &sourceFunctor, const MaxEigenvalueFunctor &maxEigenvalueFunctor, tarch::timing::Measurement &measurement, peano4::utils::LoopPlacement loopParallelism=peano4::utils::LoopPlacement::Serial) InlineMethod
 Apply the Rusanov Riemann solver over a set of patches.
 
template<int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep, class TempDataEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void timeStepWithRusanovPatchwiseHeapFunctors (CellData< double, double > &patchData, const FluxFunctor &fluxFunctor, const NonconservativeProductFunctor &nonconservativeProductFunctor, const SourceFunctor &sourceFunctor, const MaxEigenvalueFunctor &maxEigenvalueFunctor, peano4::utils::LoopPlacement loopParallelism=peano4::utils::LoopPlacement::Serial) InlineMethod
 
template<int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep, class TempDataEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void timeStepWithRusanovBatchedHeapFunctors (CellData< double, double > &patchData, const FluxFunctor &fluxFunctor, const NonconservativeProductFunctor &nonconservativeProductFunctor, const SourceFunctor &sourceFunctor, const MaxEigenvalueFunctor &maxEigenvalueFunctor, tarch::timing::Measurement &measurement, peano4::utils::LoopPlacement loopParallelism=peano4::utils::LoopPlacement::Serial) InlineMethod
 
template<int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep, class TempDataEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void timeStepWithRusanovBatchedHeapFunctors (CellData< double, double > &patchData, const FluxFunctor &fluxFunctor, const NonconservativeProductFunctor &nonconservativeProductFunctor, const SourceFunctor &sourceFunctor, const MaxEigenvalueFunctor &maxEigenvalueFunctor, peano4::utils::LoopPlacement loopParallelism=peano4::utils::LoopPlacement::Serial) InlineMethod
 
template<int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep, class TempDataEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void timeStepWithRusanovVolumewiseFunctors (CellData< double, double > &patchData, const FluxFunctor &fluxFunctor, const NonconservativeProductFunctor &nonconservativeProductFunctor, const SourceFunctor &sourceFunctor, const MaxEigenvalueFunctor &maxEigenvalueFunctor, tarch::timing::Measurement &measurement, peano4::utils::LoopPlacement loopParallelism=peano4::utils::LoopPlacement::Serial) InlineMethod
 
template<int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep, class TempDataEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void timeStepWithRusanovVolumewiseFunctors (CellData< double, double > &patchData, const FluxFunctor &fluxFunctor, const NonconservativeProductFunctor &nonconservativeProductFunctor, const SourceFunctor &sourceFunctor, const MaxEigenvalueFunctor &maxEigenvalueFunctor, peano4::utils::LoopPlacement loopParallelism=peano4::utils::LoopPlacement::Serial) InlineMethod
 
template<class SolverType , int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep, class TempDataEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void timeStepWithRusanovPatchwiseCallStackStateless (CellData< double, double > &patchData, tarch::timing::Measurement &measurement, peano4::utils::LoopPlacement loopParallelism=peano4::utils::LoopPlacement::Serial) InlineMethod
 
template<class SolverType , int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep, class TempDataEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void timeStepWithRusanovPatchwiseCallStackStateless (CellData< double, double > &patchData, peano4::utils::LoopPlacement loopParallelism=peano4::utils::LoopPlacement::Serial) InlineMethod
 
template<class SolverType , int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep, class TempDataEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void timeStepWithRusanovPatchwiseHeapStateless (CellData< double, double > &patchData, tarch::timing::Measurement &measurement, peano4::utils::LoopPlacement loopParallelism=peano4::utils::LoopPlacement::Serial) InlineMethod
 
template<class SolverType , int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep, class TempDataEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void timeStepWithRusanovPatchwiseHeapStateless (CellData< double, double > &patchData, peano4::utils::LoopPlacement loopParallelism=peano4::utils::LoopPlacement::Serial) InlineMethod
 
template<class SolverType , int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep>
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void timeStepWithRusanovPatchwiseInsituStateless (CellData< double, double > &patchData, tarch::timing::Measurement &measurement, peano4::utils::LoopPlacement loopParallelism=peano4::utils::LoopPlacement::Serial) InlineMethod
 
template<class SolverType , int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep>
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void timeStepWithRusanovPatchwiseInsituStateless (CellData< double, double > &patchData, peano4::utils::LoopPlacement loopParallelism=peano4::utils::LoopPlacement::Serial) InlineMethod
 
template<class SolverType , int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep>
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void timeStepWithRusanovBatchedInsituStateless (CellData< double, double > &patchData, tarch::timing::Measurement &measurement, peano4::utils::LoopPlacement loopParallelism=peano4::utils::LoopPlacement::Serial) InlineMethod
 
template<class SolverType , int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep>
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void timeStepWithRusanovBatchedInsituStateless (CellData< double, double > &patchData, peano4::utils::LoopPlacement loopParallelism=peano4::utils::LoopPlacement::Serial) InlineMethod
 
template<class SolverType , int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep, class TempDataEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void timeStepWithRusanovBatchedCallStackStateless (CellData< double, double > &patchData, tarch::timing::Measurement &measurement, peano4::utils::LoopPlacement loopParallelism=peano4::utils::LoopPlacement::Serial) InlineMethod
 
template<class SolverType , int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep, class TempDataEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void timeStepWithRusanovBatchedCallStackStateless (CellData< double, double > &patchData, peano4::utils::LoopPlacement loopParallelism=peano4::utils::LoopPlacement::Serial) InlineMethod
 
template<class SolverType , int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep, class TempDataEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void timeStepWithRusanovBatchedHeapStateless (::exahype2::CellData< double, double > &patchData, tarch::timing::Measurement &measurement, peano4::utils::LoopPlacement loopParallelism=peano4::utils::LoopPlacement::Serial) InlineMethod
 
template<class SolverType , int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep, class TempDataEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void timeStepWithRusanovBatchedHeapStateless (::exahype2::CellData< double, double > &patchData, peano4::utils::LoopPlacement loopParallelism=peano4::utils::LoopPlacement::Serial) InlineMethod
 
template<class SolverType , int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep, class TempDataEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void timeStepWithRusanovVolumewiseStateless (::exahype2::CellData< double, double > &patchData, tarch::timing::Measurement &measurement, peano4::utils::LoopPlacement loopParallelism=peano4::utils::LoopPlacement::Serial) InlineMethod
 
template<class SolverType , int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep, class TempDataEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void timeStepWithRusanovVolumewiseStateless (::exahype2::CellData< double, double > &patchData, peano4::utils::LoopPlacement loopParallelism=peano4::utils::LoopPlacement::Serial) InlineMethod
 

Typedef Documentation

◆ FluxFunctor

typedef std::function<void( const double* __restrict__ Q, const tarch::la::Vector<Dimensions, double>& x, const tarch::la::Vector<Dimensions, double>& h, double t, double dt, int normal, double* __restrict__ F ) exahype2::fv::rusanov::FluxFunctor)

Definition at line 26 of file Functors.h.

◆ MaxEigenvalueFunctor

typedef std::function< double(const double* __restrict__ Q, const tarch::la::Vector<Dimensions, double>& x, const tarch::la::Vector<Dimensions, double>& h, double t, double dt, int normal) exahype2::fv::rusanov::MaxEigenvalueFunctor)

Definition at line 44 of file Functors.h.

◆ NonconservativeProductFunctor

typedef std::function<void( const double* __restrict__ Q, const double* __restrict__ deltaQ, const tarch::la::Vector<Dimensions, double>& x, const tarch::la::Vector<Dimensions, double>& h, double t, double dt, int normal, double* __restrict__ BTimesDeltaQ ) exahype2::fv::rusanov::NonconservativeProductFunctor)

Definition at line 39 of file Functors.h.

◆ SourceFunctor

typedef std::function< void(const double* __restrict__ Q, const tarch::la::Vector<Dimensions, double>& x, const tarch::la::Vector<Dimensions, double>& h, double t, double dt, double* __restrict__ S) exahype2::fv::rusanov::SourceFunctor)

Definition at line 14 of file Functors.h.

Function Documentation

◆ timeStepWithRusanovBatchedCallStackStateless() [1/2]

template<class SolverType , int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep, class TempDataEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void exahype2::fv::rusanov::timeStepWithRusanovBatchedCallStackStateless ( CellData< double, double > & patchData,
peano4::utils::LoopPlacement loopParallelism = peano4::utils::LoopPlacement::Serial )

◆ timeStepWithRusanovBatchedCallStackStateless() [2/2]

template<class SolverType , int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep, class TempDataEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void exahype2::fv::rusanov::timeStepWithRusanovBatchedCallStackStateless ( CellData< double, double > & patchData,
tarch::timing::Measurement & measurement,
peano4::utils::LoopPlacement loopParallelism = peano4::utils::LoopPlacement::Serial )

◆ timeStepWithRusanovBatchedHeapFunctors() [1/2]

template<int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep, class TempDataEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void exahype2::fv::rusanov::timeStepWithRusanovBatchedHeapFunctors ( CellData< double, double > & patchData,
const FluxFunctor & fluxFunctor,
const NonconservativeProductFunctor & nonconservativeProductFunctor,
const SourceFunctor & sourceFunctor,
const MaxEigenvalueFunctor & maxEigenvalueFunctor,
peano4::utils::LoopPlacement loopParallelism = peano4::utils::LoopPlacement::Serial )

◆ timeStepWithRusanovBatchedHeapFunctors() [2/2]

template<int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep, class TempDataEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void exahype2::fv::rusanov::timeStepWithRusanovBatchedHeapFunctors ( CellData< double, double > & patchData,
const FluxFunctor & fluxFunctor,
const NonconservativeProductFunctor & nonconservativeProductFunctor,
const SourceFunctor & sourceFunctor,
const MaxEigenvalueFunctor & maxEigenvalueFunctor,
tarch::timing::Measurement & measurement,
peano4::utils::LoopPlacement loopParallelism = peano4::utils::LoopPlacement::Serial )
See also
timeStepWithRusanovPatchwiseHeapFunctors()

Referenced by wrapBatchedHeapFunctorHostKernels().

Here is the caller graph for this function:

◆ timeStepWithRusanovBatchedHeapStateless() [1/2]

template<class SolverType , int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep, class TempDataEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void exahype2::fv::rusanov::timeStepWithRusanovBatchedHeapStateless ( ::exahype2::CellData< double, double > & patchData,
peano4::utils::LoopPlacement loopParallelism = peano4::utils::LoopPlacement::Serial )

◆ timeStepWithRusanovBatchedHeapStateless() [2/2]

template<class SolverType , int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep, class TempDataEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void exahype2::fv::rusanov::timeStepWithRusanovBatchedHeapStateless ( ::exahype2::CellData< double, double > & patchData,
tarch::timing::Measurement & measurement,
peano4::utils::LoopPlacement loopParallelism = peano4::utils::LoopPlacement::Serial )

Referenced by runBenchmarks().

Here is the caller graph for this function:

◆ timeStepWithRusanovBatchedInsituStateless() [1/2]

template<class SolverType , int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep>
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void exahype2::fv::rusanov::timeStepWithRusanovBatchedInsituStateless ( CellData< double, double > & patchData,
peano4::utils::LoopPlacement loopParallelism = peano4::utils::LoopPlacement::Serial )

◆ timeStepWithRusanovBatchedInsituStateless() [2/2]

template<class SolverType , int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep>
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void exahype2::fv::rusanov::timeStepWithRusanovBatchedInsituStateless ( CellData< double, double > & patchData,
tarch::timing::Measurement & measurement,
peano4::utils::LoopPlacement loopParallelism = peano4::utils::LoopPlacement::Serial )

Referenced by runBenchmarks().

Here is the caller graph for this function:

◆ timeStepWithRusanovPatchwiseCallStackStateless() [1/2]

template<class SolverType , int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep, class TempDataEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void exahype2::fv::rusanov::timeStepWithRusanovPatchwiseCallStackStateless ( CellData< double, double > & patchData,
peano4::utils::LoopPlacement loopParallelism = peano4::utils::LoopPlacement::Serial )

◆ timeStepWithRusanovPatchwiseCallStackStateless() [2/2]

template<class SolverType , int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep, class TempDataEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void exahype2::fv::rusanov::timeStepWithRusanovPatchwiseCallStackStateless ( CellData< double, double > & patchData,
tarch::timing::Measurement & measurement,
peano4::utils::LoopPlacement loopParallelism = peano4::utils::LoopPlacement::Serial )

◆ timeStepWithRusanovPatchwiseHeapFunctors() [1/2]

template<int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep, class TempDataEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void exahype2::fv::rusanov::timeStepWithRusanovPatchwiseHeapFunctors ( CellData< double, double > & patchData,
const FluxFunctor & fluxFunctor,
const NonconservativeProductFunctor & nonconservativeProductFunctor,
const SourceFunctor & sourceFunctor,
const MaxEigenvalueFunctor & maxEigenvalueFunctor,
peano4::utils::LoopPlacement loopParallelism = peano4::utils::LoopPlacement::Serial )

◆ timeStepWithRusanovPatchwiseHeapFunctors() [2/2]

template<int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep, class TempDataEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void exahype2::fv::rusanov::timeStepWithRusanovPatchwiseHeapFunctors ( CellData< double, double > & patchData,
const FluxFunctor & fluxFunctor,
const NonconservativeProductFunctor & nonconservativeProductFunctor,
const SourceFunctor & sourceFunctor,
const MaxEigenvalueFunctor & maxEigenvalueFunctor,
tarch::timing::Measurement & measurement,
peano4::utils::LoopPlacement loopParallelism = peano4::utils::LoopPlacement::Serial )

Apply the Rusanov Riemann solver over a set of patches.

Here's the explanation of the implementation details marked via _subscript:

_patchwise: This solver runs through the individual patches one by one. All the operations on patch 0 are completed, then we trigger all steps on patch 1, and so forth.

_batched: We run through the individual steps of the finite volume update, and in each step we complete the work on all the patches handed in.

There are two variants of the kernels: One that accepts a functor, and one that works with the solver object and involves the static (stateless) PDE term variants. Both are annotated with Otter pragmas, so you can find out how much parallelism there is.

Implementation details (signatures)

The function is marked as stateless and put into a header file. I still want to separate the declaration from the definition, so the actual implementation is in a file with the extension cpph. This indicates that it should (logically) be in a cpp file, but to allow the compiler to inline aggressively, it has to be in the header.

Please study the comments on the namespace loopbodies (hosted in LoopBodies.h) for further details why certain code parts are written the way they are written. The punchline is that the routines here host the loops, but the actual loop bodies then are separated into routines of their own. We inline them aggressively, so that doesn't come at additional cost. This way, we can re-use the same loop body within different loop implementations, orderings, etc.

Vectorisation

Most of the time, I discuss within the individual loop bodies how to vectorise and what things have to be taken into account. That is, the knowledge around optimisation is documented with the corresponding loop bodies. There is one exception:

If I evaluate the fluxes, I have to take into account that diagonal volumes don't hold valid data. After all, we only use split or face-normal fluxes, but do not support transversal waves. So we should mask out those diagonal volumes and should not compute anything on them. Indeed, some applications use assertions to ensure that their user functions are not invoked on uninitialised data and then fail. Unfortunately, such a mask stops the vectoriser from doing its job, as the control flow simply becomes too complicated. So I enable the masking if and only if I am not in release mode.

Memory management

See ::exahype2::CellData() for details

Headers vs. implementation files

This should be a proper routine (and thus not static). But I decided to make it consistent with the templates for the static evaluation and to move the routine into the header, too. The advantage is that the compiler now cans inline routines straightforwardly without any ipo.

Next, all the integers and booleans are known. So, once inlined, the compiler can trivialise the compute kernel and perform vectorisation et al even though we have functors which can not trivially be inlined and optimised.

Referenced by wrapPatchwiseHeapFunctorsHostKernel().

Here is the caller graph for this function:

◆ timeStepWithRusanovPatchwiseHeapStateless() [1/2]

template<class SolverType , int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep, class TempDataEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void exahype2::fv::rusanov::timeStepWithRusanovPatchwiseHeapStateless ( CellData< double, double > & patchData,
peano4::utils::LoopPlacement loopParallelism = peano4::utils::LoopPlacement::Serial )

◆ timeStepWithRusanovPatchwiseHeapStateless() [2/2]

template<class SolverType , int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep, class TempDataEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void exahype2::fv::rusanov::timeStepWithRusanovPatchwiseHeapStateless ( CellData< double, double > & patchData,
tarch::timing::Measurement & measurement,
peano4::utils::LoopPlacement loopParallelism = peano4::utils::LoopPlacement::Serial )

Referenced by runBenchmarks().

Here is the caller graph for this function:

◆ timeStepWithRusanovPatchwiseInsituStateless() [1/2]

template<class SolverType , int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep>
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void exahype2::fv::rusanov::timeStepWithRusanovPatchwiseInsituStateless ( CellData< double, double > & patchData,
peano4::utils::LoopPlacement loopParallelism = peano4::utils::LoopPlacement::Serial )

◆ timeStepWithRusanovPatchwiseInsituStateless() [2/2]

template<class SolverType , int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep>
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void exahype2::fv::rusanov::timeStepWithRusanovPatchwiseInsituStateless ( CellData< double, double > & patchData,
tarch::timing::Measurement & measurement,
peano4::utils::LoopPlacement loopParallelism = peano4::utils::LoopPlacement::Serial )

Referenced by runBenchmarks().

Here is the caller graph for this function:

◆ timeStepWithRusanovVolumewiseFunctors() [1/2]

template<int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep, class TempDataEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void exahype2::fv::rusanov::timeStepWithRusanovVolumewiseFunctors ( CellData< double, double > & patchData,
const FluxFunctor & fluxFunctor,
const NonconservativeProductFunctor & nonconservativeProductFunctor,
const SourceFunctor & sourceFunctor,
const MaxEigenvalueFunctor & maxEigenvalueFunctor,
peano4::utils::LoopPlacement loopParallelism = peano4::utils::LoopPlacement::Serial )

◆ timeStepWithRusanovVolumewiseFunctors() [2/2]

template<int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep, class TempDataEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void exahype2::fv::rusanov::timeStepWithRusanovVolumewiseFunctors ( CellData< double, double > & patchData,
const FluxFunctor & fluxFunctor,
const NonconservativeProductFunctor & nonconservativeProductFunctor,
const SourceFunctor & sourceFunctor,
const MaxEigenvalueFunctor & maxEigenvalueFunctor,
tarch::timing::Measurement & measurement,
peano4::utils::LoopPlacement loopParallelism = peano4::utils::LoopPlacement::Serial )
See also
timeStepWithRusanovPatchwiseHeapFunctors()

Referenced by wrapVolumewiseFunctorHostKernels().

Here is the caller graph for this function:

◆ timeStepWithRusanovVolumewiseStateless() [1/2]

◆ timeStepWithRusanovVolumewiseStateless() [2/2]

template<class SolverType , int NumberOfVolumesPerAxisInPatch, int HaloSize, int NumberOfUnknowns, int NumberOfAuxiliaryVariables, bool EvaluateFlux, bool EvaluateNonconservativeProduct, bool EvaluateSource, bool EvaluateMaximumEigenvalueAfterTimeStep, class TempDataEnumeratorType >
KeywordToAvoidDuplicateSymbolsForInlinedFunctions void exahype2::fv::rusanov::timeStepWithRusanovVolumewiseStateless ( ::exahype2::CellData< double, double > & patchData,
tarch::timing::Measurement & measurement,
peano4::utils::LoopPlacement loopParallelism = peano4::utils::LoopPlacement::Serial )

Referenced by runBenchmarks().

Here is the caller graph for this function: