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

Functions

template<typename Solver, int numberOfGridCellsPerPatchPerAxis, int haloSize, int unknowns, int auxiliaryVariables, typename TempDataEnumerator>
static void timeStep_batched_static_calls (::exahype2::CellData< double, double > &patchData, double KOSigma, bool evaluateFlux, bool evaluateDifferentialSource, bool evaluateAlgebraicSource, bool copyOldTimeStepAndScaleWithTimeStepSize, DifferentialSourceTermVariant variant, const exahype2::enumerator::AoSLexicographicEnumerator &QInEnumerator, const exahype2::enumerator::AoSLexicographicEnumerator &QOutEnumerator, const TempDataEnumerator &fluxEnumerator, const TempDataEnumerator &differentialSourceEnumerator, const TempDataEnumerator &KODissipationEnumerator, double *tempFluxX, double *tempFluxY, double *tempFluxZ, double *tempDifferentialSourceX, double *tempDifferentialSourceY, double *tempDifferentialSourceZ, double *tempKODissipationX, double *tempKODissipationY, double *tempKODissipationZ)
template<typename Solver, int numberOfGridCellsPerPatchPerAxis, int haloSize, int unknowns, int auxiliaryVariables, typename TempDataEnumerator>
static void timeStep_patchwise_static_calls (::exahype2::CellData< double, double > &patchData, double KOSigma, bool evaluateFlux, bool evaluateDifferentialSource, bool evaluateAlgebraicSource, bool copyOldTimeStepAndScaleWithTimeStepSize, DifferentialSourceTermVariant variant, const exahype2::enumerator::AoSLexicographicEnumerator &QInEnumerator, const exahype2::enumerator::AoSLexicographicEnumerator &QOutEnumerator, const TempDataEnumerator &fluxEnumerator, const TempDataEnumerator &differentialSourceEnumerator, const TempDataEnumerator &KODissipationEnumerator, double *tempFluxX, double *tempFluxY, double *tempFluxZ, double *tempDifferentialSourceX, double *tempDifferentialSourceY, double *tempDifferentialSourceZ, double *tempKODissipationX, double *tempKODissipationY, double *tempKODissipationZ)
template<class QInEnumeratorType, class QOutEnumeratorType>
static void computeAuxiliaryVariables_LoopBody (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, int normal, const QOutEnumeratorType &QOutEnumerator) InlineMethod
template<class QInEnumeratorType, class QOutEnumeratorType>
static void computeDifferentialSourceTerm_LoopBody (const double *__restrict__ QIn, const QInEnumeratorType &QInEnumerator, exahype2::fd::NonconservativeProduct DifferentialSource, 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__ QDiffSrc, const QOutEnumeratorType &QDiffSrcEnumerator, DifferentialSourceTermVariant variant) InlineMethod
 This function calculates the source term that involves B_i\nabla_iQ where i is the spatial dimension.
template<typename Solver, class QInEnumeratorType, class QOutEnumeratorType>
static void computeDifferentialSourceTerm_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, int normal, double *__restrict__ QDiffSrc, const QOutEnumeratorType &QDiffSrcEnumerator, DifferentialSourceTermVariant variant) InlineMethod
 Overlaoded version with static calls.
template<typename QOutEnumeratorType>
static void updateSolutionWithDifferentialSourceTerm_LoopBody (const double *__restrict__ QDiffSrcX, const double *__restrict__ QDiffSrcY, const double *__restrict__ QDiffSrcZ, const QOutEnumeratorType &QDiffSrcEnumerator, 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
template<class QInEnumeratorType, class QOutEnumeratorType>
static void computeKreissOligerDissipationTerm_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, int normal, double *__restrict__ QKODsp, const QOutEnumeratorType &QKODspEnumerator) InlineMethod
template<typename QOutEnumeratorType>
static void updateSolutionWithKODissipationTerm_LoopBody (const double KOSigma, const double *__restrict__ QKODspX, const double *__restrict__ QKODspY, const double *__restrict__ QKODspZ, const QOutEnumeratorType &QKODspEnumerator, 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
template<class QInEnumeratorType, class QOutEnumeratorType>
static void computeFlux_LoopBody (const double *__restrict__ QIn, const QInEnumeratorType &QInEnumerator, exahype2::fd::Flux flux, 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__ QFlux, const QOutEnumeratorType &QFluxEnumerator) InlineMethod
 This routine computes \( \partial_i F_i \) where i is the argument normal.
template<typename Solver, class QInEnumeratorType, class QOutEnumeratorType>
static void computeFlux_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, int normal, double *__restrict__ QFlux, const QOutEnumeratorType &QFluxEnumerator) InlineMethod
 Overloaded version with static calls.
