Peano
Loading...
Searching...
No Matches
exahype2.solvers.rkdg.actionsets.HandleBoundary.HandleBoundary Class Reference

The linear combination of the Runge Kutta trials has to be projected onto the faces, so we can then solve the Riemann problems. More...

Inheritance diagram for exahype2.solvers.rkdg.actionsets.HandleBoundary.HandleBoundary:
Collaboration diagram for exahype2.solvers.rkdg.actionsets.HandleBoundary.HandleBoundary:

Public Member Functions

 __init__ (self, solver, guard)
 guard_project: String (C++ code) Predicate which controls if the solution is actually projected
 
 guards (self)
 
 guards (self, new_guards)
 
 get_body_of_operation (self, operation_name)
 Return actual C++ code snippets to be inserted into C++ code.
 
 get_action_set_name (self)
 You should replicate this function in each subclass, so you get meaningful action set names (otherwise, it will be AbstractFVActionSet0,1,2,...).
 
- Public Member Functions inherited from exahype2.solvers.rkdg.actionsets.AbstractRungeKuttaDGActionSet.AbstractRungeKuttaDGActionSet
 user_should_modify_template (self)
 Is the user allowed to modify the output.
 
 get_includes (self)
 Return include statements that you need.
 
- Public Member Functions inherited from peano4.solversteps.ActionSet.ActionSet
 get_constructor_body (self)
 Define a tailored constructor body.
 
 get_static_initialisations (self, full_qualified_classname)
 
 get_destructor_body (self)
 
 get_body_of_getGridControlEvents (self)
 
 get_body_of_prepareTraversal (self)
 
 get_body_of_unprepareTraversal (self)
 
 get_attributes (self)
 Return attributes as copied and pasted into the generated class.
 

Data Fields

 guards
 
- Data Fields inherited from peano4.solversteps.ActionSet.ActionSet
 descend_invocation_order
 
 parallel
 

Static Public Attributes

str TemplateHandleBoundary_Prologue
 
str TemplateHandleBoundary_KernelCalls
 
str TemplateHandleBoundary_Epilogue
 
- Static Public Attributes inherited from peano4.solversteps.ActionSet.ActionSet
str OPERATION_BEGIN_TRAVERSAL = "beginTraversal"
 
str OPERATION_END_TRAVERSAL = "endTraversal"
 
str OPERATION_CREATE_PERSISTENT_VERTEX = "createPersistentVertex"
 
str OPERATION_DESTROY_PERSISTENT_VERTEX = "destroyPersistentVertex"
 
str OPERATION_CREATE_HANGING_VERTEX = "createHangingVertex"
 
str OPERATION_DESTROY_HANGING_VERTEX = "destroyHangingVertex"
 
str OPERATION_CREATE_PERSISTENT_FACE = "createPersistentFace"
 
str OPERATION_DESTROY_PERSISTENT_FACE = "destroyPersistentFace"
 
str OPERATION_CREATE_HANGING_FACE = "createHangingFace"
 
str OPERATION_DESTROY_HANGING_FACE = "destroyHangingFace"
 
str OPERATION_CREATE_CELL = "createCell"
 
str OPERATION_DESTROY_CELL = "destroyCell"
 
str OPERATION_TOUCH_VERTEX_FIRST_TIME = "touchVertexFirstTime"
 
str OPERATION_TOUCH_VERTEX_LAST_TIME = "touchVertexLastTime"
 
str OPERATION_TOUCH_FACE_FIRST_TIME = "touchFaceFirstTime"
 
str OPERATION_TOUCH_FACE_LAST_TIME = "touchFaceLastTime"
 
str OPERATION_TOUCH_CELL_FIRST_TIME = "touchCellFirstTime"
 
str OPERATION_TOUCH_CELL_LAST_TIME = "touchCellLastTime"
 

Protected Attributes

 _butcher_tableau
 
 _guards
 
- Protected Attributes inherited from exahype2.solvers.rkdg.actionsets.AbstractRungeKuttaDGActionSet.AbstractRungeKuttaDGActionSet
 _solver
 

Detailed Description

The linear combination of the Runge Kutta trials has to be projected onto the faces, so we can then solve the Riemann problems.

So the projection happens in one grid sweep, the corresponding Riemann solve in the next one.

Time step/time stamp handling

We rely on ProjectLinearCombinationOfEstimatesOntoFaces to project the current solution onto the faces.

