Peano 4
Loading...
Searching...
No Matches
ComputeFirstDerivatives.ComputeFirstDerivativesFD4RK Class Reference

Explicit reconstruction of first derivatives for FD4 discretisation. More...

Inheritance diagram for ComputeFirstDerivatives.ComputeFirstDerivativesFD4RK:
Collaboration diagram for ComputeFirstDerivatives.ComputeFirstDerivativesFD4RK:

Public Member Functions

 __init__ (self, solver, is_enclave_solver)
 patch: peano4.datamodel.Patch Patch which is to be used
 
 user_should_modify_template (self)
 Is the user allowed to modify the output.
 
 get_includes (self)
 Return include statements that you need.
 
 get_action_set_name (self)
 Return unique action set name.
 
- Public Member Functions inherited from peano4.toolbox.blockstructured.ReconstructPatchAndApplyFunctor.ReconstructPatchAndApplyFunctor
 get_constructor_body (self)
 Define a tailored constructor body.
 
 get_body_of_operation (self, operation_name)
 Return actual C++ code snippets to be inserted into C++ code.
 
 get_attributes (self)
 Return attributes as copied and pasted into the generated class.
 
- Public Member Functions inherited from peano4.solversteps.ActionSet.ActionSet
 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)
 

Static Public Attributes

 ComputeDerivativesOverCell = jinja2.Template( + )
 
- 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 Member Functions

 _add_action_set_entries_to_dictionary (self, d)
 This is our plug-in point to alter the underlying dictionary.
 

Protected Attributes

 _solver
 
 _butcher_tableau
 
 _use_enclave_solver
 

Additional Inherited Members

- Data Fields inherited from peano4.toolbox.blockstructured.ReconstructPatchAndApplyFunctor.ReconstructPatchAndApplyFunctor
 guard
 
 no_of_unknowns
 
 dofs_per_axis
 
 total_overlap
 
 overlap_name
 
 patch_name
 
 functor_implementation
 
 add_assertions_to_halo_exchange
 
 reconstructed_array_memory_location
 
- Data Fields inherited from peano4.solversteps.ActionSet.ActionSet
 descend_invocation_order
 
 parallel
 
- Static Protected Attributes inherited from peano4.toolbox.blockstructured.ReconstructPatchAndApplyFunctor.ReconstructPatchAndApplyFunctor
str _Template_TouchCellFirstTime_Preamble
 
str _Template_TouchCellFirstTime_Fill_Patch
 
str _Template_TouchCellFirstTime_Fill_Halos
 
str _Template_TouchCellFirstTime_Core
 
str _Template_TouchCellFirstTime_Epilogue
 

Detailed Description

Explicit reconstruction of first derivatives for FD4 discretisation.

FD4 is implemented as Runge-Kutta scheme. So we first have to recompute the current solution guess according to the Butcher tableau. Then we feed this reconstruction into the derivative computation. In theory, this is all simple, but in practice things require more work.

We assume that developers follow ExaHyPE's generic recommendation how to add additional traversals. Yet, this is only half of the story. If they follow the vanilla blueprint and plug into a step after the last time step

if (repositories::isLastGridSweepOfTimeStep()
and
repositories::StepRepository::toStepEnum( peano4::parallel::Node::getInstance().getCurrentProgramStep() ) != repositories::StepRepository::Steps::AdditionalMeshTraversal
) {
peano4::parallel::Node::getInstance().setNextProgramStep(
repositories::StepRepository::toProgramStep( repositories::StepRepository::Steps::AdditionalMeshTraversal )
);
continueToSolve = true;
}

then the reconstruction is only done after the last and final Runge-Kutta step. Alternatively, users might plug into the solver after each Runge-Kutta step. In principle, we might say "so what", as all the right-hand sides after the final step are there, so we can reconstruct the final solution. However, there are two pitfalls:

  1. A solver might not hold the rhs estimates persistently in-between two time steps.
  2. The solver's state always is toggled in startTimeStep() on the solver instance's class. Therefore, an additional grid sweep after the last Runge-Kutta sweep cannot be distinguished from an additional sweep after the whole time step. They are the same.