template<typename QOutEnumeratorType>
static void updateSolutionWithFlux_LoopBody (const double *__restrict__ tempFluxX, const double *__restrict__ tempFluxY, const double *__restrict__ tempFluxZ, const QOutEnumeratorType &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
 Plain update of flux in a finite differences scheme.
template<class QInEnumeratorType, class QOutEnumeratorType>
static void computeAuxiliaryVariables_LoopBody (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, int normal, const QOutEnumeratorType &QOutEnumerator) InlineMethod
template<class QInEnumeratorType, class QOutEnumeratorType>
static void computeDifferentialSourceTerm_LoopBody (const double *__restrict__ QIn, const QInEnumeratorType &QInEnumerator, exahype2::fd::NonconservativeProduct DifferentialSource, 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__ QDiffSrc, const QOutEnumeratorType &QDiffSrcEnumerator, DifferentialSourceTermVariant variant) InlineMethod
 This function calculates the source term that involves B_i\nabla_iQ where i is the spatial dimension.
template<typename Solver, class QInEnumeratorType, class QOutEnumeratorType>
static void computeDifferentialSourceTerm_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, int normal, double *__restrict__ QDiffSrc, const QOutEnumeratorType &QDiffSrcEnumerator, DifferentialSourceTermVariant variant) InlineMethod
 Overlaoded version with static calls.
template<typename QOutEnumeratorType>
static void updateSolutionWithDifferentialSourceTerm_LoopBody (const double *__restrict__ QDiffSrcX, const double *__restrict__ QDiffSrcY, const double *__restrict__ QDiffSrcZ, const QOutEnumeratorType &QDiffSrcEnumerator, 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
template<class QInEnumeratorType, class QOutEnumeratorType>
static void computeKreissOligerDissipationTerm_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, int normal, double *__restrict__ QKODsp, const QOutEnumeratorType &QKODspEnumerator) InlineMethod
template<typename QOutEnumeratorType>
static void updateSolutionWithKODissipationTerm_LoopBody (const double KOSigma, const double *__restrict__ QKODspX, const double *__restrict__ QKODspY, const double *__restrict__ QKODspZ, const QOutEnumeratorType &QKODspEnumerator, 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
template<class QInEnumeratorType, class QOutEnumeratorType>
static void computeFlux_LoopBody (const double *__restrict__ QIn, const QInEnumeratorType &QInEnumerator, exahype2::fd::Flux flux, 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__ QFlux, const QOutEnumeratorType &QFluxEnumerator) InlineMethod
 This routine computes \( \partial_i F_i \) where i is the argument normal.
template<typename Solver, class QInEnumeratorType, class QOutEnumeratorType>
static void computeFlux_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, int normal, double *__restrict__ QFlux, const QOutEnumeratorType &QFluxEnumerator) InlineMethod
 Overloaded version with static calls.
