8from .kernels
import create_abstract_solver_declarations
9from .kernels
import create_abstract_solver_definitions
10from .kernels
import create_solver_declarations
11from .kernels
import create_solver_definitions
12from .kernels
import create_rusanov_kernel_definitions
13from .kernels
import create_compute_Riemann_kernel_for_Rusanov_dsl
17from .kernels
import SolverVariant
18from .kernels
import KernelVariant
25 name, patch_size, unknowns, auxiliary_variables, min_volume_h, max_volume_h, time_step_size,
26 flux=PDETerms.User_Defined_Implementation,
27 ncp=PDETerms.None_Implementation,
28 eigenvalues=PDETerms.User_Defined_Implementation,
29 boundary_conditions=PDETerms.User_Defined_Implementation,
30 refinement_criterion=PDETerms.Empty_Implementation,
31 initial_conditions=PDETerms.User_Defined_Implementation,
32 source_term=PDETerms.None_Implementation,
33 plot_grid_properties=False,
34 interpolate_linearly_in_time=True, overlap=1
38 This is the normalised time step size w.r.t. the coarsest admissible h value. If
39 the code employs AMR on top of it and refines further, it will automatically
40 downscale the time step size accordingly. So hand in a valid time step size w.r.t.
45 super(SubcyclingFixedTimeStep,self).
__init__(name,
53 kernel_namespace=
"rusanov")
63 eigenvalues=eigenvalues,
64 boundary_conditions=boundary_conditions,
65 refinement_criterion=refinement_criterion,
66 initial_conditions=initial_conditions,
67 source_term=source_term )
73 boundary_conditions=None,refinement_criterion=None,initial_conditions=None,source_term=None,
74 memory_location = None,
75 use_split_loop = False,
76 additional_action_set_includes = "",
77 additional_user_includes = ""
80 If you pass in User_Defined, then the generator will create C++ stubs
81 that you have to befill manually. If you pass in None_Implementation, it
82 will create nop, i.e., no implementation or defaults. Any other string
83 is copied 1:1 into the implementation. If you pass in None, then the
84 set value so far won't be overwritten.
86 Please note that not all options are supported by all solvers.
88 This routine should be the very last invoked by the constructor.
95 create_rusanov_kernel_definitions()
101 compute_max_eigenvalue_of_next_time_step =
False,
102 solver_variant = SolverVariant.WithVirtualFunctions,
103 kernel_variant = KernelVariant.PatchWiseAoS
110 compute_max_eigenvalue_of_next_time_step =
False,
111 solver_variant = SolverVariant.Stateless,
112 kernel_variant = KernelVariant.PatchWiseAoS
133#include "exahype2/TimeStepping.h"
134#include "kernels/rusanov.h"
137 super(SubcyclingFixedTimeStep,self).
set_implementation(boundary_conditions, refinement_criterion, initial_conditions, memory_location, use_split_loop, additional_action_set_includes, additional_user_includes)
142 The actual action sets all are created by the superclass. So nothing
143 is to be done here. But we want to reset the actual updates and
144 projection, and these only happen if we are allowed to update
149 self.
_action_set_update_cell.guard +=
" and ::exahype2::runTimeStepOnCell( fineGridCell" + self.
_name +
"CellLabel, fineGridFaces" + self.
_name +
"FaceLabel, repositories::getMinTimeStamp())"
152 self.
_action_set_update_cell._Template_TouchCellFirstTime_Fill_Halos = create_halo_layer_construction_with_interpolation_for_reconstructed_patch(self.
_name)
Code snippet generator for all subcycling solvers.
str _compute_kernel_call_stateless
str _constructor_implementation
str _abstract_solver_user_definitions
str _finish_time_step_implementation
str _solver_user_declarations
str _solver_user_definitions
str _abstract_solver_user_declarations
str _compute_time_step_size
str _start_time_step_implementation
str _user_action_set_includes
str _compute_new_time_step_size
Probably the simplest solver you could think off.
_interpolate_linearly_in_time
__init__(self, name, patch_size, unknowns, auxiliary_variables, min_volume_h, max_volume_h, time_step_size, flux=PDETerms.User_Defined_Implementation, ncp=PDETerms.None_Implementation, eigenvalues=PDETerms.User_Defined_Implementation, boundary_conditions=PDETerms.User_Defined_Implementation, refinement_criterion=PDETerms.Empty_Implementation, initial_conditions=PDETerms.User_Defined_Implementation, source_term=PDETerms.None_Implementation, plot_grid_properties=False, interpolate_linearly_in_time=True, overlap=1)
time_step_size: Float This is the normalised time step size w.r.t.
_source_term_implementation
create_data_structures(self)
Call the superclass' create_data_structures() to ensure that all the data structures are in place,...
set_implementation(self, flux=None, ncp=None, eigenvalues=None, boundary_conditions=None, refinement_criterion=None, initial_conditions=None, source_term=None, memory_location=None, use_split_loop=False, additional_action_set_includes="", additional_user_includes="")
If you pass in User_Defined, then the generator will create C++ stubs that you have to befill manuall...
create_action_sets(self)
The actual action sets all are created by the superclass.
_eigenvalues_implementation