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 exahype2.solvers.PDETerms import PDETerms
4from exahype2.solvers.rkfd.SeparateSweepsWithEnclaveTasking import SeparateSweepsWithEnclaveTasking
5
6import jinja2
7
8from .kernels import create_compute_kernel_for_FD4_DSL
9from .kernels import create_FD4_kernel_definitions_3d
10
11from exahype2.solvers.rkfd.kernels import create_abstract_solver_declarations
12from exahype2.solvers.rkfd.kernels import create_abstract_solver_definitions
13from exahype2.solvers.rkfd.kernels import create_solver_declarations
14from exahype2.solvers.rkfd.kernels import create_solver_definitions
15#
16from exahype2.solvers.rkfd.kernels import SolverVariant
17from exahype2.solvers.rkfd.kernels import KernelVariant
18
19from exahype2.solvers.rkfd.AdaptiveTimeSteppingCodeSnippets import AdaptiveTimeSteppingCodeSnippets
20
21
22
24 def __init__(self,
25 name, patch_size, rk_order, unknowns, auxiliary_variables, min_meshcell_h, max_meshcell_h, time_step_relaxation,
26 reconstruction_with_rk=False,
27 flux=PDETerms.User_Defined_Implementation,
28 ncp=PDETerms.None_Implementation,
29 point_source=PDETerms.None_Implementation,
30 boundary_conditions=PDETerms.User_Defined_Implementation,
31 refinement_criterion=PDETerms.Empty_Implementation,
32 initial_conditions=PDETerms.User_Defined_Implementation,
33 source_term=PDETerms.None_Implementation,
34 eigenvalues=PDETerms.User_Defined_Implementation,
35 pde_terms_without_state: bool = False,
36 plot_grid_properties=False, KOSigma=8.0,
37 device_resident_rk=False
38 ):
39 """!
40
41 Construct solver
42
43
44 time_step_relaxation: Float
45 Calibration factor of CFL condition. The Runge-Kutta order is multiplied
46 with this value following the formula for Cockburn-Shu damping. However,
47 also the actual polynomial order has to enter the chosen time step size
48 through an additional @f$ p^{-2} @f$ scaling. We expect the user to
49 incorporate such an additional scaling within time_step_relaxation.
50
51 """
52
53
54 if reconstruction_with_rk:
56 else:
58
59 super(GlobalAdaptiveTimeStepWithEnclaveTasking,self).__init__(name,
60 patch_size,
61 3, #overlap,
62 rk_order,
63 unknowns,
64 auxiliary_variables,
65 min_meshcell_h,
66 max_meshcell_h,
67 plot_grid_properties,
68 kernel_namespace="fd4",
69 pde_terms_without_state=pde_terms_without_state,
70 device_resident_rk=device_resident_rk,
71 )
72
73 self._time_step_relaxation = time_step_relaxation
75
76 self._KO_Sigma = KOSigma
77
79 ncp=ncp,
80 eigenvalues=eigenvalues,
81 boundary_conditions=boundary_conditions,
82 refinement_criterion=refinement_criterion,
83 initial_conditions=initial_conditions,
84 source_term=source_term )
85
86
88 flux=None, ncp=None, source_term=None, eigenvalues=None,
89 boundary_conditions=None,refinement_criterion=None,initial_conditions=None,
90 memory_location = None,
91 additional_action_set_includes = "",
92 additional_user_includes = "",
93 KOSigma = None
94 ):
95 """
96 If you pass in User_Defined, then the generator will create C++ stubs
97 that you have to befill manually. If you pass in None_Implementation, it
98 will create nop, i.e. no implementation or defaults. Any other string
99 is copied 1:1 into the implementation. If you pass in None, then the
100 set value so far won't be overwritten.
101
102 Please note that not all options are supported by all solvers.
103
104 This routine should be the very last invoked by the constructor.
105 """
106 super(GlobalAdaptiveTimeStepWithEnclaveTasking,self).set_implementation(
107 flux, ncp, source_term, eigenvalues,
108 boundary_conditions, refinement_criterion, initial_conditions, memory_location, additional_action_set_includes, additional_user_includes)
109
110 if not KOSigma==None: self._KO_Sigma = KOSigma
111
112 create_FD4_kernel_definitions_3d(self._patch_size_patch_size,
115 self._KO_Sigma,
119 compute_max_eigenvalue_of_next_time_step = True
120 )
121
122 self._compute_kernel_call_compute_kernel_call = create_compute_kernel_for_FD4_DSL(
126 compute_max_eigenvalue_of_next_time_step = True,
127 solver_variant = SolverVariant.WithVirtualFunctions,
128 kernel_variant = KernelVariant.PatchWiseAoSHeap,
129 KOSigma = self._KO_Sigma
130 )
131 self._fused_compute_kernel_call_cpu_fused_compute_kernel_call_cpu = create_compute_kernel_for_FD4_DSL(
135 compute_max_eigenvalue_of_next_time_step = True,
136 solver_variant = SolverVariant.Stateless,
137 kernel_variant = KernelVariant.PatchWiseAoSHeap,
138 #solver_variant = SolverVariant.Multicore,
139 #kernel_variant = KernelVariant.BatchedAoSHeap,
140 KOSigma = self._KO_Sigma
141 )
142 self._fused_compute_kernel_call_gpu_fused_compute_kernel_call_gpu = create_compute_kernel_for_FD4_DSL(
146 compute_max_eigenvalue_of_next_time_step = True,
147 solver_variant = SolverVariant.AcceleratorWithExplicitCopy,
148 kernel_variant = KernelVariant.PatchWiseAoSHeap,
149 KOSigma = self._KO_Sigma
150 )
151
153
155 self._abstract_solver_user_declarations_abstract_solver_user_declarations += solver_code_snippets.create_abstract_solver_user_declarations()
157 self._abstract_solver_user_definitions_abstract_solver_user_definitions += solver_code_snippets.create_abstract_solver_user_definitions()
158
159 self._compute_time_step_size_compute_time_step_size = solver_code_snippets.create_compute_time_step_size()
160 self._compute_new_time_step_size_compute_new_time_step_size = solver_code_snippets.create_compute_new_time_step_size()
161
164
165 self._start_time_step_implementation_start_time_step_implementation = solver_code_snippets.create_start_time_step_implementation()
166 self._finish_time_step_implementation_finish_time_step_implementation = solver_code_snippets.create_finish_time_step_implementation()
167 self._constructor_implementation_constructor_implementation = solver_code_snippets.create_abstract_solver_constructor_statements()
168
170
171
172 @property
174 return super(GlobalAdaptiveTimeStepWithEnclaveTasking, self).user_action_set_includes + """
175#include "kernels/FD4.h"
176"""
177
179 """!
180
181 Invoce superclass and then add one more field:
182
183 - RECONSTRUCTION_STAGES
184
185 """
186 super(GlobalAdaptiveTimeStepWithEnclaveTasking, self).add_entries_to_text_replacement_dictionary(d)
187 d["RECONSTRUCTION_STAGES"]=self._reconstruction_stages_reconstruction_stages
188
Code snippet generator for fixed time stepping in the Runge-Kutta schemes.
Enclave variant of the solver where we still run through mesh once per Runge-Kutta sweep.
create_action_sets(self)
Call superclass routine and then reconfigure the update cell call.
set_implementation(self, flux, ncp, source_term, eigenvalues, boundary_conditions, refinement_criterion, initial_conditions, memory_location, 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)
Call superclass routine and then reconfigure the update cell call.
set_implementation(self, flux=None, ncp=None, source_term=None, eigenvalues=None, boundary_conditions=None, refinement_criterion=None, initial_conditions=None, memory_location=None, additional_action_set_includes="", additional_user_includes="", KOSigma=None)
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, rk_order, unknowns, auxiliary_variables, min_meshcell_h, max_meshcell_h, time_step_relaxation, reconstruction_with_rk=False, flux=PDETerms.User_Defined_Implementation, ncp=PDETerms.None_Implementation, point_source=PDETerms.None_Implementation, boundary_conditions=PDETerms.User_Defined_Implementation, refinement_criterion=PDETerms.Empty_Implementation, initial_conditions=PDETerms.User_Defined_Implementation, source_term=PDETerms.None_Implementation, eigenvalues=PDETerms.User_Defined_Implementation, bool pde_terms_without_state=False, plot_grid_properties=False, KOSigma=8.0, device_resident_rk=False)
Construct solver.