template<typename QOutEnumeratorType>
static void updateSolutionWithFlux_LoopBody (const double *__restrict__ tempFluxX, const double *__restrict__ tempFluxY, const double *__restrict__ tempFluxZ, const QOutEnumeratorType &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
 Plain update of flux in a finite differences scheme.

Function Documentation

◆ computeAuxiliaryVariables_LoopBody() [1/2]

template<class QInEnumeratorType, class QOutEnumeratorType>
void exahype2::fd::fd4::internal::computeAuxiliaryVariables_LoopBody ( 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,
int normal,
const QOutEnumeratorType & QOutEnumerator )
static
  This function calculates the auxiliary variables as gradietns of the primary
  variables. The graident is calculated using a 5-point stencil in 1D which has
  2 neighbouring cells on each side of the central one. The computation requires    

us to have access to 2 halo layers on each side of a given patch.

References InlineMethod, and exahype2::volumeIndex().

Referenced by exahype2::fd::fd4::reconstruct_first_derivatives().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ computeAuxiliaryVariables_LoopBody() [2/2]

template<class QInEnumeratorType, class QOutEnumeratorType>
void exahype2::fd::fd4::internal::computeAuxiliaryVariables_LoopBody ( 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,
int normal,
const QOutEnumeratorType & QOutEnumerator )
static
  This function calculates the auxiliary variables as gradietns of the primary
  variables. The graident is calculated using a 5-point stencil in 1D which has
  2 neighbouring cells on each side of the central one. The computation requires    

us to have access to 2 halo layers on each side of a given patch.

References InlineMethod, and exahype2::volumeIndex().

Here is the call graph for this function:

◆ computeDifferentialSourceTerm_LoopBody() [1/4]

template<typename Solver, class QInEnumeratorType, class QOutEnumeratorType>
void exahype2::fd::fd4::internal::computeDifferentialSourceTerm_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,
int normal,
double *__restrict__ QDiffSrc,
const QOutEnumeratorType & QDiffSrcEnumerator,
DifferentialSourceTermVariant variant )
static

Overlaoded version with static calls.

References InlineMethod, and exahype2::volumeIndex().

Here is the call graph for this function:

◆ computeDifferentialSourceTerm_LoopBody() [2/4]

template<typename Solver, class QInEnumeratorType, class QOutEnumeratorType>
void exahype2::fd::fd4::internal::computeDifferentialSourceTerm_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,
int normal,
double *__restrict__ QDiffSrc,
const QOutEnumeratorType & QDiffSrcEnumerator,
DifferentialSourceTermVariant variant )
static

Overlaoded version with static calls.

References InlineMethod, and exahype2::volumeIndex().

Here is the call graph for this function:

◆ computeDifferentialSourceTerm_LoopBody() [3/4]

template<class QInEnumeratorType, class QOutEnumeratorType>
void exahype2::fd::fd4::internal::computeDifferentialSourceTerm_LoopBody ( const double *__restrict__ QIn,
const QInEnumeratorType & QInEnumerator,
exahype2::fd::NonconservativeProduct DifferentialSource,
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__ QDiffSrc,
const QOutEnumeratorType & QDiffSrcEnumerator,
DifferentialSourceTermVariant variant )
static

This function calculates the source term that involves B_i\nabla_iQ where i is the spatial dimension.

These involve first gradients of quantitiets which are now calculated using a standard fourth-order finite difference
scheme with a five-point stancil. This requires one to have access to at least two halo layers on each side of a given patch.

References InlineMethod, and exahype2::volumeIndex().

Referenced by exahype2::fd::fd4::omp::internal::timeStep_batched_heap_multicore_static_calls(), timeStep_batched_static_calls(), exahype2::fd::fd4::timeStep_patchwise_heap_functors(), and timeStep_patchwise_static_calls().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ computeDifferentialSourceTerm_LoopBody() [4/4]

template<class QInEnumeratorType, class QOutEnumeratorType>
void exahype2::fd::fd4::internal::computeDifferentialSourceTerm_LoopBody ( const double *__restrict__ QIn,
const QInEnumeratorType & QInEnumerator,
exahype2::fd::NonconservativeProduct DifferentialSource,
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__ QDiffSrc,
const QOutEnumeratorType & QDiffSrcEnumerator,
DifferentialSourceTermVariant variant )
static

This function calculates the source term that involves B_i\nabla_iQ where i is the spatial dimension.

These involve first gradients of quantitiets which are now calculated using a standard fourth-order finite difference
scheme with a five-point stancil. This requires one to have access to at least two halo layers on each side of a given patch.

References InlineMethod, and exahype2::volumeIndex().

Here is the call graph for this function:

◆ computeFlux_LoopBody() [1/4]