Definition at line 12 of file HandleBoundary.py.

Constructor & Destructor Documentation

◆ __init__()

exahype2.solvers.rkdg.actionsets.HandleBoundary.HandleBoundary.__init__ ( self,
solver,
guard )

guard_project: String (C++ code) Predicate which controls if the solution is actually projected

guard_safe_old_time_step: String (C++ code) Predicate which controls if the projection should be copied into the old solution and the time step should also be moved over

Reimplemented from exahype2.solvers.rkdg.actionsets.AbstractRungeKuttaDGActionSet.AbstractRungeKuttaDGActionSet.

Definition at line 92 of file HandleBoundary.py.

References exahype2.solvers.rkdg.actionsets.HandleBoundary.HandleBoundary.__init__().

Referenced by exahype2.solvers.rkdg.actionsets.HandleBoundary.HandleBoundary.__init__().

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

Member Function Documentation

◆ get_action_set_name()

exahype2.solvers.rkdg.actionsets.HandleBoundary.HandleBoundary.get_action_set_name ( self)

You should replicate this function in each subclass, so you get meaningful action set names (otherwise, it will be AbstractFVActionSet0,1,2,...).

Reimplemented from exahype2.solvers.rkdg.actionsets.AbstractRungeKuttaDGActionSet.AbstractRungeKuttaDGActionSet.

Definition at line 147 of file HandleBoundary.py.

◆ get_body_of_operation()

exahype2.solvers.rkdg.actionsets.HandleBoundary.HandleBoundary.get_body_of_operation ( self,
operation_name )

Return actual C++ code snippets to be inserted into C++ code.

See class' string constants starting with OPERATION_ for possible values of operation_name.

Reimplemented from peano4.solversteps.ActionSet.ActionSet.

Definition at line 126 of file HandleBoundary.py.

