Peano
variant2 Namespace Reference

Functions

void runBenchmarks (int numberOfCells, double timeStamp, double timeStepSize, const tarch::la::Vector< DIMENSIONS, double > cellCenter, const tarch::la::Vector< DIMENSIONS, double > cellSize)
 

Variables

tarch::logging::Log _log
 This is variant 2 of the fused kernels. More...
 

Function Documentation

◆ runBenchmarks()

Variable Documentation

◆ _log

tarch::logging::Log variant2::_log
extern

This is variant 2 of the fused kernels.

In this variant, we will assume that faceData is constructed per cell, and that it contains data both from one's own cell and one's neighbour, e.g. it has access to the side of the faces that belong to the neighbour. We assume that this data is not shared with the neighbour however, but copied from the neighbour before the start of the kernels.

This means that the Riemann kernel can and must be performed within any given cell, and will therefore be performed twice for any given face.

This can be implemented efficiently as one single enclave task, but requires the data from the faces to be copied over between tasks, which requires some fiddly management of the faces. It also means that each (potentially costly) Riemann kernel must be performed twice. You will not see these prices for the cheap Rusanov kernels, but believe me this can become quite costly.

Upsides: Each cell can be performed independently only one dependency which occurs between timeSteps

Downsides: somewhat fiddly and bug-prone management of faces for copying Requires copying data between faces of adjacent cells Each Riemann solver is computed twice, which can become costly