template<typename Solver, class QInEnumeratorType, class QOutEnumeratorType>
void exahype2::fd::fd4::internal::computeFlux_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,
int normal,
double *__restrict__ QFlux,
const QOutEnumeratorType & QFluxEnumerator )
static

Overloaded version with static calls.

References InlineMethod, and exahype2::volumeIndex().

Here is the call graph for this function:

◆ computeFlux_LoopBody() [2/4]

template<typename Solver, class QInEnumeratorType, class QOutEnumeratorType>
void exahype2::fd::fd4::internal::computeFlux_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,
int normal,
double *__restrict__ QFlux,
const QOutEnumeratorType & QFluxEnumerator )
static

Overloaded version with static calls.

References InlineMethod, and exahype2::volumeIndex().

Here is the call graph for this function:

◆ computeFlux_LoopBody() [3/4]

template<class QInEnumeratorType, class QOutEnumeratorType>
void exahype2::fd::fd4::internal::computeFlux_LoopBody ( const double *__restrict__ QIn,
const QInEnumeratorType & QInEnumerator,
exahype2::fd::Flux flux,
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__ QFlux,
const QOutEnumeratorType & QFluxEnumerator )
static

This routine computes \( \partial_i F_i \) where i is the argument normal.

It is not optimised: Whenever we use the AoS data format, we could directly evaluate the flux terms without any gathering or copying. As we don't optimise/specialise, we always first have to gather the solution before we invoke the user kernel. A similar argument holds or QFluxGathered: the solution is gathered within this temporary array, before we scatter it into the image.

References InlineMethod, and exahype2::volumeIndex().

Referenced by exahype2::fd::fd4::omp::internal::timeStep_batched_heap_multicore_static_calls(), timeStep_batched_static_calls(), exahype2::fd::fd4::timeStep_patchwise_heap_functors(), and timeStep_patchwise_static_calls().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ computeFlux_LoopBody() [4/4]

template<class QInEnumeratorType, class QOutEnumeratorType>
void exahype2::fd::fd4::internal::computeFlux_LoopBody ( const double *__restrict__ QIn,
const QInEnumeratorType & QInEnumerator,
exahype2::fd::Flux flux,
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__ QFlux,
const QOutEnumeratorType & QFluxEnumerator )
static

This routine computes \( \partial_i F_i \) where i is the argument normal.

It is not optimised: Whenever we use the AoS data format, we could directly evaluate the flux terms without any gathering or copying. As we don't optimise/specialise, we always first have to gather the solution before we invoke the user kernel. A similar argument holds or QFluxGathered: the solution is gathered within this temporary array, before we scatter it into the image.

References InlineMethod, and exahype2::volumeIndex().

Here is the call graph for this function:

◆ computeKreissOligerDissipationTerm_LoopBody() [1/2]

template<class QInEnumeratorType, class QOutEnumeratorType>
void exahype2::fd::fd4::internal::computeKreissOligerDissipationTerm_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,
int normal,
double *__restrict__ QKODsp,
const QOutEnumeratorType & QKODspEnumerator )
static
This function calculates the Kreiss Oliger dissipation term that is needed
to dissipate high-frequency modes. The KO term is calculated at order N=3
in order to make sure that it is of higher order accruacy than the chosen    
finite difference scheme used in other parts of the equations. It requires

us to have access to at least 3 halo layers on each side of a given patch.

References InlineMethod, and exahype2::volumeIndex().

Referenced by exahype2::fd::fd4::omp::internal::timeStep_batched_heap_multicore_static_calls(), timeStep_batched_static_calls(), exahype2::fd::fd4::timeStep_patchwise_heap_functors(), and timeStep_patchwise_static_calls().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ computeKreissOligerDissipationTerm_LoopBody() [2/2]

template<class QInEnumeratorType, class QOutEnumeratorType>
void exahype2::fd::fd4::internal::computeKreissOligerDissipationTerm_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,
int normal,
double *__restrict__ QKODsp,
const QOutEnumeratorType & QKODspEnumerator )
static
This function calculates the Kreiss Oliger dissipation term that is needed
to dissipate high-frequency modes. The KO term is calculated at order N=3
in order to make sure that it is of higher order accruacy than the chosen    
finite difference scheme used in other parts of the equations. It requires

