Peano
Loading...
Searching...
No Matches
exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler Class Reference

Finite Volumes with a Rusanov Riemann solver and optimistic explicit Euler time stepping, realised over a block-structured mesh. More...

Inheritance diagram for exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler:
Collaboration diagram for exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler:

Public Member Functions

 __init__ (self, Solver solver, int patch_size, int overlap=1, float cfl_constant=0.9, float damp_time_step_size=0.95, bool spawn_optimistic_calculations_as_task=True, float min_volume_size=None, float max_volume_size=None)
 The constructor memorises the attributes.
 
str kernel_function_name (self)
 Name of the generated time step kernel.
 
Solver.MeshAdaptation create_default_mesh_adaptation (self)
 The Finite Volume schemes adapt the mesh and balance the load through exahype2.api.fv.AdaptMeshAndBalanceLoad by default.
 
 construct_output (self, exahype2_project, peano_project, time_step)
 Has to be implemented by subclass.
 

Data Fields

 min_volume_size
 
 max_volume_size
 
 patch_size
 Optimistic branch: insert the patch interior once the shell is updated.
 
 overlap
 Optimistic branch: insert the patch interior once the shell is updated.
 
 kernel_namespace
 
 cfl_constant
 Both branches: reduce the cells' maximum eigenvalues into the next time step size.
 
 damp_time_step_size
 Both branches: spawn the next time step's patch interior update.
 
 spawn_optimistic_calculations_as_task
 

Protected Attributes

 _solver
 Build the reconstruction tasks befilling the patch_with_halo, which is logically temporary.
 
- Protected Attributes inherited from exahype2.api.Solver.Solver.NumericalScheme
 _solver
 

Private Member Functions

 __create_data_structures (self)
 Create the mesh data structures (a Finite Volume patch per cell, plus the face-based overlap patches used to reconstruct its halo) this numerical scheme requires.
 
 __add_data_to_repository (self, peano_project)
 Consult Introduce a new numerical scheme for some information how this routine fits to the typical workflow when we introduce a new solver.
 
 __create_time_step_functions (self, output_directory)
 Calling this function is delayed until all PDE term information is provided.
 
 __construct_kernel_call (self, Target target, bool stateless, str function_name=None)
 This function constructs the calls to the compute kernels based on the application PDE terms and the version chosen.
 

Detailed Description

Finite Volumes with a Rusanov Riemann solver and optimistic explicit Euler time stepping, realised over a block-structured mesh.

Design idea

The finite volume solver operates over a block-structured mesh, where each cell of the mesh holds a patch of finite volumes. This solver's fundamental idea is that it splits up the patch into three classes of volumes. Assume we have a NxNxN patch of volumes, where N is the patch_size, and this patch is surrounded by a halo of size H. So we have in total a (N+2H)x(N+2H)x(N+2H) patch that feeds into the time stepping as reconstructed patch. We now distinguish three classes of volumes:

  • The halo cells
  • The shell cells, which is the outer layer of the NxNxN arrangement.
  • The patch interior cells, which are the remaining volumes in the interior of the patch, so effectively a (N-2H)x(N-2H)x(N-2H) patch.

The sketch below shows the three classes for a 2d patch with N=10 and H=1. It is generated by src/exahype2/api/fv/rusanov-with-optimistic-explicit-euler-illustrations.py.

For the new solver, we now define two new update kernels:

  • timeStepWithRusanov2DOnPatchInterior which is timeStepWithRusanov2D but acts only on the patch interior.
  • timeStepWithRusanov2DOnShell which works only on the shell.

The 3D variants follow equivalently.

Time stepping

Every time step either runs the traditional branch (Update cell and Discard patch interior) or the optimistic branch (Update cell shell and Insert patch interior). The traditional branch runs if the solver's time step size is zero, or if the estimated time step size, i.e. the second entry of the eigenvalue data, exceeds it. The optimistic branch runs otherwise. Project on faces, Compute global CFL condition and Spawn patch interior update follow either branch. If at least one axis of the domain is not periodic and the solver uses Dirichlet boundary conditions, Apply Dirichlet BCs sets the ghost volumes along the domain boundary before Reconstruct reads them (

See also
exahype2.api.fv.actionsets.ApplyDirichletBoundaryConditions). With Sommerfeld boundary conditions, the task does not exist, and the roll over within Project on faces advances the ghost volumes instead (
exahype2.api.fv.actionsets.RollOverUpdatedFaceWithSommerfeldBoundaryConditions). If all axes are periodic, there is no boundary treatment at all. The task graph below is generated by src/exahype2/api/fv/rusanov-with-optimistic-explicit-euler-illustrations.py from this class for a domain without periodic boundaries.

The estimate is the admissible time step size of the current time step, i.e. the one the solver could have chosen if it had not been enforced to use a smaller one, times damp_time_step_size. Reconstruct memorises the admissible time step size per cell (

See also
exahype2.api.fv.actionsets.ReadjustTimeStepSizeForOptimisticGlobalTimestepping), and Spawn patch interior update damps it (
exahype2.api.fv.actionsets.SpawnTaskToUpdateCellInterior). As the admissible time step size is never damped itself, the estimates do not shrink from time step to time step:
  • Time step 0 runs with time step size 0, as the admissible time step size is not known yet. Update cell runs but does not change the solution, and Compute global CFL condition yields the first time step size dt0. There is no admissible time step size to estimate from, so the spawn does not update the patch interior.
  • Time step 1 runs with dt0 down the traditional branch. The spawn updates the patch interior with damp_time_step_size*dt0.
  • Time step 2 finds this estimate to be smaller than the admissible time step size dt1. It enforces the estimate as time step size and runs the optimistic branch.

Compute global CFL condition does not only compute the next time step size, it also makes it the solver's time step size and time stamp straightaway (

See also
exahype2.api.fv.actionsets.ComputeGlobalCFLCondition). It therefore depends on the spawn, which still sees the time stamp and time step size of the current time step and starts the patch interior update from their sum. The order in which the tasks are added to the task graph does not matter.

If spawn_optimistic_calculations_as_task is set, the spawn runs the patch interior update as a task. Insert patch interior waits for this task before it copies the patch interior into the patch, and Discard patch interior waits for it, too, so no task is still running when the next one is spawned. The task numbers are held per cell.

Definition at line 782 of file RusanovWithOptimisticExplicitEuler.py.

Constructor & Destructor Documentation

◆ __init__()

exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.__init__ (   self,
Solver  solver,
int  patch_size,
int   overlap = 1,
float   cfl_constant = 0.9,
float   damp_time_step_size = 0.95,
bool   spawn_optimistic_calculations_as_task = True,
float   min_volume_size = None,
float   max_volume_size = None 
)

The constructor memorises the attributes.

However, it does not do this within this class, but it adds the important properties straight to the solver, so anybody else working against this solver knows about the properties introduced by the numerical scheme.

See also
__create_data_structures()

patch_size: int Number of Finite Volumes per axis within one patch (i.e. within one mesh cell).

overlap: int Number of Finite Volumes the halo layer reconstructed around a patch - from the neighbouring patches' faces - is wide.

cfl_constant: float Safety factor the admissible time step size (

See also
exahype2.api.fv.actionsets.ComputeGlobalCFLCondition, which this is passed straight through to) is scaled down by, relative to the theoretical CFL=1 stability limit h / (Dimensions * lambda_max). 0.9 is a conservative default for an explicit-Euler Finite Volume scheme; this codebase has no prior precedent value to match (grep for "cfl" outside this class finds only exaparty's unrelated SPH solvers, which default to 0.1).

damp_time_step_size: float Factor, smaller or equal to one, which the current time step size is multiplied with to estimate the time step size of the patch interior update (

See also
exahype2.api.fv.actionsets.SpawnTaskToUpdateCellInterior).

spawn_optimistic_calculations_as_task: bool If True, Spawn patch interior update spawns the patch interior update as a task, and Insert patch interior and Discard patch interior wait for this task. The task number is held per cell (

See also
__create_data_structures()). If False, Spawn patch interior update runs the patch interior update straightaway.

min_volume_size: float The time step asks for a refinement of a cell only if its volumes are at least of this size (exahype2.api.blockstructured.DynamicMeshRefinement). None (the default) does not bound the refinement.

max_volume_size: float The time step asks for an erase, i.e. coarsening, of a cell only if the volumes of the coarser cell would be strictly smaller than this size. None (the default) does not bound the coarsening.

Reimplemented from exahype2.api.Solver.Solver.NumericalScheme.

Definition at line 878 of file RusanovWithOptimisticExplicitEuler.py.

References exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.__init__().

Referenced by exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.__init__().

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

Member Function Documentation

◆ __add_data_to_repository()

exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.__add_data_to_repository (   self,
  peano_project 
)
private

Consult Introduce a new numerical scheme for some information how this routine fits to the typical workflow when we introduce a new solver.

Definition at line 1113 of file RusanovWithOptimisticExplicitEuler.py.

References solvers.aderdg.actionsets.AbstractADERDGActionSet.AbstractADERDGActionSet._solver, solvers.fv.actionsets.AbstractFVActionSet.AbstractFVActionSet._solver, solvers.fv.EnclaveTasking.UpdateCell._solver, solvers.fv.SingleSweep.UpdateCell._solver, solvers.limiting.actionsets.AbstractLimiterActionSet.AbstractLimiterActionSet._solver, solvers.rkdg.actionsets.AbstractRungeKuttaDGActionSet.AbstractRungeKuttaDGActionSet._solver, exagrype.api.FD4WithKODissipation.FD4WithKODissipation._solver, exahype2.api.blockstructured.AdaptMeshAndBalanceLoad.AdaptMeshAndBalanceLoad._solver, exahype2.api.blockstructured.ConsumeRefinementRequests.ConsumeRefinementRequests._solver, exahype2.api.blockstructured.DynamicMeshRefinement.DynamicMeshRefinement._solver, exahype2.api.blockstructured.LoadCheckpoint._LoadPatchesFromCheckpoint._solver, exahype2.api.blockstructured.LoadCheckpoint.LoadCheckpoint._solver, exahype2.api.fv.actionsets.AbstractFVActionSet.AbstractFVActionSet._solver, exahype2.api.fv.actionsets.ApplyDirichletBoundaryConditions.ApplyDirichletBoundaryConditions._solver, exahype2.api.fv.actionsets.DiscardPatchInterior.DiscardPatchInterior._solver, exahype2.api.fv.AdaptMeshAndBalanceLoad.AdaptMeshAndBalanceLoad._solver, exahype2.api.fv.PlotAsVTKFile.PlotAsVTKFile._solver, exahype2.api.fv.RusanovWithExplicitEuler.RusanovWithExplicitEuler._solver, exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler._solver, exahype2.api.fv.SetupSimulationOverRegularGrid.SetupSimulationOverRegularGrid._solver, exahype2.api.fv.SetupSimulationWithUserCodedRefinementCriterion.SetupSimulationWithUserCodedRefinementCriterion._solver, exahype2.api.fv.WriteCheckpoint.WriteCheckpoint._solver, exahype2.api.rkfd4.actionsets.AbstractRKFD4ActionSet.AbstractRKFD4ActionSet._solver, exahype2.api.rkfd4.actionsets.ApplyDirichletBoundaryConditions.ApplyDirichletBoundaryConditions._solver, exahype2.api.rkfd4.AdaptMeshAndBalanceLoad.AdaptMeshAndBalanceLoad._solver, exahype2.api.rkfd4.CentralDifferencesWithRungeKutta.CentralDifferencesWithRungeKutta._solver, exahype2.api.rkfd4.PlotAsVTKFile.PlotAsVTKFile._solver, exahype2.api.rkfd4.SetupSimulationOverRegularGrid.SetupSimulationOverRegularGrid._solver, exahype2.api.rkfd4.WriteCheckpoint.WriteCheckpoint._solver, exahype2.api.Solver.Solver.SolverGenerator._solver, exahype2.api.Solver.Solver.NumericalScheme._solver, exahype2.api.Solver.Solver.GridConstruction._solver, exahype2.api.Solver.Solver.Plotter._solver, exahype2.api.Solver.Solver.MeshAdaptation._solver, 20_additional-solver-steps.RusanovWithDensityFloor._solver, and 20_additional-solver-steps.RungeKuttaWithDensityFloor._solver.

Referenced by exahype2.api.fv.RusanovWithExplicitEuler.RusanovWithExplicitEuler.construct_output(), exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.construct_output(), and exahype2.api.rkfd4.CentralDifferencesWithRungeKutta.CentralDifferencesWithRungeKutta.construct_output().

Here is the caller graph for this function:

◆ __construct_kernel_call()

exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.__construct_kernel_call (   self,
Target  target,
bool  stateless,
str   function_name = None 
)
private

This function constructs the calls to the compute kernels based on the application PDE terms and the version chosen.

Parameters
function_namestr Name of the kernel to call. Defaults to kernel_function_name, i.e. the kernel updating the whole patch.

Definition at line 1556 of file RusanovWithOptimisticExplicitEuler.py.

References solvers.aderdg.actionsets.AbstractADERDGActionSet.AbstractADERDGActionSet._solver, solvers.fv.actionsets.AbstractFVActionSet.AbstractFVActionSet._solver, solvers.fv.EnclaveTasking.UpdateCell._solver, solvers.fv.SingleSweep.UpdateCell._solver, solvers.limiting.actionsets.AbstractLimiterActionSet.AbstractLimiterActionSet._solver, solvers.rkdg.actionsets.AbstractRungeKuttaDGActionSet.AbstractRungeKuttaDGActionSet._solver, exagrype.api.FD4WithKODissipation.FD4WithKODissipation._solver, exahype2.api.blockstructured.AdaptMeshAndBalanceLoad.AdaptMeshAndBalanceLoad._solver, exahype2.api.blockstructured.ConsumeRefinementRequests.ConsumeRefinementRequests._solver, exahype2.api.blockstructured.DynamicMeshRefinement.DynamicMeshRefinement._solver, exahype2.api.blockstructured.LoadCheckpoint._LoadPatchesFromCheckpoint._solver, exahype2.api.blockstructured.LoadCheckpoint.LoadCheckpoint._solver, exahype2.api.fv.actionsets.AbstractFVActionSet.AbstractFVActionSet._solver, exahype2.api.fv.actionsets.ApplyDirichletBoundaryConditions.ApplyDirichletBoundaryConditions._solver, exahype2.api.fv.actionsets.DiscardPatchInterior.DiscardPatchInterior._solver, exahype2.api.fv.AdaptMeshAndBalanceLoad.AdaptMeshAndBalanceLoad._solver, exahype2.api.fv.PlotAsVTKFile.PlotAsVTKFile._solver, exahype2.api.fv.RusanovWithExplicitEuler.RusanovWithExplicitEuler._solver, exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler._solver, exahype2.api.fv.SetupSimulationOverRegularGrid.SetupSimulationOverRegularGrid._solver, exahype2.api.fv.SetupSimulationWithUserCodedRefinementCriterion.SetupSimulationWithUserCodedRefinementCriterion._solver, exahype2.api.fv.WriteCheckpoint.WriteCheckpoint._solver, exahype2.api.rkfd4.actionsets.AbstractRKFD4ActionSet.AbstractRKFD4ActionSet._solver, exahype2.api.rkfd4.actionsets.ApplyDirichletBoundaryConditions.ApplyDirichletBoundaryConditions._solver, exahype2.api.rkfd4.AdaptMeshAndBalanceLoad.AdaptMeshAndBalanceLoad._solver, exahype2.api.rkfd4.CentralDifferencesWithRungeKutta.CentralDifferencesWithRungeKutta._solver, exahype2.api.rkfd4.PlotAsVTKFile.PlotAsVTKFile._solver, exahype2.api.rkfd4.SetupSimulationOverRegularGrid.SetupSimulationOverRegularGrid._solver, exahype2.api.rkfd4.WriteCheckpoint.WriteCheckpoint._solver, exahype2.api.Solver.Solver.SolverGenerator._solver, exahype2.api.Solver.Solver.NumericalScheme._solver, exahype2.api.Solver.Solver.GridConstruction._solver, exahype2.api.Solver.Solver.Plotter._solver, exahype2.api.Solver.Solver.MeshAdaptation._solver, 20_additional-solver-steps.RusanovWithDensityFloor._solver, 20_additional-solver-steps.RungeKuttaWithDensityFloor._solver, exahype2.api.fv.RusanovWithExplicitEuler.RusanovWithExplicitEuler.kernel_function_name(), and exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.kernel_function_name().

Referenced by exahype2.api.fv.RusanovWithExplicitEuler.RusanovWithExplicitEuler.construct_output(), exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.construct_output(), and exahype2.api.rkfd4.CentralDifferencesWithRungeKutta.CentralDifferencesWithRungeKutta.construct_output().

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

◆ __create_data_structures()

exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.__create_data_structures (   self)
private

Create the mesh data structures (a Finite Volume patch per cell, plus the face-based overlap patches used to reconstruct its halo) this numerical scheme requires.

Ported from the legacy exahype2.solvers.fv.FV.create_data_structures(): one peano4.api.datamodel.Patch of patch_size^d Finite Volumes per mesh cell (_patch), plus a halo-augmented copy of it (_patch_with_halo, (patch_size+2*overlap)^d,

See also
toolbox.blockstructured.api.ReconstructPatchWithHalo) and two overlap patches of width 2*overlap attached to the mesh faces:
  • _patch_overlap_current_time_step: the persistent halo data toolbox.blockstructured.api.ReconstructPatchWithHalo reads from to rebuild _patch_with_halo (
    See also
    construct_output(), which hands it _patch/_patch_overlap_current_time_step/_patch_with_halo directly rather than the whole solver).
  • _patch_overlap_update: the projection of the just-updated _patch accumulated by the current sweep (
    See also
    exahype2.api.fv.actionsets.ProjectPatchOntoFaces), rolled over into _patch_overlap_current_time_step by exahype2.api.fv.actionsets.RollOverUpdatedFace once the update is complete.
  • _max_eigenvalue_and_time_step_sizes: four doubles per cell, named after the solver followed by MaxEigenvalueAndTimeStepSizes (e.g. EulerFVSmoothMaxEigenvalueAndTimeStepSizes). exahype2.api.fv.RusanovWithExplicitEuler calls the corresponding data _max_eigenvalue. exahype2.api.fv.actionsets.UpdateCell and exahype2.api.fv.actionsets.ComputeGlobalCFLCondition are shared with that scheme and hence are handed this data explicitly. It is modelled via DaStGen2 as an array of cardinality four. The array is a peano4.api.dastgen2.Peano4SmartPointerDoubleArray, i.e. the values reside on the heap. The four entries are used as follows:
    • Entry 0 holds the maximum eigenvalue of the patch. exahype2.api.fv.actionsets.UpdateCell writes the one of the whole patch into it, while exahype2.api.fv.actionsets.UpdateCellShell writes the one of the shell only. exahype2.api.fv.actionsets.InsertPatchInterior eventually replaces it with the maximum of entries 0 and 2, so it then holds the one of the whole patch, too. exahype2.api.fv.actionsets.ComputeGlobalCFLCondition reduces entry 0 of all cells into the next time step size.
    • Entry 1 holds the estimated time step size of the patch interior update, i.e. entry 3 times damp_time_step_size, as written by exahype2.api.fv.actionsets.SpawnTaskToUpdateCellInterior.
    • Entry 2 holds the maximum eigenvalue of the patch interior, as written by exahype2.api.fv.actionsets.UpdateCellInterior when exahype2.api.fv.actionsets.SpawnTaskToUpdateCellInterior updates the patch interior.
    • Entry 3 holds the time step size the solver could have chosen in the current time step if it had not been enforced to use a smaller one, i.e. the admissible time step size, as written by exahype2.api.fv.actionsets.ReadjustTimeStepSizeForOptimisticGlobalTimestepping.
  • _patch_interior: the patch interior, i.e. the patch without its shell, so (patch_size-2*overlap)^d Finite Volumes. It matches the region timeStepWithRusanov2DOnPatchInterior() and timeStepWithRusanov3DOnPatchInterior() update.
  • _optimistic_cell_update_task_number: only if spawn_optimistic_calculations_as_task is set, otherwise None. One integer per cell, named after the solver followed by OptimisticCellUpdateTaskNumber (e.g. EulerFVSmoothOptimisticCellUpdateTaskNumber), which holds the number of the task updating the patch interior, or tarch::multicore::TaskEnumerator::NoNumber if there is none. The class furthermore holds a static tarch::multicore::TaskEnumerator (getTaskEnumerator()) handing out the task numbers.

All six are assigned onto self._solver (the shared exahype2.api.Solver instance both this numerical scheme and its surrounding solver's Solver.GridConstruction/Solver.Plotter counterparts hold a reference to as self._solver), not onto self, since the remaining FV action sets that need them -

See also
exahype2.api.fv.actionsets.ApplyDirichletBoundaryConditions, exahype2.api.fv.actionsets.UpdateCell, exahype2.api.fv.actionsets.ComputeGlobalCFLCondition - are handed that shared solver and look the patches up as solver._patch / solver._patch_overlap_*.

Storage is hardwired to smart pointers (peano4.api.datamodel's PatchToDoubleArrayWithSmartPointer), matching the legacy default (Storage.SmartPointers for both cell and face data) - the legacy Storage enum's other two backends (CallStack, Heap) are not exposed here.

Two pieces of the legacy method are deliberately not ported yet:

  • The cell/face label creation (exahype2.grid.create_cell_label()/create_face_label()) - that module has not been ported to the new API.
  • The load/store/compute guards (FV._provide_cell_data_to_compute_kernels_default_guard() and friends) - they are keyed off the legacy SolverState state machine, which the task-graph architecture has no equivalent of: a task only ever runs within its own phase's task graph in the first place, so "are we still constructing the grid" does not need to be re-checked at runtime the same way.

Definition at line 960 of file RusanovWithOptimisticExplicitEuler.py.

References solvers.aderdg.actionsets.AbstractADERDGActionSet.AbstractADERDGActionSet._solver, solvers.fv.actionsets.AbstractFVActionSet.AbstractFVActionSet._solver, solvers.fv.EnclaveTasking.UpdateCell._solver, solvers.fv.SingleSweep.UpdateCell._solver, solvers.limiting.actionsets.AbstractLimiterActionSet.AbstractLimiterActionSet._solver, solvers.rkdg.actionsets.AbstractRungeKuttaDGActionSet.AbstractRungeKuttaDGActionSet._solver, exagrype.api.FD4WithKODissipation.FD4WithKODissipation._solver, exahype2.api.blockstructured.AdaptMeshAndBalanceLoad.AdaptMeshAndBalanceLoad._solver, exahype2.api.blockstructured.ConsumeRefinementRequests.ConsumeRefinementRequests._solver, exahype2.api.blockstructured.DynamicMeshRefinement.DynamicMeshRefinement._solver, exahype2.api.blockstructured.LoadCheckpoint._LoadPatchesFromCheckpoint._solver, exahype2.api.blockstructured.LoadCheckpoint.LoadCheckpoint._solver, exahype2.api.fv.actionsets.AbstractFVActionSet.AbstractFVActionSet._solver, exahype2.api.fv.actionsets.ApplyDirichletBoundaryConditions.ApplyDirichletBoundaryConditions._solver, exahype2.api.fv.actionsets.DiscardPatchInterior.DiscardPatchInterior._solver, exahype2.api.fv.AdaptMeshAndBalanceLoad.AdaptMeshAndBalanceLoad._solver, exahype2.api.fv.PlotAsVTKFile.PlotAsVTKFile._solver, exahype2.api.fv.RusanovWithExplicitEuler.RusanovWithExplicitEuler._solver, exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler._solver, exahype2.api.fv.SetupSimulationOverRegularGrid.SetupSimulationOverRegularGrid._solver, exahype2.api.fv.SetupSimulationWithUserCodedRefinementCriterion.SetupSimulationWithUserCodedRefinementCriterion._solver, exahype2.api.fv.WriteCheckpoint.WriteCheckpoint._solver, exahype2.api.rkfd4.actionsets.AbstractRKFD4ActionSet.AbstractRKFD4ActionSet._solver, exahype2.api.rkfd4.actionsets.ApplyDirichletBoundaryConditions.ApplyDirichletBoundaryConditions._solver, exahype2.api.rkfd4.AdaptMeshAndBalanceLoad.AdaptMeshAndBalanceLoad._solver, exahype2.api.rkfd4.CentralDifferencesWithRungeKutta.CentralDifferencesWithRungeKutta._solver, exahype2.api.rkfd4.PlotAsVTKFile.PlotAsVTKFile._solver, exahype2.api.rkfd4.SetupSimulationOverRegularGrid.SetupSimulationOverRegularGrid._solver, exahype2.api.rkfd4.WriteCheckpoint.WriteCheckpoint._solver, exahype2.api.Solver.Solver.SolverGenerator._solver, exahype2.api.Solver.Solver.NumericalScheme._solver, exahype2.api.Solver.Solver.GridConstruction._solver, exahype2.api.Solver.Solver.Plotter._solver, exahype2.api.Solver.Solver.MeshAdaptation._solver, 20_additional-solver-steps.RusanovWithDensityFloor._solver, 20_additional-solver-steps.RungeKuttaWithDensityFloor._solver, solvers.fv.FV.FV.overlap(), solvers.fv.FV.FV.overlap(), exahype2.api.fv.actionsets.InsertPatchInterior.InsertPatchInterior.overlap, exahype2.api.fv.RusanovWithExplicitEuler.RusanovWithExplicitEuler.overlap, exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.overlap, exahype2.api.rkfd4.CentralDifferencesWithRungeKutta.CentralDifferencesWithRungeKutta.overlap(), api.ProjectPatchWithHaloOntoFaces.ProjectPatchWithHaloOntoFaces.overlap, toolbox::blockstructured::internal::FaceInterpolationOperatorKey.overlap, DiffuseInterface< Shortcuts, basisSize >.patch_size, solvers.fv.FV.FV.patch_size(), solvers.fv.FV.FV.patch_size(), exahype2.api.blockstructured.DynamicMeshRefinement.DynamicMeshRefinement.patch_size, exahype2.api.fv.actionsets.ComputeGlobalCFLCondition.ComputeGlobalCFLCondition.patch_size, exahype2.api.fv.actionsets.InsertPatchInterior.InsertPatchInterior.patch_size, exahype2.api.fv.RusanovWithExplicitEuler.RusanovWithExplicitEuler.patch_size, exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.patch_size, exahype2.api.rkfd4.actionsets.ComputeTimeStepSize.ComputeTimeStepSize.patch_size, exahype2.api.rkfd4.CentralDifferencesWithRungeKutta.CentralDifferencesWithRungeKutta.patch_size, and exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.spawn_optimistic_calculations_as_task.

Here is the call graph for this function:

◆ __create_time_step_functions()

exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.__create_time_step_functions (   self,
  output_directory 
)
private

Calling this function is delayed until all PDE term information is provided.

In this way we can avoid generating code that will not be used. The following information is required to translate a Python function using DSLHyPE:

  • template_parameters: the variables that are used within the Python function to represent external information
  • functor_parameters: the PDE terms that can be used by the solver
  • function: the Python function itself

TODO: Currently the MLIR types are passed manually here, this should ideally be inferred

Definition at line 1469 of file RusanovWithOptimisticExplicitEuler.py.

References solvers.aderdg.actionsets.AbstractADERDGActionSet.AbstractADERDGActionSet._solver, solvers.fv.actionsets.AbstractFVActionSet.AbstractFVActionSet._solver, solvers.fv.EnclaveTasking.UpdateCell._solver, solvers.fv.SingleSweep.UpdateCell._solver, solvers.limiting.actionsets.AbstractLimiterActionSet.AbstractLimiterActionSet._solver, solvers.rkdg.actionsets.AbstractRungeKuttaDGActionSet.AbstractRungeKuttaDGActionSet._solver, exagrype.api.FD4WithKODissipation.FD4WithKODissipation._solver, exahype2.api.blockstructured.AdaptMeshAndBalanceLoad.AdaptMeshAndBalanceLoad._solver, exahype2.api.blockstructured.ConsumeRefinementRequests.ConsumeRefinementRequests._solver, exahype2.api.blockstructured.DynamicMeshRefinement.DynamicMeshRefinement._solver, exahype2.api.blockstructured.LoadCheckpoint._LoadPatchesFromCheckpoint._solver, exahype2.api.blockstructured.LoadCheckpoint.LoadCheckpoint._solver, exahype2.api.fv.actionsets.AbstractFVActionSet.AbstractFVActionSet._solver, exahype2.api.fv.actionsets.ApplyDirichletBoundaryConditions.ApplyDirichletBoundaryConditions._solver, exahype2.api.fv.actionsets.DiscardPatchInterior.DiscardPatchInterior._solver, exahype2.api.fv.AdaptMeshAndBalanceLoad.AdaptMeshAndBalanceLoad._solver, exahype2.api.fv.PlotAsVTKFile.PlotAsVTKFile._solver, exahype2.api.fv.RusanovWithExplicitEuler.RusanovWithExplicitEuler._solver, exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler._solver, exahype2.api.fv.SetupSimulationOverRegularGrid.SetupSimulationOverRegularGrid._solver, exahype2.api.fv.SetupSimulationWithUserCodedRefinementCriterion.SetupSimulationWithUserCodedRefinementCriterion._solver, exahype2.api.fv.WriteCheckpoint.WriteCheckpoint._solver, exahype2.api.rkfd4.actionsets.AbstractRKFD4ActionSet.AbstractRKFD4ActionSet._solver, exahype2.api.rkfd4.actionsets.ApplyDirichletBoundaryConditions.ApplyDirichletBoundaryConditions._solver, exahype2.api.rkfd4.AdaptMeshAndBalanceLoad.AdaptMeshAndBalanceLoad._solver, exahype2.api.rkfd4.CentralDifferencesWithRungeKutta.CentralDifferencesWithRungeKutta._solver, exahype2.api.rkfd4.PlotAsVTKFile.PlotAsVTKFile._solver, exahype2.api.rkfd4.SetupSimulationOverRegularGrid.SetupSimulationOverRegularGrid._solver, exahype2.api.rkfd4.WriteCheckpoint.WriteCheckpoint._solver, exahype2.api.Solver.Solver.SolverGenerator._solver, exahype2.api.Solver.Solver.NumericalScheme._solver, exahype2.api.Solver.Solver.GridConstruction._solver, exahype2.api.Solver.Solver.Plotter._solver, exahype2.api.Solver.Solver.MeshAdaptation._solver, 20_additional-solver-steps.RusanovWithDensityFloor._solver, 20_additional-solver-steps.RungeKuttaWithDensityFloor._solver, exahype2.api.fv.RusanovWithExplicitEuler.RusanovWithExplicitEuler.kernel_function_name(), exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.kernel_function_name(), exahype2.api.fv.RusanovWithExplicitEuler.RusanovWithExplicitEuler.kernel_namespace, exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.kernel_namespace, and exahype2.api.rkfd4.CentralDifferencesWithRungeKutta.CentralDifferencesWithRungeKutta.kernel_namespace.

Referenced by exahype2.api.fv.RusanovWithExplicitEuler.RusanovWithExplicitEuler.construct_output(), and exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.construct_output().

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

◆ construct_output()

exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.construct_output (   self,
  exahype2_project,
  peano_project,
  time_step 
)

Has to be implemented by subclass.

time_step: peano4.api.taskgraph.Graph The task graph of the surrounding exahype2_project's time stepping phase, so the numerical scheme can add its own tasks into it.

Reimplemented from exahype2.api.Solver.Solver.NumericalScheme.

Definition at line 1196 of file RusanovWithOptimisticExplicitEuler.py.

References exahype2.api.fv.RusanovWithExplicitEuler.RusanovWithExplicitEuler.__add_data_to_repository(), exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.__add_data_to_repository(), exahype2.api.rkfd4.CentralDifferencesWithRungeKutta.CentralDifferencesWithRungeKutta.__add_data_to_repository(), exahype2.api.rkfd4.CentralDifferencesWithRungeKutta.CentralDifferencesWithRungeKutta.__construct_kernel_call(), exahype2.api.fv.RusanovWithExplicitEuler.RusanovWithExplicitEuler.__construct_kernel_call(), exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.__construct_kernel_call(), exahype2.api.fv.RusanovWithExplicitEuler.RusanovWithExplicitEuler.__create_time_step_functions(), exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.__create_time_step_functions(), solvers.aderdg.actionsets.AbstractADERDGActionSet.AbstractADERDGActionSet._solver, solvers.fv.actionsets.AbstractFVActionSet.AbstractFVActionSet._solver, solvers.fv.EnclaveTasking.UpdateCell._solver, solvers.fv.SingleSweep.UpdateCell._solver, solvers.limiting.actionsets.AbstractLimiterActionSet.AbstractLimiterActionSet._solver, solvers.rkdg.actionsets.AbstractRungeKuttaDGActionSet.AbstractRungeKuttaDGActionSet._solver, exagrype.api.FD4WithKODissipation.FD4WithKODissipation._solver, exahype2.api.blockstructured.AdaptMeshAndBalanceLoad.AdaptMeshAndBalanceLoad._solver, exahype2.api.blockstructured.ConsumeRefinementRequests.ConsumeRefinementRequests._solver, exahype2.api.blockstructured.DynamicMeshRefinement.DynamicMeshRefinement._solver, exahype2.api.blockstructured.LoadCheckpoint._LoadPatchesFromCheckpoint._solver, exahype2.api.blockstructured.LoadCheckpoint.LoadCheckpoint._solver, exahype2.api.fv.actionsets.AbstractFVActionSet.AbstractFVActionSet._solver, exahype2.api.fv.actionsets.ApplyDirichletBoundaryConditions.ApplyDirichletBoundaryConditions._solver, exahype2.api.fv.actionsets.DiscardPatchInterior.DiscardPatchInterior._solver, exahype2.api.fv.AdaptMeshAndBalanceLoad.AdaptMeshAndBalanceLoad._solver, exahype2.api.fv.PlotAsVTKFile.PlotAsVTKFile._solver, exahype2.api.fv.RusanovWithExplicitEuler.RusanovWithExplicitEuler._solver, exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler._solver, exahype2.api.fv.SetupSimulationOverRegularGrid.SetupSimulationOverRegularGrid._solver, exahype2.api.fv.SetupSimulationWithUserCodedRefinementCriterion.SetupSimulationWithUserCodedRefinementCriterion._solver, exahype2.api.fv.WriteCheckpoint.WriteCheckpoint._solver, exahype2.api.rkfd4.actionsets.AbstractRKFD4ActionSet.AbstractRKFD4ActionSet._solver, exahype2.api.rkfd4.actionsets.ApplyDirichletBoundaryConditions.ApplyDirichletBoundaryConditions._solver, exahype2.api.rkfd4.AdaptMeshAndBalanceLoad.AdaptMeshAndBalanceLoad._solver, exahype2.api.rkfd4.CentralDifferencesWithRungeKutta.CentralDifferencesWithRungeKutta._solver, exahype2.api.rkfd4.PlotAsVTKFile.PlotAsVTKFile._solver, exahype2.api.rkfd4.SetupSimulationOverRegularGrid.SetupSimulationOverRegularGrid._solver, exahype2.api.rkfd4.WriteCheckpoint.WriteCheckpoint._solver, exahype2.api.Solver.Solver.SolverGenerator._solver, exahype2.api.Solver.Solver.NumericalScheme._solver, exahype2.api.Solver.Solver.GridConstruction._solver, exahype2.api.Solver.Solver.Plotter._solver, exahype2.api.Solver.Solver.MeshAdaptation._solver, 20_additional-solver-steps.RusanovWithDensityFloor._solver, 20_additional-solver-steps.RungeKuttaWithDensityFloor._solver, exahype2.api.fv.actionsets.ComputeGlobalCFLCondition.ComputeGlobalCFLCondition.cfl_constant, exahype2.api.fv.RusanovWithExplicitEuler.RusanovWithExplicitEuler.cfl_constant, exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.cfl_constant, exahype2.api.rkfd4.actionsets.ComputeTimeStepSize.ComputeTimeStepSize.cfl_constant, exahype2.api.rkfd4.CentralDifferencesWithRungeKutta.CentralDifferencesWithRungeKutta.cfl_constant, exahype2.api.fv.actionsets.SpawnTaskToUpdateCellInterior.SpawnTaskToUpdateCellInterior.damp_time_step_size, exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.damp_time_step_size, exahype2.api.fv.RusanovWithExplicitEuler.RusanovWithExplicitEuler.kernel_function_name(), exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.kernel_function_name(), exahype2.api.fv.RusanovWithExplicitEuler.RusanovWithExplicitEuler.kernel_namespace, exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.kernel_namespace, exahype2.api.rkfd4.CentralDifferencesWithRungeKutta.CentralDifferencesWithRungeKutta.kernel_namespace, exahype2.api.blockstructured.DynamicMeshRefinement.DynamicMeshRefinement.max_volume_size, exahype2.api.fv.RusanovWithExplicitEuler.RusanovWithExplicitEuler.max_volume_size, exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.max_volume_size, exahype2.api.rkfd4.CentralDifferencesWithRungeKutta.CentralDifferencesWithRungeKutta.max_volume_size, exahype2.api.blockstructured.DynamicMeshRefinement.DynamicMeshRefinement.min_volume_size, exahype2.api.fv.RusanovWithExplicitEuler.RusanovWithExplicitEuler.min_volume_size, exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.min_volume_size, exahype2.api.fv.SetupSimulationWithUserCodedRefinementCriterion.SetupSimulationWithUserCodedRefinementCriterion.min_volume_size, exahype2.api.rkfd4.CentralDifferencesWithRungeKutta.CentralDifferencesWithRungeKutta.min_volume_size, solvers.fv.FV.FV.overlap(), exahype2.api.fv.actionsets.InsertPatchInterior.InsertPatchInterior.overlap, exahype2.api.fv.RusanovWithExplicitEuler.RusanovWithExplicitEuler.overlap, exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.overlap, exahype2.api.rkfd4.CentralDifferencesWithRungeKutta.CentralDifferencesWithRungeKutta.overlap(), solvers.fv.FV.FV.overlap(), api.ProjectPatchWithHaloOntoFaces.ProjectPatchWithHaloOntoFaces.overlap, toolbox::blockstructured::internal::FaceInterpolationOperatorKey.overlap, DiffuseInterface< Shortcuts, basisSize >.patch_size, solvers.fv.FV.FV.patch_size(), solvers.fv.FV.FV.patch_size(), exahype2.api.blockstructured.DynamicMeshRefinement.DynamicMeshRefinement.patch_size, exahype2.api.fv.actionsets.ComputeGlobalCFLCondition.ComputeGlobalCFLCondition.patch_size, exahype2.api.fv.actionsets.InsertPatchInterior.InsertPatchInterior.patch_size, exahype2.api.fv.RusanovWithExplicitEuler.RusanovWithExplicitEuler.patch_size, exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.patch_size, exahype2.api.rkfd4.actionsets.ComputeTimeStepSize.ComputeTimeStepSize.patch_size, and exahype2.api.rkfd4.CentralDifferencesWithRungeKutta.CentralDifferencesWithRungeKutta.patch_size.

Here is the call graph for this function:

◆ create_default_mesh_adaptation()

Solver.MeshAdaptation exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.create_default_mesh_adaptation (   self)

The Finite Volume schemes adapt the mesh and balance the load through exahype2.api.fv.AdaptMeshAndBalanceLoad by default.

Reimplemented from exahype2.api.Solver.Solver.NumericalScheme.

Definition at line 1185 of file RusanovWithOptimisticExplicitEuler.py.

◆ kernel_function_name()

str exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.kernel_function_name (   self)

Name of the generated time step kernel.

It carries the solver name, as do the kernels/<SolverName>_rusanov*.h files holding it, so two solvers' kernels do not clash.

Definition at line 952 of file RusanovWithOptimisticExplicitEuler.py.

References solvers.aderdg.actionsets.AbstractADERDGActionSet.AbstractADERDGActionSet._solver, solvers.fv.actionsets.AbstractFVActionSet.AbstractFVActionSet._solver, solvers.fv.EnclaveTasking.UpdateCell._solver, solvers.fv.SingleSweep.UpdateCell._solver, solvers.limiting.actionsets.AbstractLimiterActionSet.AbstractLimiterActionSet._solver, solvers.rkdg.actionsets.AbstractRungeKuttaDGActionSet.AbstractRungeKuttaDGActionSet._solver, exagrype.api.FD4WithKODissipation.FD4WithKODissipation._solver, exahype2.api.blockstructured.AdaptMeshAndBalanceLoad.AdaptMeshAndBalanceLoad._solver, exahype2.api.blockstructured.ConsumeRefinementRequests.ConsumeRefinementRequests._solver, exahype2.api.blockstructured.DynamicMeshRefinement.DynamicMeshRefinement._solver, exahype2.api.blockstructured.LoadCheckpoint._LoadPatchesFromCheckpoint._solver, exahype2.api.blockstructured.LoadCheckpoint.LoadCheckpoint._solver, exahype2.api.fv.actionsets.AbstractFVActionSet.AbstractFVActionSet._solver, exahype2.api.fv.actionsets.ApplyDirichletBoundaryConditions.ApplyDirichletBoundaryConditions._solver, exahype2.api.fv.actionsets.DiscardPatchInterior.DiscardPatchInterior._solver, exahype2.api.fv.AdaptMeshAndBalanceLoad.AdaptMeshAndBalanceLoad._solver, exahype2.api.fv.PlotAsVTKFile.PlotAsVTKFile._solver, exahype2.api.fv.RusanovWithExplicitEuler.RusanovWithExplicitEuler._solver, exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler._solver, exahype2.api.fv.SetupSimulationOverRegularGrid.SetupSimulationOverRegularGrid._solver, exahype2.api.fv.SetupSimulationWithUserCodedRefinementCriterion.SetupSimulationWithUserCodedRefinementCriterion._solver, exahype2.api.fv.WriteCheckpoint.WriteCheckpoint._solver, exahype2.api.rkfd4.actionsets.AbstractRKFD4ActionSet.AbstractRKFD4ActionSet._solver, exahype2.api.rkfd4.actionsets.ApplyDirichletBoundaryConditions.ApplyDirichletBoundaryConditions._solver, exahype2.api.rkfd4.AdaptMeshAndBalanceLoad.AdaptMeshAndBalanceLoad._solver, exahype2.api.rkfd4.CentralDifferencesWithRungeKutta.CentralDifferencesWithRungeKutta._solver, exahype2.api.rkfd4.PlotAsVTKFile.PlotAsVTKFile._solver, exahype2.api.rkfd4.SetupSimulationOverRegularGrid.SetupSimulationOverRegularGrid._solver, exahype2.api.rkfd4.WriteCheckpoint.WriteCheckpoint._solver, exahype2.api.Solver.Solver.SolverGenerator._solver, exahype2.api.Solver.Solver.NumericalScheme._solver, exahype2.api.Solver.Solver.GridConstruction._solver, exahype2.api.Solver.Solver.Plotter._solver, exahype2.api.Solver.Solver.MeshAdaptation._solver, 20_additional-solver-steps.RusanovWithDensityFloor._solver, and 20_additional-solver-steps.RungeKuttaWithDensityFloor._solver.

Referenced by exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.__construct_kernel_call(), exahype2.api.fv.RusanovWithExplicitEuler.RusanovWithExplicitEuler.__create_time_step_functions(), exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.__create_time_step_functions(), and exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.construct_output().

Here is the caller graph for this function:

Field Documentation

◆ _solver

exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler._solver
protected

Build the reconstruction tasks befilling the patch_with_halo, which is logically temporary.

Both branches: spawn the next time step's patch interior update.

Sommerfeld boundary conditions advance the ghost volumes within the roll over (exahype2.api.blockstructured.BoundaryConditions)

Both branches: project the new data onto the faces.

Both branches: reduce the cells' maximum eigenvalues into the next time step size.

Optimistic branch: insert the patch interior once the shell is updated.

Optimistic branch: update the shell only.

Traditional branch: the update makes any precomputed patch interior obsolete.

Traditional branch: update the whole patch.

Set the ghost volumes along the domain boundary before the reconstruction reads them.

Sommerfeld boundary conditions read the old face data within the roll over, i.e. it has to survive the reconstruction

No task is added if all axes are periodic or for Sommerfeld boundary conditions, which advance the ghost volumes within the roll over

No task is added if all axes are periodic or for Sommerfeld boundary conditions, which advance the ghost volumes within the roll over

Validate the estimated time step size of the optimistic patch interior update, and memorise the admissible time step size

The patch interior of _patch and entry 1 of _max_eigenvalue_and_time_step_sizes remain unchanged, so both are read and written

Runs in parallel to the projection onto the faces

Also roll over the solution

Reads the patch and writes the patch interior plus the estimated time step size

Definition at line 1194 of file RusanovWithOptimisticExplicitEuler.py.

Referenced by exahype2.api.fv.RusanovWithExplicitEuler.RusanovWithExplicitEuler.__add_data_to_repository(), exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.__add_data_to_repository(), exahype2.api.rkfd4.CentralDifferencesWithRungeKutta.CentralDifferencesWithRungeKutta.__add_data_to_repository(), exahype2.api.rkfd4.CentralDifferencesWithRungeKutta.CentralDifferencesWithRungeKutta.__construct_kernel_call(), exahype2.api.fv.RusanovWithExplicitEuler.RusanovWithExplicitEuler.__construct_kernel_call(), exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.__construct_kernel_call(), exahype2.api.fv.RusanovWithExplicitEuler.RusanovWithExplicitEuler.__create_data_structures(), exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.__create_data_structures(), exahype2.api.rkfd4.CentralDifferencesWithRungeKutta.CentralDifferencesWithRungeKutta.__create_data_structures(), exahype2.api.fv.RusanovWithExplicitEuler.RusanovWithExplicitEuler.__create_time_step_functions(), exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.__create_time_step_functions(), solvers.fv.EnclaveTasking.UpdateCell._add_action_set_entries_to_dictionary(), solvers.fv.SingleSweep.UpdateCell._add_action_set_entries_to_dictionary(), exahype2.api.fv.AdaptMeshAndBalanceLoad.AdaptMeshAndBalanceLoad._add_further_adaptation_action_sets(), exahype2.api.rkfd4.AdaptMeshAndBalanceLoad.AdaptMeshAndBalanceLoad._add_further_adaptation_action_sets(), exahype2.api.fv.AdaptMeshAndBalanceLoad.AdaptMeshAndBalanceLoad._add_projection_action_sets(), exahype2.api.rkfd4.AdaptMeshAndBalanceLoad.AdaptMeshAndBalanceLoad._add_projection_action_sets(), exahype2.api.Solver.Solver.Plotter._add_time_interval_bookkeeping_to_solver(), exahype2.api.fv.SetupSimulationOverRegularGrid.SetupSimulationOverRegularGrid._construct_task_graph(), exahype2.api.fv.SetupSimulationWithUserCodedRefinementCriterion.SetupSimulationWithUserCodedRefinementCriterion._create_adapt_mesh_task(), exahype2.api.fv.PlotAsVTKFile.PlotAsVTKFile._create_description(), exahype2.api.rkfd4.PlotAsVTKFile.PlotAsVTKFile._create_description(), exahype2.api.fv.PlotAsVTKFile.PlotAsVTKFile._create_guard(), exahype2.api.rkfd4.PlotAsVTKFile.PlotAsVTKFile._create_guard(), exahype2.api.fv.PlotAsVTKFile.PlotAsVTKFile._create_selected_entries(), exahype2.api.rkfd4.PlotAsVTKFile.PlotAsVTKFile._create_selected_entries(), exahype2.api.fv.PlotAsVTKFile.PlotAsVTKFile._log_plot_graph(), exahype2.api.rkfd4.PlotAsVTKFile.PlotAsVTKFile._log_plot_graph(), exahype2.api.rkfd4.CentralDifferencesWithRungeKutta.CentralDifferencesWithRungeKutta._patches(), exahype2.api.fv.SetupSimulationOverRegularGrid.SetupSimulationOverRegularGrid._report_task_graph(), exahype2.api.rkfd4.CentralDifferencesWithRungeKutta.CentralDifferencesWithRungeKutta._right_hand_side_action_sets(), exahype2.api.SolverToCPPFiles.SolverToCPPFiles._variables_declaration(), exahype2.api.SolverToCPPFiles.SolverToCPPFiles.construct_output(), exahype2.api.blockstructured.AdaptMeshAndBalanceLoad.AdaptMeshAndBalanceLoad.construct_output(), exahype2.api.rkfd4.SetupSimulationOverRegularGrid.SetupSimulationOverRegularGrid.construct_output(), manipulate-solver-steps-illustrations.RusanovWithPostprocessing.construct_output(), exahype2.api.fv.RusanovWithExplicitEuler.RusanovWithExplicitEuler.construct_output(), exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.construct_output(), exahype2.api.rkfd4.CentralDifferencesWithRungeKutta.CentralDifferencesWithRungeKutta.construct_output(), exahype2.api.rkfd4.CentralDifferencesWithRungeKutta.CentralDifferencesWithRungeKutta.create_default_mesh_adaptation(), exahype2.api.Solver.Solver.Plotter.create_finish_call(), exahype2.api.Solver.Solver.Plotter.create_is_active_predicate(), exahype2.api.fv.RusanovWithExplicitEuler.RusanovWithExplicitEuler.create_restriction_of_hanging_faces(), exahype2.api.rkfd4.CentralDifferencesWithRungeKutta.CentralDifferencesWithRungeKutta.create_restriction_of_hanging_faces(), solvers.rkdg.actionsets.AdaptivityCriterion.AdaptivityCriterion.event_lifetime(), solvers.aderdg.actionsets.AdaptivityCriterion.AdaptivityCriterion.get_body_of_operation(), solvers.aderdg.actionsets.Correction.Correction.get_body_of_operation(), solvers.aderdg.actionsets.DynamicAMR.DynamicAMR.get_body_of_operation(), solvers.aderdg.actionsets.HandleBoundary.HandleBoundary.get_body_of_operation(), solvers.aderdg.actionsets.InitialCondition.InitialCondition.get_body_of_operation(), solvers.aderdg.actionsets.PostprocessSolution.EmptyPostprocessSolution.get_body_of_operation(), solvers.aderdg.actionsets.PostprocessSolution.DoFWisePostprocessSolution.get_body_of_operation(), solvers.aderdg.actionsets.PostprocessSolution.CellWisePostprocessSolution.get_body_of_operation(), solvers.aderdg.actionsets.Prediction.Prediction.get_body_of_operation(), solvers.fv.actionsets.AdaptivityCriterion.AdaptivityCriterion.get_body_of_operation(), solvers.fv.actionsets.InitialCondition.InitialCondition.get_body_of_operation(), solvers.fv.actionsets.PostprocessSolution.VolumeWisePostprocessSolution.get_body_of_operation(), solvers.fv.actionsets.PreprocessSolution.VolumeWisePreprocessSolution.get_body_of_operation(), solvers.fv.actionsets.RollOverUpdatedFace.RollOverUpdatedFace.get_body_of_operation(), solvers.fv.EnclaveTasking.MergeEnclaveTaskOutcome.get_body_of_operation(), solvers.limiting.actionsets.CopyAndConvertPatch.CopyAndConvertPatch.get_body_of_operation(), solvers.limiting.actionsets.SaveNewCellData.SaveNewCellData.get_body_of_operation(), solvers.limiting.actionsets.SpreadLimiterStatus.SpreadLimiterStatus.get_body_of_operation(), solvers.limiting.actionsets.VerifyTroubledness.VerifyTroubledness.get_body_of_operation(), solvers.rkdg.actionsets.AdaptivityCriterion.AdaptivityCriterion.get_body_of_operation(), solvers.rkdg.actionsets.AddVolumeAndFaceSolution.AddVolumeAndFaceSolution.get_body_of_operation(), solvers.rkdg.actionsets.ComputeFinalLinearCombination.ComputeFinalLinearCombination.get_body_of_operation(), solvers.rkdg.actionsets.DynamicAMR.DynamicAMR.get_body_of_operation(), solvers.rkdg.actionsets.HandleBoundary.HandleBoundary.get_body_of_operation(), solvers.rkdg.actionsets.InitialCondition.InitialCondition.get_body_of_operation(), solvers.rkdg.actionsets.LinearCombinationOfEstimates.LinearCombinationOfEstimates.get_body_of_operation(), solvers.rkdg.actionsets.PostprocessSolution.DoFWisePostprocessSolution.get_body_of_operation(), solvers.rkdg.actionsets.PostprocessSolution.CellWisePostprocessSolution.get_body_of_operation(), solvers.rkdg.actionsets.PreprocessSolution.DoFWisePreprocessSolution.get_body_of_operation(), solvers.rkdg.actionsets.PreprocessSolution.CellWisePreprocessSolution.get_body_of_operation(), solvers.rkdg.actionsets.ProjectLinearCombinationOfEstimatesOntoFaces.ProjectLinearCombinationOfEstimatesOntoFaces.get_body_of_operation(), solvers.rkdg.actionsets.SolveRiemannProblem.SolveRiemannProblem.get_body_of_operation(), solvers.rkdg.actionsets.SolveVolumeIntegral.SolveVolumeIntegral.get_body_of_operation(), solvers.rkdg.SeparateSweepsWithEnclaveTasking.MergeEnclaveTaskOutcome.get_body_of_operation(), exagrype.api.actionsets.AddKreissOligerDissipation.AddKreissOligerDissipation.get_body_of_operation(), exahype2.api.blockstructured.DynamicMeshRefinement.DynamicMeshRefinement.get_body_of_operation(), exahype2.api.blockstructured.LoadCheckpoint._LoadPatchesFromCheckpoint.get_body_of_operation(), exahype2.api.fv.actionsets.InitialCondition.InitialCondition.get_body_of_operation(), exahype2.api.fv.actionsets.InsertPatchInterior.InsertPatchInterior.get_body_of_operation(), exahype2.api.rkfd4.actionsets.AddLopsidedAdvection.AddLopsidedAdvection.get_body_of_operation(), exahype2.api.rkfd4.actionsets.ComputeLinearCombination.ComputeLinearCombination.get_body_of_operation(), exahype2.api.rkfd4.actionsets.ComputeMaxEigenvalue.ComputeMaxEigenvalue.get_body_of_operation(), exahype2.api.rkfd4.actionsets.EvaluateRightHandSide.EvaluateRightHandSide.get_body_of_operation(), exahype2.api.rkfd4.actionsets.InitialCondition.InitialCondition.get_body_of_operation(), solvers.fv.actionsets.InitialCondition.InitialCondition.get_body_of_prepareTraversal(), exahype2.api.rkfd4.actionsets.ComputeTimeStepSize.ComputeTimeStepSize.get_body_of_unprepareTraversal(), solvers.aderdg.actionsets.AbstractADERDGActionSet.AbstractADERDGActionSet.get_includes(), solvers.aderdg.actionsets.Correction.Correction.get_includes(), solvers.aderdg.actionsets.DynamicAMR.DynamicAMR.get_includes(), solvers.aderdg.actionsets.HandleBoundary.HandleBoundary.get_includes(), solvers.aderdg.actionsets.InitialCondition.InitialCondition.get_includes(), solvers.aderdg.actionsets.PostprocessSolution.EmptyPostprocessSolution.get_includes(), solvers.aderdg.actionsets.PostprocessSolution.DoFWisePostprocessSolution.get_includes(), solvers.aderdg.actionsets.Prediction.Prediction.get_includes(), solvers.fv.actionsets.AbstractFVActionSet.AbstractFVActionSet.get_includes(), solvers.fv.actionsets.InitialCondition.InitialCondition.get_includes(), solvers.fv.EnclaveTasking.UpdateCell.get_includes(), solvers.fv.SingleSweep.UpdateCell.get_includes(), solvers.limiting.actionsets.AbstractLimiterActionSet.AbstractLimiterActionSet.get_includes(), solvers.limiting.actionsets.CopyAndConvertPatch.CopyAndConvertPatch.get_includes(), solvers.limiting.actionsets.SaveNewCellData.SaveNewCellData.get_includes(), solvers.limiting.actionsets.VerifyTroubledness.VerifyTroubledness.get_includes(), solvers.rkdg.actionsets.AbstractRungeKuttaDGActionSet.AbstractRungeKuttaDGActionSet.get_includes(), solvers.rkdg.actionsets.SolveVolumeIntegral.SolveVolumeIntegral.get_includes(), exahype2.api.blockstructured.ConsumeRefinementRequests.ConsumeRefinementRequests.get_includes(), exahype2.api.blockstructured.DynamicMeshRefinement.DynamicMeshRefinement.get_includes(), exahype2.api.fv.actionsets.AbstractFVActionSet.AbstractFVActionSet.get_includes(), exahype2.api.fv.actionsets.ApplyDirichletBoundaryConditions.ApplyDirichletBoundaryConditions.get_includes(), exahype2.api.rkfd4.actionsets.AbstractRKFD4ActionSet.AbstractRKFD4ActionSet.get_includes(), exahype2.api.rkfd4.actionsets.ApplyDirichletBoundaryConditions.ApplyDirichletBoundaryConditions.get_includes(), solvers.rkdg.actionsets.AddVolumeAndFaceSolution.AddVolumeAndFaceSolution.guards(), solvers.rkdg.actionsets.DynamicAMR.DynamicAMR.guards(), solvers.rkdg.actionsets.HandleBoundary.HandleBoundary.guards(), solvers.rkdg.actionsets.LinearCombinationOfEstimates.LinearCombinationOfEstimates.guards(), solvers.rkdg.actionsets.ProjectLinearCombinationOfEstimatesOntoFaces.ProjectLinearCombinationOfEstimatesOntoFaces.guards(), solvers.rkdg.actionsets.SolveRiemannProblem.SolveRiemannProblem.guards(), solvers.rkdg.actionsets.SolveVolumeIntegral.SolveVolumeIntegral.guards(), exahype2.api.blockstructured.LoadCheckpoint.LoadCheckpoint.index_file_name(), exahype2.api.fv.RusanovWithExplicitEuler.RusanovWithExplicitEuler.kernel_function_name(), exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.kernel_function_name(), exahype2.api.rkfd4.CentralDifferencesWithRungeKutta.CentralDifferencesWithRungeKutta.max_eigenvalue_kernel_name(), exahype2.api.fv.PlotAsVTKFile.PlotAsVTKFile.output_file_prefix(), exahype2.api.fv.WriteCheckpoint.WriteCheckpoint.output_file_prefix(), exahype2.api.rkfd4.PlotAsVTKFile.PlotAsVTKFile.output_file_prefix(), exahype2.api.rkfd4.WriteCheckpoint.WriteCheckpoint.output_file_prefix(), and exahype2.api.rkfd4.CentralDifferencesWithRungeKutta.CentralDifferencesWithRungeKutta.right_hand_side_kernel_name().

◆ cfl_constant

exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.cfl_constant

◆ damp_time_step_size

exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.damp_time_step_size

Both branches: spawn the next time step's patch interior update.

Reads the patch and writes the patch interior plus the estimated time step size

Definition at line 947 of file RusanovWithOptimisticExplicitEuler.py.

Referenced by exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.construct_output().

◆ kernel_namespace

◆ max_volume_size

◆ min_volume_size

◆ overlap

◆ patch_size

◆ spawn_optimistic_calculations_as_task

exahype2.api.fv.RusanovWithOptimisticExplicitEuler.RusanovWithOptimisticExplicitEuler.spawn_optimistic_calculations_as_task

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