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 ):
38 """!
39
40 Construct solver
41
42
43 time_step_relaxation: Float
44 Calibration factor of CFL condition. The Runge-Kutta order is multiplied
45 with this value following the formula for Cockburn-Shu damping. However,
46 also the actual polynomial order has to enter the chosen time step size
47 through an additional @f$ p^{-2} @f$ scaling. We expect the user to
48 incorporate such an additional scaling within time_step_relaxation.
49
50 """
51
52
53 if reconstruction_with_rk:
55 else:
57
58 super(GlobalAdaptiveTimeStepWithEnclaveTasking,self).__init__(name,
59 patch_size,
60 3, #overlap,
61 rk_order,
62 unknowns,
63 auxiliary_variables,
64 min_meshcell_h,
65 max_meshcell_h,
66 plot_grid_properties,
67 kernel_namespace="fd4",
68 pde_terms_without_state=pde_terms_without_state,
69 )
70
71 self._time_step_relaxation = time_step_relaxation
73
74 self._KO_Sigma = KOSigma
75
77 ncp=ncp,
78 eigenvalues=eigenvalues,
79 boundary_conditions=boundary_conditions,
80 refinement_criterion=refinement_criterion,
81 initial_conditions=initial_conditions,
82 source_term=source_term )
83
84
86 flux=None, ncp=None, source_term=None, eigenvalues=None,
87 boundary_conditions=None,refinement_criterion=None,initial_conditions=None,
88 memory_location = None,
89 additional_action_set_includes = "",
90 additional_user_includes = "",
91 KOSigma = None
92 ):
93 """
94 If you pass in User_Defined, then the generator will create C++ stubs
95 that you have to befill manually. If you pass in None_Implementation, it
96 will create nop, i.e. no implementation or defaults. Any other string
97 is copied 1:1 into the implementation. If you pass in None, then the
98 set value so far won't be overwritten.
99
100 Please note that not all options are supported by all solvers.
101
102 This routine should be the very last invoked by the constructor.
103 """
104 super(GlobalAdaptiveTimeStepWithEnclaveTasking,self).set_implementation(
105 flux, ncp, source_term, eigenvalues,
106 boundary_conditions, refinement_criterion, initial_conditions, memory_location, additional_action_set_includes, additional_user_includes)
107
108 if not KOSigma==None: self._KO_Sigma = KOSigma
109
110 create_FD4_kernel_definitions_3d()
111
112 self._compute_kernel_call_compute_kernel_call = create_compute_kernel_for_FD4_DSL(
116 compute_max_eigenvalue_of_next_time_step = True,
117 solver_variant = SolverVariant.WithVirtualFunctions,
118 kernel_variant = KernelVariant.PatchWiseAoSHeap,
119 KOSigma = self._KO_Sigma
120 )
121 self._fused_compute_kernel_call_cpu_fused_compute_kernel_call_cpu = create_compute_kernel_for_FD4_DSL(
125 compute_max_eigenvalue_of_next_time_step = True,
126 solver_variant = SolverVariant.Stateless,
127 kernel_variant = KernelVariant.PatchWiseAoSHeap,
128 #solver_variant = SolverVariant.Multicore,
129 #kernel_variant = KernelVariant.BatchedAoSHeap,
130 KOSigma = self._KO_Sigma
131 )
132 self._fused_compute_kernel_call_gpu_fused_compute_kernel_call_gpu = create_compute_kernel_for_FD4_DSL(
136 compute_max_eigenvalue_of_next_time_step = True,
137 solver_variant = SolverVariant.AcceleratorWithExplicitCopy,
138 kernel_variant = KernelVariant.PatchWiseAoSHeap,
139 KOSigma = self._KO_Sigma
140 )
141
143
145 self._abstract_solver_user_declarations_abstract_solver_user_declarations += solver_code_snippets.create_abstract_solver_user_declarations()
147 self._abstract_solver_user_definitions_abstract_solver_user_definitions += solver_code_snippets.create_abstract_solver_user_definitions()
148
149 self._compute_time_step_size_compute_time_step_size = solver_code_snippets.create_compute_time_step_size()
150 self._compute_new_time_step_size_compute_new_time_step_size = solver_code_snippets.create_compute_new_time_step_size()
151
154
155 self._start_time_step_implementation_start_time_step_implementation = solver_code_snippets.create_start_time_step_implementation()
156 self._finish_time_step_implementation_finish_time_step_implementation = solver_code_snippets.create_finish_time_step_implementation()
157 self._constructor_implementation_constructor_implementation = solver_code_snippets.create_abstract_solver_constructor_statements()
158
160
161
162 @property
164 return super(GlobalAdaptiveTimeStepWithEnclaveTasking, self).user_action_set_includes + """
165#include "kernels/FD4.h"
166"""
167
169 """!
170
171 Invoce superclass and then add one more field:
172
173 - RECONSTRUCTION_STAGES
174
175 """
176 super(GlobalAdaptiveTimeStepWithEnclaveTasking, self).add_entries_to_text_replacement_dictionary(d)
177 d["RECONSTRUCTION_STAGES"]=self._reconstruction_stages_reconstruction_stages
178
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...
__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)
Construct solver.
user_action_set_includes(self)
Add further includes to this property, if your action sets require some additional routines from othe...