us to have access to at least 3 halo layers on each side of a given patch.

References InlineMethod, and exahype2::volumeIndex().

Here is the call graph for this function:

◆ timeStep_batched_static_calls()

template<typename Solver, int numberOfGridCellsPerPatchPerAxis, int haloSize, int unknowns, int auxiliaryVariables, typename TempDataEnumerator>
void exahype2::fd::fd4::internal::timeStep_batched_static_calls ( ::exahype2::CellData< double, double > & patchData,
double KOSigma,
bool evaluateFlux,
bool evaluateDifferentialSource,
bool evaluateAlgebraicSource,
bool copyOldTimeStepAndScaleWithTimeStepSize,
DifferentialSourceTermVariant variant,
const exahype2::enumerator::AoSLexicographicEnumerator & QInEnumerator,
const exahype2::enumerator::AoSLexicographicEnumerator & QOutEnumerator,
const TempDataEnumerator & fluxEnumerator,
const TempDataEnumerator & differentialSourceEnumerator,
const TempDataEnumerator & KODissipationEnumerator,
double * tempFluxX,
double * tempFluxY,
double * tempFluxZ,
double * tempDifferentialSourceX,
double * tempDifferentialSourceY,
double * tempDifferentialSourceZ,
double * tempKODissipationX,
double * tempKODissipationY,
double * tempKODissipationZ )
static

◆ timeStep_patchwise_static_calls()

template<typename Solver, int numberOfGridCellsPerPatchPerAxis, int haloSize, int unknowns, int auxiliaryVariables, typename TempDataEnumerator>
void exahype2::fd::fd4::internal::timeStep_patchwise_static_calls ( ::exahype2::CellData< double, double > & patchData,
double KOSigma,
bool evaluateFlux,
bool evaluateDifferentialSource,
bool evaluateAlgebraicSource,
bool copyOldTimeStepAndScaleWithTimeStepSize,
DifferentialSourceTermVariant variant,
const exahype2::enumerator::AoSLexicographicEnumerator & QInEnumerator,
const exahype2::enumerator::AoSLexicographicEnumerator & QOutEnumerator,
const TempDataEnumerator & fluxEnumerator,
const TempDataEnumerator & differentialSourceEnumerator,
const TempDataEnumerator & KODissipationEnumerator,
double * tempFluxX,
double * tempFluxY,
double * tempFluxZ,
double * tempDifferentialSourceX,
double * tempDifferentialSourceY,
double * tempDifferentialSourceZ,
double * tempKODissipationX,
double * tempKODissipationY,
double * tempKODissipationZ )
static

◆ updateSolutionWithDifferentialSourceTerm_LoopBody() [1/2]

template<typename QOutEnumeratorType>
void exahype2::fd::fd4::internal::updateSolutionWithDifferentialSourceTerm_LoopBody ( const double *__restrict__ QDiffSrcX,
const double *__restrict__ QDiffSrcY,
const double *__restrict__ QDiffSrcZ,
const QOutEnumeratorType & QDiffSrcEnumerator,
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 )
static
Add the difference source contributions to one volume.

The differential source is defined at the centres of volumes, i.e. we know 

that QDiffSrcX, QDiffSrcY, QDiffSrcZ hold one (vector) entry per volume and QDiffSrcEnumerator, which is identical to QOutEnumerator, is aware that we work with volume centres.

References InlineMethod, and exahype2::volumeIndex().

Referenced by exahype2::fd::fd4::omp::internal::timeStep_batched_heap_multicore_static_calls(), timeStep_batched_static_calls(), exahype2::fd::fd4::timeStep_patchwise_heap_functors(), and timeStep_patchwise_static_calls().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ updateSolutionWithDifferentialSourceTerm_LoopBody() [2/2]