References exahype2.solvers.rkdg.actionsets.AddVolumeAndFaceSolution.AddVolumeAndFaceSolution._butcher_tableau, exahype2.solvers.rkdg.actionsets.ComputeFinalLinearCombination.ComputeFinalLinearCombination._butcher_tableau, exahype2.solvers.rkdg.actionsets.HandleBoundary.HandleBoundary._butcher_tableau, exahype2.solvers.rkdg.actionsets.LinearCombinationOfEstimates.LinearCombinationOfEstimates._butcher_tableau, exahype2.solvers.rkdg.actionsets.ProjectLinearCombinationOfEstimatesOntoFaces.ProjectLinearCombinationOfEstimatesOntoFaces._butcher_tableau, exahype2.solvers.rkdg.actionsets.SolveRiemannProblem.SolveRiemannProblem._butcher_tableau, exahype2.solvers.rkdg.actionsets.SolveVolumeIntegral.SolveVolumeIntegral._butcher_tableau, exahype2.solvers.rkfd.actionsets.ComputeFinalLinearCombination.ComputeFinalLinearCombination._butcher_tableau, exahype2.solvers.rkfd.actionsets.LinearCombinationOfEstimates.LinearCombinationOfEstimates._butcher_tableau, exahype2.solvers.rkfd.actionsets.ProjectPatchOntoFaces.ProjectPatchOntoFaces._butcher_tableau, exahype2.solvers.rkfd.OneSweepPerRungeKuttaStep.UpdateCell._butcher_tableau, exahype2.solvers.rkfd.SeparateSweeps.UpdateCell._butcher_tableau, exahype2.solvers.rkfd.SeparateSweepsWithEnclaveTasking.UpdateCell._butcher_tableau, exahype2.solvers.aderdg.actionsets.AbstractADERDGActionSet.AbstractADERDGActionSet._solver, exahype2.solvers.fv.actionsets.AbstractFVActionSet.AbstractFVActionSet._solver, exahype2.solvers.fv.EnclaveTasking.UpdateCell._solver, exahype2.solvers.fv.SingleSweep.UpdateCell._solver, exahype2.solvers.limiting.actionsets.AbstractLimiterActionSet.AbstractLimiterActionSet._solver, exahype2.solvers.rkdg.actionsets.AbstractRungeKuttaDGActionSet.AbstractRungeKuttaDGActionSet._solver, exahype2.solvers.rkfd.actionsets.AbstractRKFDActionSet.AbstractRKFDActionSet._solver, exahype2.solvers.rkfd.actionsets.PreprocessSolution.PreprocessReconstructedSolutionWithHalo._solver, exahype2.solvers.rkfd.OneSweepPerRungeKuttaStep.UpdateCell._solver, exahype2.solvers.rkfd.SeparateSweeps.UpdateCell._solver, exahype2.solvers.rkfd.SeparateSweepsWithEnclaveTasking.UpdateCell._solver, exahype2.solvers.rkdg.actionsets.AddVolumeAndFaceSolution.AddVolumeAndFaceSolution.guards, exahype2.solvers.rkdg.actionsets.AddVolumeAndFaceSolution.AddVolumeAndFaceSolution.guards(), exahype2.solvers.rkdg.actionsets.DynamicAMR.DynamicAMR.guards(), exahype2.solvers.rkdg.actionsets.HandleBoundary.HandleBoundary.guards, exahype2.solvers.rkdg.actionsets.HandleBoundary.HandleBoundary.guards(), exahype2.solvers.rkdg.actionsets.LinearCombinationOfEstimates.LinearCombinationOfEstimates.guards(), exahype2.solvers.rkdg.actionsets.ProjectLinearCombinationOfEstimatesOntoFaces.ProjectLinearCombinationOfEstimatesOntoFaces.guards(), exahype2.solvers.rkdg.actionsets.AddVolumeAndFaceSolution.AddVolumeAndFaceSolution.guards(), exahype2.solvers.rkdg.actionsets.DynamicAMR.DynamicAMR.guards, exahype2.solvers.rkdg.actionsets.DynamicAMR.DynamicAMR.guards(), exahype2.solvers.rkdg.actionsets.HandleBoundary.HandleBoundary.guards(), exahype2.solvers.rkdg.actionsets.LinearCombinationOfEstimates.LinearCombinationOfEstimates.guards(), exahype2.solvers.rkdg.actionsets.ProjectLinearCombinationOfEstimatesOntoFaces.ProjectLinearCombinationOfEstimatesOntoFaces.guards, exahype2.solvers.rkdg.actionsets.ProjectLinearCombinationOfEstimatesOntoFaces.ProjectLinearCombinationOfEstimatesOntoFaces.guards(), exahype2.solvers.rkdg.actionsets.SolveRiemannProblem.SolveRiemannProblem.guards, exahype2.solvers.rkdg.actionsets.SolveRiemannProblem.SolveRiemannProblem.guards(), exahype2.solvers.rkdg.actionsets.SolveVolumeIntegral.SolveVolumeIntegral.guards(), exahype2.solvers.rkfd.actionsets.LinearCombinationOfEstimates.LinearCombinationOfEstimates.guards(), exahype2.solvers.rkfd.actionsets.ProjectPatchOntoFaces.ProjectPatchOntoFaces.guards(), exahype2.solvers.rkdg.actionsets.SolveRiemannProblem.SolveRiemannProblem.guards(), exahype2.solvers.rkdg.actionsets.SolveVolumeIntegral.SolveVolumeIntegral.guards, exahype2.solvers.rkdg.actionsets.SolveVolumeIntegral.SolveVolumeIntegral.guards(), exahype2.solvers.rkfd.actionsets.LinearCombinationOfEstimates.LinearCombinationOfEstimates.guards(), exahype2.solvers.rkfd.actionsets.ProjectPatchOntoFaces.ProjectPatchOntoFaces.guards(), exahype2.solvers.fv.actionsets.HandleBoundary.HandleBoundary.TemplateHandleBoundary_Epilogue, exahype2.solvers.rkdg.actionsets.HandleBoundary.HandleBoundary.TemplateHandleBoundary_Epilogue, exahype2.solvers.rkfd.actionsets.HandleBoundary.HandleBoundary.TemplateHandleBoundary_Epilogue, exahype2.solvers.fv.actionsets.HandleBoundary.HandleBoundary.TemplateHandleBoundary_KernelCalls, exahype2.solvers.rkdg.actionsets.HandleBoundary.HandleBoundary.TemplateHandleBoundary_KernelCalls, exahype2.solvers.rkfd.actionsets.HandleBoundary.HandleBoundary.TemplateHandleBoundary_KernelCalls, exahype2.solvers.fv.actionsets.HandleBoundary.HandleBoundary.TemplateHandleBoundary_Prologue, exahype2.solvers.rkdg.actionsets.HandleBoundary.HandleBoundary.TemplateHandleBoundary_Prologue, and exahype2.solvers.rkfd.actionsets.HandleBoundary.HandleBoundary.TemplateHandleBoundary_Prologue.

Here is the call graph for this function:

◆ guards() [1/2]

◆ guards() [2/2]

exahype2.solvers.rkdg.actionsets.HandleBoundary.HandleBoundary.guards ( self,
new_guards )

Definition at line 114 of file HandleBoundary.py.

References exahype2.solvers.rkdg.actionsets.AddVolumeAndFaceSolution.AddVolumeAndFaceSolution._guards, exahype2.solvers.rkdg.actionsets.DynamicAMR.DynamicAMR._guards, exahype2.solvers.rkdg.actionsets.HandleBoundary.HandleBoundary._guards, exahype2.solvers.rkdg.actionsets.LinearCombinationOfEstimates.LinearCombinationOfEstimates._guards, exahype2.solvers.rkdg.actionsets.ProjectLinearCombinationOfEstimatesOntoFaces.ProjectLinearCombinationOfEstimatesOntoFaces._guards, exahype2.solvers.rkdg.actionsets.SolveRiemannProblem.SolveRiemannProblem._guards, exahype2.solvers.rkdg.actionsets.SolveVolumeIntegral.SolveVolumeIntegral._guards, exahype2.solvers.rkfd.actionsets.LinearCombinationOfEstimates.LinearCombinationOfEstimates._guards, exahype2.solvers.rkfd.actionsets.ProjectPatchOntoFaces.ProjectPatchOntoFaces._guards, exahype2.solvers.aderdg.actionsets.AbstractADERDGActionSet.AbstractADERDGActionSet._solver, exahype2.solvers.fv.actionsets.AbstractFVActionSet.AbstractFVActionSet._solver, exahype2.solvers.fv.EnclaveTasking.UpdateCell._solver, exahype2.solvers.fv.SingleSweep.UpdateCell._solver, exahype2.solvers.limiting.actionsets.AbstractLimiterActionSet.AbstractLimiterActionSet._solver, exahype2.solvers.rkdg.actionsets.AbstractRungeKuttaDGActionSet.AbstractRungeKuttaDGActionSet._solver, exahype2.solvers.rkfd.actionsets.AbstractRKFDActionSet.AbstractRKFDActionSet._solver, exahype2.solvers.rkfd.actionsets.PreprocessSolution.PreprocessReconstructedSolutionWithHalo._solver, exahype2.solvers.rkfd.OneSweepPerRungeKuttaStep.UpdateCell._solver, exahype2.solvers.rkfd.SeparateSweeps.UpdateCell._solver, and exahype2.solvers.rkfd.SeparateSweepsWithEnclaveTasking.UpdateCell._solver.

Referenced by exahype2.solvers.rkdg.actionsets.DynamicAMR.DynamicAMR.get_body_of_operation(), exahype2.solvers.rkdg.actionsets.HandleBoundary.HandleBoundary.get_body_of_operation(), exahype2.solvers.rkdg.actionsets.LinearCombinationOfEstimates.LinearCombinationOfEstimates.get_body_of_operation(), exahype2.solvers.rkdg.actionsets.ProjectLinearCombinationOfEstimatesOntoFaces.ProjectLinearCombinationOfEstimatesOntoFaces.get_body_of_operation(), exahype2.solvers.rkdg.actionsets.SolveRiemannProblem.SolveRiemannProblem.get_body_of_operation(), exahype2.solvers.rkdg.actionsets.SolveVolumeIntegral.SolveVolumeIntegral.get_body_of_operation(), exahype2.solvers.rkfd.actionsets.LinearCombinationOfEstimates.LinearCombinationOfEstimates.get_body_of_operation(), and exahype2.solvers.rkfd.actionsets.ProjectPatchOntoFaces.ProjectPatchOntoFaces.get_body_of_operation().

Here is the caller graph for this function:

Field Documentation

◆ _butcher_tableau

exahype2.solvers.rkdg.actionsets.HandleBoundary.HandleBoundary._butcher_tableau
protected

◆ _guards

◆ guards

◆ TemplateHandleBoundary_Epilogue

