Peano
Loading...
Searching...
No Matches
GlobalFixedTimeStepWithEnclaveTasking.py
Go to the documentation of this file.
1# This file is part of the ExaHyPE2 project. For conditions of distribution and
2# use, please see the copyright notice at www.peano-framework.org
3from .kernels import *
4
5from peano4.toolbox.blockstructured import ReconstructedArrayMemoryLocation
6
7from exahype2.solvers import PDETerms
8from exahype2.solvers.fv.EnclaveTasking import EnclaveTasking
9
11 FixedTimeSteppingCodeSnippets,
12)
13
14
17 self,
18 name,
19 patch_size,
20 unknowns,
21 auxiliary_variables,
22 min_volume_h,
23 max_volume_h,
24 normalised_time_step_size,
25 initial_conditions=PDETerms.User_Defined_Implementation,
26 boundary_conditions=PDETerms.User_Defined_Implementation,
27 refinement_criterion=PDETerms.Empty_Implementation,
28 flux=PDETerms.None_Implementation,
29 ncp=PDETerms.None_Implementation,
30 eigenvalues=PDETerms.None_Implementation,
31 riemann_solver=PDETerms.User_Defined_Implementation,
32 source_term=PDETerms.None_Implementation,
33 plot_grid_properties=False,
34 pde_terms_without_state=False,
35 overlap=1,
36 ):
37 """
38 time_step_size: Float
39 This is the normalised time step size w.r.t. the coarsest admissible h value. If
40 the code employs AMR on top of it and refines further, it will automatically
41 downscale the time step size accordingly. So hand in a valid time step size w.r.t.
42 to max_volume_h.
43 """
44 super(GlobalFixedTimeStepWithEnclaveTasking, self).__init__(
45 name,
46 patch_size,
47 overlap,
48 unknowns,
49 auxiliary_variables,
50 min_volume_h,
51 max_volume_h,
52 plot_grid_properties,
53 pde_terms_without_state,
54 kernel_namespace="riemann",
55 )
56 self._normalised_time_step_size = normalised_time_step_size
57
58 self._flux_implementation_flux_implementation = PDETerms.None_Implementation
59 self._ncp_implementation_ncp_implementation = PDETerms.None_Implementation
61 self._riemann_solver_implementation = PDETerms.None_Implementation
63
65
67 initial_conditions=initial_conditions,
68 boundary_conditions=boundary_conditions,
69 refinement_criterion=refinement_criterion,
70 flux=flux,
71 ncp=ncp,
72 eigenvalues=eigenvalues,
73 riemann_solver=riemann_solver,
74 source_term=source_term,
75 )
76
78 self,
79 initial_conditions=None,
80 boundary_conditions=None,
81 refinement_criterion=None,
82 flux=None,
83 ncp=None,
84 eigenvalues=None,
85 riemann_solver=None,
86 source_term=None,
87 memory_location=None,
88 use_split_loop=False,
89 additional_action_set_includes="",
90 additional_user_includes="",
91 ):
92 """
93 If you pass in User_Defined, then the generator will create C++ stubs
94 that you have to befill manually. If you pass in None_Implementation, it
95 will create nop, i.e., no implementation or defaults. Any other string
96 is copied 1:1 into the implementation. If you pass in None, then the
97 set value so far won't be overwritten.
98
99 Please note that not all options are supported by all solvers.
100
101 This routine should be the very last invoked by the constructor.
102 """
103 if initial_conditions is not None:
105 if boundary_conditions is not None:
107 if refinement_criterion is not None:
109 if flux is not None:
111 if ncp is not None:
113 if eigenvalues is not None:
115 if riemann_solver is not None:
116 self._riemann_solver_implementation = riemann_solver
117 if source_term is not None:
119 if memory_location is not None:
121 if use_split_loop:
122 self._use_split_loop_use_split_loop = use_split_loop
123
125 flux_implementation=self._flux_implementation_flux_implementation,
126 ncp_implementation=self._ncp_implementation_ncp_implementation,
127 eigenvalues_implementation=self._eigenvalues_implementation_eigenvalues_implementation,
128 riemann_solver_implementation=self._riemann_solver_implementation,
129 source_term_implementation=self._source_term_implementation_source_term_implementation,
130 compute_max_eigenvalue_of_next_time_step=self._compute_eigenvalue_compute_eigenvalue,
131 solver_variant=SolverVariant.WithVirtualFunctions,
132 kernel_variant=KernelVariant.PatchWiseAoS,
133 )
134
136 flux_implementation=self._flux_implementation_flux_implementation,
137 ncp_implementation=self._ncp_implementation_ncp_implementation,
138 eigenvalues_implementation=self._eigenvalues_implementation_eigenvalues_implementation,
139 riemann_solver_implementation=self._riemann_solver_implementation,
140 source_term_implementation=self._source_term_implementation_source_term_implementation,
141 compute_max_eigenvalue_of_next_time_step=self._compute_eigenvalue_compute_eigenvalue,
142 solver_variant=SolverVariant.Stateless,
143 kernel_variant=KernelVariant.PatchWiseAoS,
144 )
145
147 flux_implementation=self._flux_implementation_flux_implementation,
148 ncp_implementation=self._ncp_implementation_ncp_implementation,
149 eigenvalues_implementation=self._eigenvalues_implementation_eigenvalues_implementation,
150 riemann_solver_implementation=self._riemann_solver_implementation,
151 source_term_implementation=self._source_term_implementation_source_term_implementation,
152 compute_max_eigenvalue_of_next_time_step=self._compute_eigenvalue_compute_eigenvalue,
153 solver_variant=SolverVariant.Stateless,
154 kernel_variant=KernelVariant.PatchWiseAoS,
155 )
156
158 flux_implementation=self._flux_implementation_flux_implementation,
159 ncp_implementation=self._ncp_implementation_ncp_implementation,
160 eigenvalues_implementation=self._eigenvalues_implementation_eigenvalues_implementation,
161 riemann_solver_implementation=self._riemann_solver_implementation,
162 source_term_implementation=self._source_term_implementation_source_term_implementation,
163 compute_max_eigenvalue_of_next_time_step=self._compute_eigenvalue_compute_eigenvalue,
164 solver_variant=SolverVariant.Accelerator,
165 kernel_variant=KernelVariant.PatchWiseAoS,
166 )
167
168 if (
170 == ReconstructedArrayMemoryLocation.HeapThroughTarchWithoutDelete
172 == ReconstructedArrayMemoryLocation.HeapWithoutDelete
174 == ReconstructedArrayMemoryLocation.ManagedSharedAcceleratorDeviceMemoryThroughTarchWithoutDelete
175 ):
176 raise Exception(
177 "Memory mode without appropriate delete chosen, i.e. this will lead to a memory leak"
178 )
179
180 solver_code_snippets = FixedTimeSteppingCodeSnippets(
182 )
183
185 flux_implementation=self._flux_implementation_flux_implementation,
186 ncp_implementation=self._ncp_implementation_ncp_implementation,
187 eigenvalues_implementation=self._eigenvalues_implementation_eigenvalues_implementation,
188 riemann_solver_implementation=self._riemann_solver_implementation,
189 source_term_implementation=self._source_term_implementation_source_term_implementation,
190 pde_terms_without_state=self._pde_terms_without_state,
191 )
193 solver_code_snippets.create_abstract_solver_user_declarations()
194 )
196 flux_implementation=self._flux_implementation_flux_implementation,
197 ncp_implementation=self._ncp_implementation_ncp_implementation,
198 eigenvalues_implementation=self._eigenvalues_implementation_eigenvalues_implementation,
199 riemann_solver_implementation=self._riemann_solver_implementation,
200 source_term_implementation=self._source_term_implementation_source_term_implementation,
201 pde_terms_without_state=self._pde_terms_without_state,
202 )
204 solver_code_snippets.create_abstract_solver_user_definitions()
205 )
206
207 self._solver_user_declarations_solver_user_declarations = create_solver_declarations(
208 flux_implementation=self._flux_implementation_flux_implementation,
209 ncp_implementation=self._ncp_implementation_ncp_implementation,
210 eigenvalues_implementation=self._eigenvalues_implementation_eigenvalues_implementation,
211 riemann_solver_implementation=self._riemann_solver_implementation,
212 source_term_implementation=self._source_term_implementation_source_term_implementation,
213 pde_terms_without_state=self._pde_terms_without_state,
214 )
215 self._solver_user_definitions_solver_user_definitions = create_solver_definitions(
216 flux_implementation=self._flux_implementation_flux_implementation,
217 ncp_implementation=self._ncp_implementation_ncp_implementation,
218 eigenvalues_implementation=self._eigenvalues_implementation_eigenvalues_implementation,
219 riemann_solver_implementation=self._riemann_solver_implementation,
220 source_term_implementation=self._source_term_implementation_source_term_implementation,
221 pde_terms_without_state=self._pde_terms_without_state,
222 )
223
225 solver_code_snippets.create_compute_time_step_size()
226 )
228 solver_code_snippets.create_compute_new_time_step_size()
229 )
230
232 solver_code_snippets.create_start_time_step_implementation()
233 )
235 solver_code_snippets.create_finish_time_step_implementation()
236 )
238 solver_code_snippets.create_abstract_solver_constructor_statements()
239 )
240
241 super(GlobalFixedTimeStepWithEnclaveTasking, self).set_implementation(
242 initial_conditions=initial_conditions,
243 boundary_conditions=boundary_conditions,
244 refinement_criterion=refinement_criterion,
245 memory_location=memory_location,
246 use_split_loop=use_split_loop,
247 additional_action_set_includes=additional_action_set_includes,
248 additional_user_includes=additional_user_includes,
249 )
250
251 @property
253 return (
254 super(GlobalFixedTimeStepWithEnclaveTasking, self).user_action_set_includes
255 + """
256#include "exahype2/fv/riemann/Riemann.h"
257"""
258 )
259
260 def __str__(self):
261 result = (
262 super(GlobalFixedTimeStepWithEnclaveTasking, self).__str__().rstrip("\n")
263 )
264 result += (
265 """
266Riemann solver: """
268 + """
269"""
270 )
271 return result
272
273 __repr__ = __str__
Enclave tasking variant of the Finite Volume scheme.
set_implementation(self, boundary_conditions, refinement_criterion, initial_conditions, memory_location, use_split_loop, 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...
Code snippet generator for fixed time stepping in the Runge-Kutta schemes.
set_implementation(self, initial_conditions=None, boundary_conditions=None, refinement_criterion=None, flux=None, ncp=None, eigenvalues=None, riemann_solver=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...
__init__(self, name, patch_size, unknowns, auxiliary_variables, min_volume_h, max_volume_h, normalised_time_step_size, initial_conditions=PDETerms.User_Defined_Implementation, boundary_conditions=PDETerms.User_Defined_Implementation, refinement_criterion=PDETerms.Empty_Implementation, flux=PDETerms.None_Implementation, ncp=PDETerms.None_Implementation, eigenvalues=PDETerms.None_Implementation, riemann_solver=PDETerms.User_Defined_Implementation, source_term=PDETerms.None_Implementation, plot_grid_properties=False, pde_terms_without_state=False, overlap=1)
time_step_size: Float This is the normalised time step size w.r.t.
user_action_set_includes(self)
Add further includes to this property, if your action sets require some additional routines from othe...
create_compute_Riemann_kernel(flux_implementation, ncp_implementation, eigenvalues_implementation, riemann_solver_implementation, source_term_implementation, compute_max_eigenvalue_of_next_time_step, SolverVariant solver_variant, KernelVariant kernel_variant)
Return only the unqualified function call, i.e., without any namespaces.
Definition kernels.py:39