Consequently, we need special treatment for the very last Runge-Kutta step:

  • If we have an additional grid sweep after an intermediate RK step, we use the right-hand side estimate of \( \partial _t Q = F(Q) \) to store the outcome. Furthermore, we scale the derivative with 1/dt, as the linear combination of RK will later on multiple this estimate with dt again.
  • If we are in the very last grid sweep, we work with the current estimate.

The actual derviative calculation is "outsourced" to the routine

::exahype2::CellData patchData(
oldQWithHalo,
marker.x(), marker.h(),
0.0, // timeStamp => not used here
0.0, // timeStepSize => not used here
newQ
);
::exahype2::fd::fd4::reconstruct_first_derivatives(
patchData,
{{NUMBER_OF_GRID_CELLS_PER_PATCH_PER_AXIS}}, // int numberOfGridCellsPerPatchPerAxis,
{{HALO_SIZE}},
{{NUMBER_OF_UNKNOWNS}},
{{NUMBER_OF_AUXILIARY_VARIABLES}}
);

Wrapping up oldQWithHalo and newQ in a CellData object is a slight overkill (we could have done with only passing the two pointers, as we don't use the time step size or similar anyway), but we follow the general ExaHyPE pattern here - and in theory could rely on someone else later to deploy this to GPUs, e.g.

Right after the reconstruction, we have to project the outcome back again onto the faces. Here, we again have to take into account that we work with a Runge-Kutta scheme. The cell hosts N blocks of cell data for the N shots of Runge-Kutta. The reconstruction writes into the nth block according to the current step. Consequently, the projection also has to work with the nth block. exahype2.solvers.rkfd.actionsets.ProjectPatchOntoFaces provides all the logic for this, so we assume that users add this one to their script. As the present action set plugs into touchCellFirstTime() and the projection onto the faces plugs into touchCellLastTime(), the order is always correct no matter how you prioritise between the different action sets.

Further to the projection, we also have to roll over details. Again, exahype2.solvers.rkfd.actionsets.ProjectPatchOnto has more documentation on this.

Definition at line 55 of file ComputeFirstDerivatives.py.

Constructor & Destructor Documentation

◆ __init__()

ComputeFirstDerivatives.ComputeFirstDerivativesFD4RK.__init__ ( self,
patch,
patch_overlap )

patch: peano4.datamodel.Patch Patch which is to be used

patch_overlap: peano4.datamodel.Patch Consult remark above about how the dimensions of this overlap patch have to match

Functor_implementation

The functor implementation is a plain C/C++

  • If you want to use brackets in your implementation, please use double brackets {{ }} as the template system otherwise gets confused.
  • The following C++ variables are defined:

oldQWithHalo newQ

Both are plain double pointers.

Data validation

I use quite a lot of validitiy checks for the copied data via comparison to its self. This way, I can at least spot nans. I use the dictionary entries ASSERTION_WITH_X_ARGUMENTS to realise this, and they are, by default, set to Peano's assertion macros. You can redefine them.

Reimplemented from peano4.toolbox.blockstructured.ReconstructPatchAndApplyFunctor.ReconstructPatchAndApplyFunctor.

Definition at line 144 of file ComputeFirstDerivatives.py.

References ComputeFirstDerivatives.ComputeFirstDerivativesFD4RK.__init__().

Referenced by ComputeFirstDerivatives.ComputeFirstDerivativesFD4RK.__init__().

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

Member Function Documentation

◆ _add_action_set_entries_to_dictionary()

ComputeFirstDerivatives.ComputeFirstDerivativesFD4RK._add_action_set_entries_to_dictionary ( self,
d )
protected

This is our plug-in point to alter the underlying dictionary.

Reimplemented from peano4.toolbox.blockstructured.ReconstructPatchAndApplyFunctor.ReconstructPatchAndApplyFunctor.

Definition at line 249 of file ComputeFirstDerivatives.py.

References ComputeFirstDerivatives.ComputeFirstDerivativesFD4RK._add_action_set_entries_to_dictionary(), ComputeFirstDerivatives.ComputeFirstDerivativesFD4RK._butcher_tableau, 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, ComputeFirstDerivatives.ComputeFirstDerivativesFD4RK._solver, limiting.actionsets.AbstractLimiterActionSet.AbstractLimiterActionSet._solver, exahype2.solvers.aderdg.actionsets.AbstractAderDGActionSet.AbstractAderDGActionSet._solver, exahype2.solvers.fv.actionsets.AbstractFVActionSet.AbstractFVActionSet._solver, PointWiseClawPackAdaptiveTimeStepSize.UpdateCell._solver, exahype2.solvers.fv.EnclaveTasking.UpdateCell._solver, exahype2.solvers.fv.SingleSweep.UpdateCell._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, ComputeFirstDerivatives.ComputeFirstDerivativesFD4RK._use_enclave_solver, and ComputeFirstDerivatives.ComputeFirstDerivativesFD4RK.ComputeDerivativesOverCell.

Referenced by ComputeFirstDerivatives.ComputeFirstDerivativesFD4RK._add_action_set_entries_to_dictionary(), and peano4.toolbox.blockstructured.ReconstructPatchAndApplyFunctor.ReconstructPatchAndApplyFunctor.get_body_of_operation().

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

◆ get_action_set_name()

ComputeFirstDerivatives.ComputeFirstDerivativesFD4RK.get_action_set_name ( self)

Return unique action set name.

Returns a description (word) for the mapping which is also used as class name for the generated type. As a consequence, the result should be one word (if possible) and uppercase. Also, every subclass should overwrite this routine.

The generator will take the result and construct eventually classes similar to MyStep2Dummy.h and MyStep2Dummy.cpp or similar for the example below, where we return Dummy.

Reimplemented from peano4.toolbox.blockstructured.ReconstructPatchAndApplyFunctor.ReconstructPatchAndApplyFunctor.

Definition at line 283 of file ComputeFirstDerivatives.py.

◆ get_includes()

ComputeFirstDerivatives.ComputeFirstDerivativesFD4RK.get_includes ( self)

Return include statements that you need.

All of these includes will eventually end up in the header of the generated C++ code.

Reimplemented from peano4.toolbox.blockstructured.ReconstructPatchAndApplyFunctor.ReconstructPatchAndApplyFunctor.

Definition at line 242 of file ComputeFirstDerivatives.py.

References ComputeFirstDerivatives.ComputeFirstDerivativesFD4RK.get_includes().

Referenced by ComputeFirstDerivatives.ComputeFirstDerivativesFD4RK.get_includes().

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

◆ user_should_modify_template()

ComputeFirstDerivatives.ComputeFirstDerivativesFD4RK.user_should_modify_template ( self)

Is the user allowed to modify the output.

Return whether you expect the user to modify the generated code. If this is the case, then the API places the generated output in the directory actions. Otherwise, it goes into the observer directory and will be overwritten in each and every Python run.

Reimplemented from peano4.toolbox.blockstructured.ReconstructPatchAndApplyFunctor.ReconstructPatchAndApplyFunctor.

Definition at line 238 of file ComputeFirstDerivatives.py.

Field Documentation

◆ _butcher_tableau

ComputeFirstDerivatives.ComputeFirstDerivativesFD4RK._butcher_tableau
protected

Definition at line 158 of file ComputeFirstDerivatives.py.

Referenced by ComputeFirstDerivatives.ComputeFirstDerivativesFD4RK._add_action_set_entries_to_dictionary(), exahype2.solvers.rkfd.OneSweepPerRungeKuttaStep.UpdateCell._add_action_set_entries_to_dictionary(), exahype2.solvers.rkfd.SeparateSweeps.UpdateCell._add_action_set_entries_to_dictionary(), exahype2.solvers.rkfd.SeparateSweepsWithEnclaveTasking.UpdateCell._add_action_set_entries_to_dictionary(), exahype2.solvers.rkdg.actionsets.AddVolumeAndFaceSolution.AddVolumeAndFaceSolution.get_body_of_operation(), exahype2.solvers.rkdg.actionsets.ComputeFinalLinearCombination.ComputeFinalLinearCombination.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.ComputeFinalLinearCombination.ComputeFinalLinearCombination.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().

◆ _solver

ComputeFirstDerivatives.ComputeFirstDerivativesFD4RK._solver
protected

Definition at line 157 of file ComputeFirstDerivatives.py.

Referenced by ComputeFirstDerivatives.ComputeFirstDerivativesFD4RK._add_action_set_entries_to_dictionary(), exahype2.solvers.fv.EnclaveTasking.UpdateCell._add_action_set_entries_to_dictionary(), exahype2.solvers.fv.SingleSweep.UpdateCell._add_action_set_entries_to_dictionary(), exahype2.solvers.rkfd.OneSweepPerRungeKuttaStep.UpdateCell._add_action_set_entries_to_dictionary(), exahype2.solvers.rkfd.SeparateSweeps.UpdateCell._add_action_set_entries_to_dictionary(), exahype2.solvers.rkfd.SeparateSweepsWithEnclaveTasking.UpdateCell._add_action_set_entries_to_dictionary(), exahype2.solvers.rkdg.actionsets.AdaptivityCriterion.AdaptivityCriterion.event_lifetime(), limiting.actionsets.CopyAndConvertPatch.CopyAndConvertPatch.get_body_of_operation(), limiting.actionsets.SaveNewCellData.SaveNewCellData.get_body_of_operation(), limiting.actionsets.SpreadLimiterStatus.SpreadLimiterStatus.get_body_of_operation(), limiting.actionsets.VerifyTroubledness.VerifyTroubledness.get_body_of_operation(), exahype2.solvers.aderdg.actionsets.AdaptivityCriterion.AdaptivityCriterion.get_body_of_operation(), exahype2.solvers.aderdg.actionsets.Correction.Correction.get_body_of_operation(), exahype2.solvers.aderdg.actionsets.DynamicAMR.DynamicAMR.get_body_of_operation(), exahype2.solvers.aderdg.actionsets.HandleBoundary.HandleBoundary.get_body_of_operation(), exahype2.solvers.aderdg.actionsets.InitialCondition.InitialCondition.get_body_of_operation(), exahype2.solvers.aderdg.actionsets.PostprocessSolution.EmptyPostprocessSolution.get_body_of_operation(), exahype2.solvers.aderdg.actionsets.PostprocessSolution.DoFWisePostprocessSolution.get_body_of_operation(), exahype2.solvers.aderdg.actionsets.PostprocessSolution.CellWisePostprocessSolution.get_body_of_operation(), exahype2.solvers.aderdg.actionsets.Prediction.Prediction.get_body_of_operation(), exahype2.solvers.fv.actionsets.AdaptivityCriterion.AdaptivityCriterion.get_body_of_operation(), exahype2.solvers.fv.actionsets.InitialCondition.InitialCondition.get_body_of_operation(), exahype2.solvers.fv.actionsets.PostprocessSolution.VolumeWisePostprocessSolution.get_body_of_operation(), exahype2.solvers.fv.actionsets.PreprocessSolution.VolumeWisePreprocessSolution.get_body_of_operation(), exahype2.solvers.fv.actionsets.RollOverUpdatedFace.RollOverUpdatedFace.get_body_of_operation(), exahype2.solvers.fv.EnclaveTasking.MergeEnclaveTaskOutcome.get_body_of_operation(), exahype2.solvers.rkdg.actionsets.AdaptivityCriterion.AdaptivityCriterion.get_body_of_operation(), exahype2.solvers.rkdg.actionsets.AddVolumeAndFaceSolution.AddVolumeAndFaceSolution.get_body_of_operation(), exahype2.solvers.rkdg.actionsets.ComputeFinalLinearCombination.ComputeFinalLinearCombination.get_body_of_operation(), exahype2.solvers.rkdg.actionsets.DynamicAMR.DynamicAMR.get_body_of_operation(), exahype2.solvers.rkdg.actionsets.HandleBoundary.HandleBoundary.get_body_of_operation(), exahype2.solvers.rkdg.actionsets.InitialCondition.InitialCondition.get_body_of_operation(), exahype2.solvers.rkdg.actionsets.LinearCombinationOfEstimates.LinearCombinationOfEstimates.get_body_of_operation(), exahype2.solvers.rkdg.actionsets.PostprocessSolution.DoFWisePostprocessSolution.get_body_of_operation(), exahype2.solvers.rkdg.actionsets.PostprocessSolution.CellWisePostprocessSolution.get_body_of_operation(), exahype2.solvers.rkdg.actionsets.PreprocessSolution.DoFWisePreprocessSolution.get_body_of_operation(), exahype2.solvers.rkdg.actionsets.PreprocessSolution.CellWisePreprocessSolution.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.rkdg.SeparateSweepsWithEnclaveTasking.MergeEnclaveTaskOutcome.get_body_of_operation(), exahype2.solvers.rkfd.actionsets.AdaptivityCriterion.AdaptivityCriterion.get_body_of_operation(), exahype2.solvers.rkfd.actionsets.ComputeFinalLinearCombination.ComputeFinalLinearCombination.get_body_of_operation(), exahype2.solvers.rkfd.actionsets.InitialCondition.InitialCondition.get_body_of_operation(), exahype2.solvers.rkfd.actionsets.LinearCombinationOfEstimates.LinearCombinationOfEstimates.get_body_of_operation(), exahype2.solvers.rkfd.actionsets.PostprocessSolution.PatchWisePostprocessSolution.get_body_of_operation(), exahype2.solvers.rkfd.actionsets.PostprocessSolution.CellWisePostprocessSolution.get_body_of_operation(), exahype2.solvers.rkfd.actionsets.PreprocessSolution.CellWisePreprocessSolution.get_body_of_operation(), exahype2.solvers.rkfd.actionsets.ProjectPatchOntoFaces.ProjectPatchOntoFaces.get_body_of_operation(), exahype2.solvers.rkfd.SeparateSweepsWithEnclaveTasking.MergeEnclaveTaskOutcome.get_body_of_operation(), limiting.actionsets.AbstractLimiterActionSet.AbstractLimiterActionSet.get_includes(), exahype2.solvers.aderdg.actionsets.AbstractAderDGActionSet.AbstractAderDGActionSet.get_includes(), exahype2.solvers.aderdg.actionsets.Correction.Correction.get_includes(), exahype2.solvers.aderdg.actionsets.Prediction.Prediction.get_includes(), exahype2.solvers.fv.actionsets.AbstractFVActionSet.AbstractFVActionSet.get_includes(), PointWiseClawPackAdaptiveTimeStepSize.UpdateCell.get_includes(), exahype2.solvers.fv.EnclaveTasking.UpdateCell.get_includes(), exahype2.solvers.fv.SingleSweep.UpdateCell.get_includes(), exahype2.solvers.rkdg.actionsets.AbstractRungeKuttaDGActionSet.AbstractRungeKuttaDGActionSet.get_includes(), exahype2.solvers.rkdg.actionsets.SolveVolumeIntegral.SolveVolumeIntegral.get_includes(), exahype2.solvers.rkfd.actionsets.AbstractRKFDActionSet.AbstractRKFDActionSet.get_includes(), exahype2.solvers.rkfd.actionsets.PreprocessSolution.PreprocessReconstructedSolutionWithHalo.get_includes(), exahype2.solvers.rkfd.OneSweepPerRungeKuttaStep.UpdateCell.get_includes(), exahype2.solvers.rkfd.SeparateSweeps.UpdateCell.get_includes(), exahype2.solvers.rkfd.SeparateSweepsWithEnclaveTasking.UpdateCell.get_includes(), 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(), and exahype2.solvers.rkfd.actionsets.ProjectPatchOntoFaces.ProjectPatchOntoFaces.guards().

◆ _use_enclave_solver

ComputeFirstDerivatives.ComputeFirstDerivativesFD4RK._use_enclave_solver
protected

◆ ComputeDerivativesOverCell

ComputeFirstDerivatives.ComputeFirstDerivativesFD4RK.ComputeDerivativesOverCell = jinja2.Template( + )
static

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