template<typename QOutEnumeratorType>
void exahype2::fd::fd4::internal::updateSolutionWithDifferentialSourceTerm_LoopBody ( const double *__restrict__ QDiffSrcX,
const double *__restrict__ QDiffSrcY,
const double *__restrict__ QDiffSrcZ,
const QOutEnumeratorType & QDiffSrcEnumerator,
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 )
static
Add the difference source contributions to one volume.

The differential source is defined at the centres of volumes, i.e. we know 

that QDiffSrcX, QDiffSrcY, QDiffSrcZ hold one (vector) entry per volume and QDiffSrcEnumerator, which is identical to QOutEnumerator, is aware that we work with volume centres.

References InlineMethod, and exahype2::volumeIndex().

Here is the call graph for this function:

◆ updateSolutionWithFlux_LoopBody() [1/2]

template<typename QOutEnumeratorType>
void exahype2::fd::fd4::internal::updateSolutionWithFlux_LoopBody ( const double *__restrict__ tempFluxX,
const double *__restrict__ tempFluxY,
const double *__restrict__ tempFluxZ,
const QOutEnumeratorType & 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 )
static

Plain update of flux in a finite differences scheme.

We assume that the temp arrays hold the flux in x, y and z direction in the cell centre, i.e. within the degree of freedom. We therefore simply can take these flux components, scale them with dt, and add them to the solution.

References InlineMethod, and exahype2::volumeIndex().

Referenced by exahype2::fd::fd4::omp::internal::timeStep_batched_heap_multicore_static_calls(), timeStep_batched_static_calls(), exahype2::fd::fd4::timeStep_patchwise_heap_functors(), and timeStep_patchwise_static_calls().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ updateSolutionWithFlux_LoopBody() [2/2]

template<typename QOutEnumeratorType>
void exahype2::fd::fd4::internal::updateSolutionWithFlux_LoopBody ( const double *__restrict__ tempFluxX,
const double *__restrict__ tempFluxY,
const double *__restrict__ tempFluxZ,
const QOutEnumeratorType & 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 )
static

Plain update of flux in a finite differences scheme.

We assume that the temp arrays hold the flux in x, y and z direction in the cell centre, i.e. within the degree of freedom. We therefore simply can take these flux components, scale them with dt, and add them to the solution.

References InlineMethod, and exahype2::volumeIndex().

Here is the call graph for this function:

◆ updateSolutionWithKODissipationTerm_LoopBody() [1/2]

template<typename QOutEnumeratorType>
void exahype2::fd::fd4::internal::updateSolutionWithKODissipationTerm_LoopBody ( const double KOSigma,
const double *__restrict__ QKODspX,
const double *__restrict__ QKODspY,
const double *__restrict__ QKODspZ,
const QOutEnumeratorType & QKODspEnumerator,
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 )
static
Add the Kreiss Oliger dissipation contributions to one volume.

The KO dissipation term is defined at the centres of volumes, i.e. we know 

that QKODspX, QKODspY, QKODspZ hold one (vector) entry per volume and QKODspEnumerator, which is identical to QOutEnumerator, is aware that we work with volume centres.

References InlineMethod, and exahype2::volumeIndex().

Referenced by exahype2::fd::fd4::omp::internal::timeStep_batched_heap_multicore_static_calls(), timeStep_batched_static_calls(), exahype2::fd::fd4::timeStep_patchwise_heap_functors(), and timeStep_patchwise_static_calls().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ updateSolutionWithKODissipationTerm_LoopBody() [2/2]

template<typename QOutEnumeratorType>
void exahype2::fd::fd4::internal::updateSolutionWithKODissipationTerm_LoopBody ( const double KOSigma,
const double *__restrict__ QKODspX,
const double *__restrict__ QKODspY,
const double *__restrict__ QKODspZ,
const QOutEnumeratorType & QKODspEnumerator,
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 )
static
Add the Kreiss Oliger dissipation contributions to one volume.

The KO dissipation term is defined at the centres of volumes, i.e. we know 

that QKODspX, QKODspY, QKODspZ hold one (vector) entry per volume and QKODspEnumerator, which is identical to QOutEnumerator, is aware that we work with volume centres.

References InlineMethod, and exahype2::volumeIndex().

Here is the call graph for this function: