28 name, patch_size, unknowns, auxiliary_variables, min_volume_h, max_volume_h, time_step_size,
29 flux=PDETerms.User_Defined_Implementation,
30 ncp=PDETerms.None_Implementation,
31 eigenvalues=PDETerms.User_Defined_Implementation,
32 boundary_conditions=PDETerms.User_Defined_Implementation,
33 refinement_criterion=PDETerms.Empty_Implementation,
34 initial_conditions=PDETerms.User_Defined_Implementation,
35 source_term=PDETerms.None_Implementation,
36 plot_grid_properties=False,
37 interpolate_linearly_in_time=True,
38 pde_terms_without_state=False, overlap=1
42 This is the normalised time step size w.r.t. the coarsest admissible h value. If
43 the code employs AMR on top of it and refines further, it will automatically
44 downscale the time step size accordingly. So hand in a valid time step size w.r.t.
49 super(SubcyclingFixedTimeStepWithEnclaveTasking,self).
__init__(name,
57 pde_terms_without_state,
58 kernel_namespace=
"rusanov")
66 self.
_compute_time_step_size = create_compute_time_step_size_for_fixed_time_stepping_with_subcycling( time_step_size, name )
73 eigenvalues=eigenvalues,
74 boundary_conditions=boundary_conditions,
75 refinement_criterion=refinement_criterion,
76 initial_conditions=initial_conditions,
77 source_term=source_term)
83 boundary_conditions=None,refinement_criterion=None,initial_conditions=None,source_term=None,
84 memory_location = None,
85 use_split_loop = False,
86 additional_action_set_includes = "",
87 additional_user_includes = ""
90 If you pass in User_Defined, then the generator will create C++ stubs
91 that you have to befill manually. If you pass in None_Implementation, it
92 will create nop, i.e., no implementation or defaults. Any other string
93 is copied 1:1 into the implementation. If you pass in None, then the
94 set value so far won't be overwritten.
96 Please note that not all options are supported by all solvers.
98 This routine should be the very last invoked by the constructor.
111 compute_max_eigenvalue_of_next_time_step =
True
118 compute_max_eigenvalue_of_next_time_step =
False,
119 solver_variant = SolverVariant.WithVirtualFunctions,
120 kernel_variant = KernelVariant.PatchWiseAoS
127 compute_max_eigenvalue_of_next_time_step =
False,
128 solver_variant = SolverVariant.Stateless,
129 kernel_variant = KernelVariant.PatchWiseAoS
136 compute_max_eigenvalue_of_next_time_step =
False,
137 solver_variant = SolverVariant.Stateless,
138 kernel_variant = KernelVariant.PatchWiseAoS
145 compute_max_eigenvalue_of_next_time_step =
False,
146 solver_variant = SolverVariant.Accelerator,
147 kernel_variant = KernelVariant.PatchWiseAoS
161 super(SubcyclingFixedTimeStepWithEnclaveTasking,self).
set_implementation(boundary_conditions, refinement_criterion, initial_conditions, memory_location, use_split_loop, additional_action_set_includes, additional_user_includes)
166 The actual action sets all are created by the superclass. So nothing
167 is to be done here. But we want to reset the actual updates and
168 projection, and these only happen if we are allowed to update
173 update_cell_guard =
"::exahype2::runTimeStepOnCell( fineGridCell" + self._name +
"CellLabel, fineGridFaces" + self._name +
"FaceLabel, repositories::getMinTimeStamp())"
175 self._action_set_update_cell.guard +=
" and " + update_cell_guard
179 self._action_set_update_cell._Template_TouchCellFirstTime_Fill_Halos = create_halo_layer_construction_with_interpolation_for_reconstructed_patch(self._name)
181 self._action_set_AMR.event_lifetime = 2*int(self._max_volume_h/self._min_volume_h+1)