|
| typedef std::function< void(const double *__restrict__ Q, const tarch::la::Vector< Dimensions, double > &gridCellX, const tarch::la::Vector< Dimensions, double > &gridCellH, double t, double dt, double *__restrict__ AlgeSrc) | Source) |
| |
| typedef std::function< void(const double *__restrict__ Q, const tarch::la::Vector< Dimensions, double > &faceCentre, const tarch::la::Vector< Dimensions, double > &gridCellH, double t, double dt, int normal, double *__restrict__ F) | Flux) |
| |
| typedef std::function< void(const double *__restrict__ Q, const double *__restrict__ deltaQ, const tarch::la::Vector< Dimensions, double > &gridCellX, const tarch::la::Vector< Dimensions, double > &gridCellH, double t, double dt, int normal, double *__restrict__ DiffSrc) | NonconservativeProduct) |
| |
| typedef std::function< void(const double *__restrict__ Q, const tarch::la::Vector< Dimensions, double > &gridCellX, const tarch::la::Vector< Dimensions, double > &gridCellH, double t, double dt, int normal, double *__restrict__ maxEigen) | MaxEigenvalue) |
| | The max eigenvalue is used if and only if you have adaptive time stepping.
|
| |
|
| void | applyBoundaryConditions (std::function< void(const double *__restrict__ Qinside, double *__restrict__ Qoutside, const tarch::la::Vector< Dimensions, double > &faceCentre, const tarch::la::Vector< Dimensions, double > &volumeH, double t, double dt, int normal) > boundaryCondition, const tarch::la::Vector< Dimensions, double > &faceCentre, const tarch::la::Vector< Dimensions, double > &patchSize, double t, double dt, int numberOfGridCellsPerPatchPerAxis, int overlap, int unknownsPlusAuxiliaryVariables, int faceNumber, double *__restrict__ Q) |
| | Apply (generic) boundary conditions.
|
| |
| void | applySommerfeldConditions (std::function< double(const double *__restrict__ Q, const tarch::la::Vector< Dimensions, double > &faceCentre, const tarch::la::Vector< Dimensions, double > &gridCellH, double t, double dt, int normal) > maxEigenvalue, std::function< void(double *__restrict__ Q, const tarch::la::Vector< Dimensions, double > &faceCentre, const tarch::la::Vector< Dimensions, double > &gridCellH) > farFieldSolution, const tarch::la::Vector< Dimensions, double > &faceCentre, const tarch::la::Vector< Dimensions, double > &patchSize, double t, double dt, int numberOfGridCellsPerPatchPerAxis, int overlap, int numberOfUnknowns, int numberOfAuxiliaryVariables, int faceNumber, const tarch::la::Vector< Dimensions, double > &systemOrigin, double *__restrict__ Qold, double *__restrict__ Qnew, double CheckpointTimeStamp) |
| |
| void | applySommerfeldConditions (std::function< double(const double *__restrict__ Q, const tarch::la::Vector< Dimensions, double > &faceCentre, const tarch::la::Vector< Dimensions, double > &gridCellH, double t, double dt, int normal) > maxEigenvalue, const tarch::la::Vector< Dimensions, double > &faceCentre, const tarch::la::Vector< Dimensions, double > &patchSize, double t, double dt, int numberOfGridCellsPerPatchPerAxis, int overlap, int numberOfUnknowns, int numberOfAuxiliaryVariables, int faceNumber, const tarch::la::Vector< Dimensions, double > &systemOrigin, double *__restrict__ Qold, double *__restrict__ Qnew, double CheckpointTimeStamp) |
| | Wrapper around the other applySommerfeldConditions() function.
|
| |
| void | reduceMaxEigenvalue_patchwise_functors (::exahype2::CellData< double, double > &patchData, int numberOfGridCellsPerPatchPerAxis, int overlap, int unknowns, int auxiliaryVariables, MaxEigenvalue maxEigenvalue) |
| |
| static tarch::la::Vector< 2, double > | getGridCellSize (const tarch::la::Vector< 2, double > &h, int numberOfGridCellsPerPatchPerAxis) |
| |
| static tarch::la::Vector< 3, double > | getGridCellSize (const tarch::la::Vector< 3, double > &h, int numberOfGridCellsPerPatchPerAxis) |
| |
| static tarch::la::Vector< 2, double > | getGridFaceSize (const tarch::la::Vector< 2, double > &h, int numberOfGridCellsPerPatchPerAxis) |
| |
| static tarch::la::Vector< 3, double > | getGridFaceSize (const tarch::la::Vector< 3, double > &h, int numberOfGridCellsPerPatchPerAxis) |
| |
| static tarch::la::Vector< 2, double > | getGridCellCentre (const tarch::la::Vector< 2, double > &x, const tarch::la::Vector< 2, double > &h, int numberOfGridCellsPerPatchPerAxis, const tarch::la::Vector< 2, int > &index) |
| | In ExaHyPE's Finite Volume setup, a cell hosts a patch of Finite Volumes.
|
| |
| static tarch::la::Vector< 3, double > | getGridCellCentre (const tarch::la::Vector< 3, double > &x, const tarch::la::Vector< 3, double > &h, int numberOfGridCellsPerPatchPerAxis, const tarch::la::Vector< 3, int > &index) |
| |
| static tarch::la::Vector< 2, double > | getGridFaceCentre (const tarch::la::Vector< 2, double > &x, const tarch::la::Vector< 2, double > &h, int numberOfGridCellsPerPatchPerAxis, int overlap, int normal, const tarch::la::Vector< 2, int > &index) |
| |
| static tarch::la::Vector< 3, double > | getGridFaceCentre (const tarch::la::Vector< 3, double > &x, const tarch::la::Vector< 3, double > &h, int numberOfGridCellsPerPatchPerAxis, int overlap, int normal, const tarch::la::Vector< 3, int > &index) |
| |
| std::string | plotGridCell (const double *__restrict__ Q, int unknowns) |
| | Helper routine that I need in the log statements.
|
| |
| void | validatePatch (const double *__restrict__ Q, int unknowns, int auxiliaryVariables, int numberOfGridCellsPerPatchPerAxis, int haloSize, const std::string &location="", bool triggerNonCriticalAssertion=true, double *minValues=nullptr, double *maxValues=nullptr) |
| | Just runs over the patch and ensures that no entry is non or infinite.
|
| |
| std::string | plotPatch (const double *__restrict__ Q, int unknowns, int auxiliaryVariables, int numberOfGridCellsPerPatchPerAxis, int haloSize, bool prettyPrint=false) |
| | Plot patch.
|
| |
| std::string | plotPatchOverlap (const double *__restrict__ Q, int unknowns, int auxiliaryVariables, int numberOfGridCellsPerPatchPerAxis, int haloSize, int normal, bool prettyPrint=false) |
| |
| void exahype2::fd::applySommerfeldConditions |
( |
std::function< double(const double *__restrict__ Q, const tarch::la::Vector< Dimensions, double > &faceCentre, const tarch::la::Vector< Dimensions, double > &gridCellH, double t, double dt, int normal) > | maxEigenvalue, |
|
|
std::function< void(double *__restrict__ Q, const tarch::la::Vector< Dimensions, double > &faceCentre, const tarch::la::Vector< Dimensions, double > &gridCellH) > | farFieldSolution, |
|
|
const tarch::la::Vector< Dimensions, double > & | faceCentre, |
|
|
const tarch::la::Vector< Dimensions, double > & | patchSize, |
|
|
double | t, |
|
|
double | dt, |
|
|
int | numberOfGridCellsPerPatchPerAxis, |
|
|
int | overlap, |
|
|
int | numberOfUnknowns, |
|
|
int | numberOfAuxiliaryVariables, |
|
|
int | faceNumber, |
|
|
const tarch::la::Vector< Dimensions, double > & | systemOrigin, |
|
|
double *__restrict__ | Qold, |
|
|
double *__restrict__ | Qnew, |
|
|
double | CheckpointTimeStamp ) |
Apply Sommerfeld boundary conditions
Sommerfeld boundary conditions don't need a callback for the actual
boundary data, but they need the max flux. If you employ Sommerfeld
conditions, you can ignore the generic boundary condition function
of your solver. It will still remain there, but you can leave it
empty (or add an assertion in there, as it should never be called).
## Usage
The typical user switches to Sommerfeld conditions by exchanging the
boundary kernel call:
<pre>
self._action_set_handle_boundary.TemplateHandleBoundary_KernelCalls = """
::exahype2::fd::applySommerfeldConditions(
[&](
const double * <strong>restrict</strong> Q,
const tarch::la::Vector<Dimensions,double>& faceCentre,
const tarch::la::Vector<Dimensions,double>& gridCellH,
double t,
double dt,
int normal
) -> double {
return repositories::{{SOLVER_INSTANCE}}.maxEigenvalue( Q, faceCentre, gridCellH, t, dt, normal );
},
[&](
double * <strong>restrict</strong> Q,
const tarch::la::Vector<Dimensions,double>& faceCentre,
const tarch::la::Vector<Dimensions,double>& gridCellH
) -> void {
repositories::{{SOLVER_INSTANCE}}.initialCondition( Q, faceCentre, gridCellH, true );
},
marker.x(),
marker.h(),
{{FACE_METADATA_ACCESSOR}}.getOldTimeStamp(marker.getSelectedFaceNumber()<Dimensions ? 1 : 0),
repositories::{{SOLVER_INSTANCE}}.getMinTimeStepSize(),
{{NUMBER_OF_GRID_CELLS_PER_PATCH_PER_AXIS}},
{{OVERLAP}},
{{NUMBER_OF_UNKNOWNS}},
{{NUMBER_OF_AUXILIARY_VARIABLES}},
marker.getSelectedFaceNumber(),
{0.0, 0.0, 0.0},
fineGridFace{{UNKNOWN_IDENTIFIER}}Old.value,
fineGridFace{{UNKNOWN_IDENTIFIER}}New.value,
{...} //approximate background solution at infinity
);
</pre>
"""
- Parameters
-