Peano
Loading...
Searching...
No Matches
GlobalAdaptiveTimeStepWithEnclaveTasking.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 AdaptiveTimeSteppingCodeSnippets,
12)
13
14
17 self,
18 name,
19 patch_size,
20 unknowns,
21 auxiliary_variables,
22 min_volume_h,
23 max_volume_h,
24 time_step_relaxation,
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 super(GlobalAdaptiveTimeStepWithEnclaveTasking, self).__init__(
38 name,
39 patch_size,
40 overlap,
41 unknowns,
42 auxiliary_variables,
43 min_volume_h,
44 max_volume_h,
45 plot_grid_properties,
46 pde_terms_without_state,
47 kernel_namespace="riemann",
48 )
49 self._time_step_relaxation = time_step_relaxation
50
51 self._flux_implementation_flux_implementation = PDETerms.None_Implementation
52 self._ncp_implementation_ncp_implementation = PDETerms.None_Implementation
54 self._riemann_solver_implementation = PDETerms.None_Implementation
56
58
60 initial_conditions=initial_conditions,
61 boundary_conditions=boundary_conditions,
62 refinement_criterion=refinement_criterion,
63 flux=flux,
64 ncp=ncp,
65 eigenvalues=eigenvalues,
66 riemann_solver=riemann_solver,
67 source_term=source_term,
68 )
69
71 self,
72 initial_conditions=None,
73 boundary_conditions=None,
74 refinement_criterion=None,
75 flux=None,
76 ncp=None,
77 eigenvalues=None,
78 riemann_solver=None,
79 source_term=None,
80 memory_location=None,
81 use_split_loop=False,
82 additional_action_set_includes="",
83 additional_user_includes="",
84 ):
85 """
86 If you pass in User_Defined, then the generator will create C++ stubs
87 that you have to befill manually. If you pass in None_Implementation, it
88 will create nop, i.e., no implementation or defaults. Any other string
89 is copied 1:1 into the implementation. If you pass in None, then the
90 set value so far won't be overwritten.
91
92 Please note that not all options are supported by all solvers.
93
94 This routine should be the very last invoked by the constructor.
95 """
96 if initial_conditions is not None:
98 if boundary_conditions is not None:
100 if refinement_criterion is not None:
102 if flux is not None:
104 if ncp is not None:
106 if eigenvalues is not None:
108 if riemann_solver is not None:
109 self._riemann_solver_implementation = riemann_solver
110 if source_term is not None:
112 if memory_location is not None:
114 if use_split_loop:
115 self._use_split_loop_use_split_loop = use_split_loop
116
118 flux_implementation=self._flux_implementation_flux_implementation,
119 ncp_implementation=self._ncp_implementation_ncp_implementation,
120 eigenvalues_implementation=self._eigenvalues_implementation_eigenvalues_implementation,
121 riemann_solver_implementation=self._riemann_solver_implementation,
122 source_term_implementation=self._source_term_implementation_source_term_implementation,
123 compute_max_eigenvalue_of_next_time_step=self._compute_eigenvalue_compute_eigenvalue,
124 solver_variant=SolverVariant.WithVirtualFunctions,
125 kernel_variant=KernelVariant.PatchWiseAoS,
126 )
127
129 flux_implementation=self._flux_implementation_flux_implementation,
130 ncp_implementation=self._ncp_implementation_ncp_implementation,
131 eigenvalues_implementation=self._eigenvalues_implementation_eigenvalues_implementation,
132 riemann_solver_implementation=self._riemann_solver_implementation,
133 source_term_implementation=self._source_term_implementation_source_term_implementation,
134 compute_max_eigenvalue_of_next_time_step=self._compute_eigenvalue_compute_eigenvalue,
135 solver_variant=SolverVariant.Stateless,
136 kernel_variant=KernelVariant.PatchWiseAoS,
137 )
138
140 flux_implementation=self._flux_implementation_flux_implementation,
141 ncp_implementation=self._ncp_implementation_ncp_implementation,
142 eigenvalues_implementation=self._eigenvalues_implementation_eigenvalues_implementation,
143 riemann_solver_implementation=self._riemann_solver_implementation,
144 source_term_implementation=self._source_term_implementation_source_term_implementation,
145 compute_max_eigenvalue_of_next_time_step=self._compute_eigenvalue_compute_eigenvalue,
146 solver_variant=SolverVariant.Stateless,
147 kernel_variant=KernelVariant.PatchWiseAoS,
148 )
149
151 flux_implementation=self._flux_implementation_flux_implementation,
152 ncp_implementation=self._ncp_implementation_ncp_implementation,
153 eigenvalues_implementation=self._eigenvalues_implementation_eigenvalues_implementation,
154 riemann_solver_implementation=self._riemann_solver_implementation,
155 source_term_implementation=self._source_term_implementation_source_term_implementation,
156 compute_max_eigenvalue_of_next_time_step=self._compute_eigenvalue_compute_eigenvalue,
157 solver_variant=SolverVariant.Accelerator,
158 kernel_variant=KernelVariant.PatchWiseAoS,
159 )
160
161 if (
163 == ReconstructedArrayMemoryLocation.HeapThroughTarchWithoutDelete
165 == ReconstructedArrayMemoryLocation.HeapWithoutDelete
167 == ReconstructedArrayMemoryLocation.ManagedSharedAcceleratorDeviceMemoryThroughTarchWithoutDelete
168 ):
169 raise Exception(
170 "Memory mode without appropriate delete chosen, i.e. this will lead to a memory leak"
171 )
172
173 solver_code_snippets = AdaptiveTimeSteppingCodeSnippets(
175 )
176
178 flux_implementation=self._flux_implementation_flux_implementation,
179 ncp_implementation=self._ncp_implementation_ncp_implementation,
180 eigenvalues_implementation=self._eigenvalues_implementation_eigenvalues_implementation,
181 riemann_solver_implementation=self._riemann_solver_implementation,
182 source_term_implementation=self._source_term_implementation_source_term_implementation,
183 pde_terms_without_state=self._pde_terms_without_state,
184 )
186 solver_code_snippets.create_abstract_solver_user_declarations()
187 )
189 flux_implementation=self._flux_implementation_flux_implementation,
190 ncp_implementation=self._ncp_implementation_ncp_implementation,
191 eigenvalues_implementation=self._eigenvalues_implementation_eigenvalues_implementation,
192 riemann_solver_implementation=self._riemann_solver_implementation,
193 source_term_implementation=self._source_term_implementation_source_term_implementation,
194 pde_terms_without_state=self._pde_terms_without_state,
195 )
197 solver_code_snippets.create_abstract_solver_user_definitions()
198 )
199
200 self._solver_user_declarations_solver_user_declarations = create_solver_declarations(
201 flux_implementation=self._flux_implementation_flux_implementation,
202 ncp_implementation=self._ncp_implementation_ncp_implementation,
203 eigenvalues_implementation=self._eigenvalues_implementation_eigenvalues_implementation,
204 riemann_solver_implementation=self._riemann_solver_implementation,
205 source_term_implementation=self._source_term_implementation_source_term_implementation,
206 pde_terms_without_state=self._pde_terms_without_state,
207 )
208 self._solver_user_definitions_solver_user_definitions = create_solver_definitions(
209 flux_implementation=self._flux_implementation_flux_implementation,
210 ncp_implementation=self._ncp_implementation_ncp_implementation,
211 eigenvalues_implementation=self._eigenvalues_implementation_eigenvalues_implementation,
212 riemann_solver_implementation=self._riemann_solver_implementation,
213 source_term_implementation=self._source_term_implementation_source_term_implementation,
214 pde_terms_without_state=self._pde_terms_without_state,
215 )
216
218 solver_code_snippets.create_compute_time_step_size()
219 )
221 solver_code_snippets.create_compute_new_time_step_size()
222 )
223
225 solver_code_snippets.create_start_time_step_implementation()
226 )
228 solver_code_snippets.create_finish_time_step_implementation()
229 )
231 solver_code_snippets.create_abstract_solver_constructor_statements()
232 )
233
234 super(GlobalAdaptiveTimeStepWithEnclaveTasking, self).set_implementation(
235 initial_conditions=initial_conditions,
236 boundary_conditions=boundary_conditions,
237 refinement_criterion=refinement_criterion,
238 memory_location=memory_location,
239 use_split_loop=use_split_loop,
240 additional_action_set_includes=additional_action_set_includes,
241 additional_user_includes=additional_user_includes,
242 )
243
244 @property
246 return (
247 super(
248 GlobalAdaptiveTimeStepWithEnclaveTasking, self
249 ).user_action_set_includes
250 + """
251#include "exahype2/fv/riemann/Riemann.h"
252"""
253 )
254
255 def __str__(self):
256 result = (
257 super(GlobalAdaptiveTimeStepWithEnclaveTasking, self).__str__().rstrip("\n")
258 )
259 result += (
260 """
261Riemann solver: """
263 + """
264"""
265 )
266 return result
267
268 __repr__ = __str__
Code snippet generator for fixed time stepping in the Runge-Kutta schemes.
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...
user_action_set_includes(self)
Add further includes to this property, if your action sets require some additional routines from othe...
__init__(self, name, patch_size, unknowns, auxiliary_variables, min_volume_h, max_volume_h, time_step_relaxation, 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)
Not so nice.
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...
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