Peano
|
Preprocess the solution and reconstruct halo for this. More...
Public Member Functions | |
__init__ (self, solver, compute_kernel_implementation, enclave_task_cell_label=None) | |
Construct the preprocessing. | |
get_action_set_name (self) | |
Return unique action set name. | |
get_includes (self) | |
Return include statements that you need. | |
Public Member Functions inherited from peano4.toolbox.blockstructured.ReconstructPatchAndApplyFunctor.ReconstructPatchAndApplyFunctor | |
get_constructor_body (self) | |
Define a tailored constructor body. | |
user_should_modify_template (self) | |
Is the user allowed to modify the output. | |
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) | |
Protected Attributes | |
_solver | |
Preprocess the solution and reconstruct halo for this.
This action set preprocesses the solution. By default, it only plugs into the very first grid sweep of a time step. That is, if you have a Runge-Kutta solver and/or enclave solver, these guys usually need multiple sweeps. We only plug into the very first one.
If it becomes active, it first of all creates an array called oldQWithHalo. It is held on the heap and will be destroyed automatically later on. This array is properly befilled. You can postprocess it, but if you alter entries therein, these alterations will be lost after the preprocessing step.
The action set can work in an enclave solver style or as plain invocation. Plain invocation means we just reconstruct the patch plus halo, invoke a compute kernel on it, and then free this reconstruction data structure again.
Enclave-style means that we do the reconstruction, but then embed the actual operation and the freeing into a task. We use the actual enclave task number as task number. Peano does not allow multiple tasks in the system with the same number, so if an enclave task is spawned afterwards, we have a read-write-read dependency.
Definition at line 38 of file PreprocessSolution.py.
exahype2.solvers.rkfd.actionsets.PreprocessSolution.PreprocessReconstructedSolutionWithHalo.__init__ | ( | self, | |
solver, | |||
compute_kernel_implementation, | |||
enclave_task_cell_label = None ) |
Construct the preprocessing.
If we work with an enclave task, the modelling is pretty straightforward. However, we have to explicitly delete the reconstructed data structure oldQWithHalo, as we tell the parent class not to delete stuff. If they deleted the oldQWithHalo, it would be at the end of the function. At this point our task might not have finished yet. We need the delete within the task.
enclave_task_cell_label | String or None If this field is none, we do not use any tasking. If it is a string, we assume it denotes a cell label (usually it is something similar to fineGridCellMySolver_FD4CellLabel). In this case, we spawn a separate task as enclave task. |
Reimplemented from peano4.toolbox.blockstructured.ReconstructPatchAndApplyFunctor.ReconstructPatchAndApplyFunctor.
Definition at line 70 of file PreprocessSolution.py.
References exahype2.solvers.rkfd.actionsets.PreprocessSolution.PreprocessReconstructedSolutionWithHalo.__init__().
Referenced by exahype2.solvers.rkfd.actionsets.PreprocessSolution.PreprocessReconstructedSolutionWithHalo.__init__().
exahype2.solvers.rkfd.actionsets.PreprocessSolution.PreprocessReconstructedSolutionWithHalo.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 141 of file PreprocessSolution.py.
exahype2.solvers.rkfd.actionsets.PreprocessSolution.PreprocessReconstructedSolutionWithHalo.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 145 of file PreprocessSolution.py.
References ComputeFirstDerivatives.ComputeFirstDerivativesFD4RK._solver, 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, and exahype2.solvers.rkfd.actionsets.PreprocessSolution.PreprocessReconstructedSolutionWithHalo.get_includes().
Referenced by exahype2.solvers.rkfd.actionsets.PreprocessSolution.PreprocessReconstructedSolutionWithHalo.get_includes().
|
protected |
Definition at line 139 of file PreprocessSolution.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(), 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.limiting.actionsets.CopyAndConvertPatch.CopyAndConvertPatch.get_body_of_operation(), exahype2.solvers.limiting.actionsets.SaveNewCellData.SaveNewCellData.get_body_of_operation(), exahype2.solvers.limiting.actionsets.SpreadLimiterStatus.SpreadLimiterStatus.get_body_of_operation(), exahype2.solvers.limiting.actionsets.VerifyTroubledness.VerifyTroubledness.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(), exahype2.solvers.aderdg.actionsets.AbstractADERDGActionSet.AbstractADERDGActionSet.get_includes(), exahype2.solvers.aderdg.actionsets.Correction.Correction.get_includes(), exahype2.solvers.aderdg.actionsets.DynamicAMR.DynamicAMR.get_includes(), exahype2.solvers.aderdg.actionsets.HandleBoundary.HandleBoundary.get_includes(), exahype2.solvers.aderdg.actionsets.InitialCondition.InitialCondition.get_includes(), exahype2.solvers.aderdg.actionsets.PostprocessSolution.EmptyPostprocessSolution.get_includes(), exahype2.solvers.aderdg.actionsets.PostprocessSolution.DoFWisePostprocessSolution.get_includes(), exahype2.solvers.aderdg.actionsets.Prediction.Prediction.get_includes(), exahype2.solvers.fv.actionsets.AbstractFVActionSet.AbstractFVActionSet.get_includes(), exahype2.solvers.fv.EnclaveTasking.UpdateCell.get_includes(), exahype2.solvers.fv.SingleSweep.UpdateCell.get_includes(), exahype2.solvers.limiting.actionsets.AbstractLimiterActionSet.AbstractLimiterActionSet.get_includes(), exahype2.solvers.limiting.actionsets.CopyAndConvertPatch.CopyAndConvertPatch.get_includes(), exahype2.solvers.limiting.actionsets.SaveNewCellData.SaveNewCellData.get_includes(), exahype2.solvers.limiting.actionsets.VerifyTroubledness.VerifyTroubledness.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().