str exahype2.solvers.rkdg.actionsets.HandleBoundary.HandleBoundary.TemplateHandleBoundary_Epilogue
static
Initial value:
= """
if (marker.getSelectedFaceNumber()<Dimensions) {
fineGridFace{{SOLVER_NAME}}FaceLabel.setUpdatedTimeStamp(0, fineGridFace{{SOLVER_NAME}}FaceLabel.getUpdatedTimeStamp(1) );
fineGridFace{{SOLVER_NAME}}FaceLabel.setNewTimeStamp (0, fineGridFace{{SOLVER_NAME}}FaceLabel.getNewTimeStamp(1) );
fineGridFace{{SOLVER_NAME}}FaceLabel.setOldTimeStamp (0, fineGridFace{{SOLVER_NAME}}FaceLabel.getOldTimeStamp(1) );
}
else {
fineGridFace{{SOLVER_NAME}}FaceLabel.setUpdatedTimeStamp(1, fineGridFace{{SOLVER_NAME}}FaceLabel.getUpdatedTimeStamp(0) );
fineGridFace{{SOLVER_NAME}}FaceLabel.setNewTimeStamp( 1, fineGridFace{{SOLVER_NAME}}FaceLabel.getNewTimeStamp(0) );
fineGridFace{{SOLVER_NAME}}FaceLabel.setOldTimeStamp( 1, fineGridFace{{SOLVER_NAME}}FaceLabel.getOldTimeStamp(0) );
}
}
{% endfor %}
"""

Definition at line 76 of file HandleBoundary.py.

Referenced by exahype2.solvers.rkdg.actionsets.HandleBoundary.HandleBoundary.get_body_of_operation().

◆ TemplateHandleBoundary_KernelCalls

str exahype2.solvers.rkdg.actionsets.HandleBoundary.HandleBoundary.TemplateHandleBoundary_KernelCalls
static
Initial value:
= """
::exahype2::dg::applyBoundaryConditions(
[&](
const double * __restrict__ Qinside,
double * __restrict__ Qoutside,
const tarch::la::Vector<Dimensions,double>& x,
double t,
double dt,
int normal
) -> void {
repositories::{{SOLVER_INSTANCE}}.boundaryConditions( Qinside, Qoutside, x, t, normal );
},
marker.x(),
marker.h(),
timeStamp,
repositories::{{SOLVER_INSTANCE}}.getMinTimeStepSize(),
{{ORDER}},
{{NUMBER_OF_UNKNOWNS}},
{{NUMBER_OF_AUXILIARY_VARIABLES}},
marker.getSelectedFaceNumber(),
repositories::{{SOLVER_INSTANCE}}.QuadraturePoints1d,
fineGridFace{{UNKNOWN_IDENTIFIER}}EstimateProjection.value
);
"""

Definition at line 51 of file HandleBoundary.py.

Referenced by exahype2.solvers.rkdg.actionsets.HandleBoundary.HandleBoundary.get_body_of_operation().

◆ TemplateHandleBoundary_Prologue

str exahype2.solvers.rkdg.actionsets.HandleBoundary.HandleBoundary.TemplateHandleBoundary_Prologue
static
Initial value:
= """
{% for PREDICATE_NO in range(0,PREDICATES|length) %}
if (
{{PREDICATES[PREDICATE_NO]}}
and
not repositories::{{SOLVER_INSTANCE}}.PeriodicBC[marker.getSelectedFaceNumber()%Dimensions]
and
not marker.hasBeenRefined()
and
fineGridFace{{SOLVER_NAME}}FaceLabel.getBoundary()
) {
const double timeStampOldSolution = fineGridFace{{SOLVER_NAME}}FaceLabel.getOldTimeStamp()(0);
// Set the variable
// double timeStepSize
{{COMPUTE_TIME_STEP_SIZE}}
const double timeStamp = timeStampOldSolution + {{BUTCHER_TABLEAU_RELATIVE_TIME_STEP_SIZES[PREDICATE_NO]}} * timeStepSize;
assertion5( tarch::la::greaterEquals( timeStepSize, 0.0 ), timeStamp, timeStepSize, timeStampOldSolution, marker.toString(), fineGridFace{{SOLVER_NAME}}FaceLabel.toString() );
assertion5( tarch::la::greaterEquals( timeStamp, 0.0 ), timeStamp, timeStepSize, timeStampOldSolution, marker.toString(), fineGridFace{{SOLVER_NAME}}FaceLabel.toString() );
"""

Definition at line 27 of file HandleBoundary.py.

Referenced by exahype2.solvers.rkdg.actionsets.HandleBoundary.HandleBoundary.get_body_of_operation().


The documentation for this class was generated from the following file: