Peano
Loading...
Searching...
No Matches
GlobalFixedTimeStep.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.SingleSweep import SingleSweep
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(GlobalFixedTimeStep, 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
146 if (
148 == ReconstructedArrayMemoryLocation.HeapThroughTarchWithoutDelete
150 == ReconstructedArrayMemoryLocation.HeapWithoutDelete
152 == ReconstructedArrayMemoryLocation.ManagedSharedAcceleratorDeviceMemoryThroughTarchWithoutDelete
153 ):
154 raise Exception(
155 "Memory mode without appropriate delete chosen, i.e. this will lead to a memory leak"
156 )
157
158 solver_code_snippets = FixedTimeSteppingCodeSnippets(
160 )
161
163 flux_implementation=self._flux_implementation_flux_implementation,
164 ncp_implementation=self._ncp_implementation_ncp_implementation,
165 eigenvalues_implementation=self._eigenvalues_implementation_eigenvalues_implementation,
166 riemann_solver_implementation=self._riemann_solver_implementation,
167 source_term_implementation=self._source_term_implementation_source_term_implementation,
168 pde_terms_without_state=self._pde_terms_without_state,
169 )
171 solver_code_snippets.create_abstract_solver_user_declarations()
172 )
174 flux_implementation=self._flux_implementation_flux_implementation,
175 ncp_implementation=self._ncp_implementation_ncp_implementation,
176 eigenvalues_implementation=self._eigenvalues_implementation_eigenvalues_implementation,
177 riemann_solver_implementation=self._riemann_solver_implementation,
178 source_term_implementation=self._source_term_implementation_source_term_implementation,
179 pde_terms_without_state=self._pde_terms_without_state,
180 )
182 solver_code_snippets.create_abstract_solver_user_definitions()
183 )
184
185 self._solver_user_declarations_solver_user_declarations = create_solver_declarations(
186 flux_implementation=self._flux_implementation_flux_implementation,
187 ncp_implementation=self._ncp_implementation_ncp_implementation,
188 eigenvalues_implementation=self._eigenvalues_implementation_eigenvalues_implementation,
189 riemann_solver_implementation=self._riemann_solver_implementation,
190 source_term_implementation=self._source_term_implementation_source_term_implementation,
191 pde_terms_without_state=self._pde_terms_without_state,
192 )
193 self._solver_user_definitions_solver_user_definitions = create_solver_definitions(
194 flux_implementation=self._flux_implementation_flux_implementation,
195 ncp_implementation=self._ncp_implementation_ncp_implementation,
196 eigenvalues_implementation=self._eigenvalues_implementation_eigenvalues_implementation,
197 riemann_solver_implementation=self._riemann_solver_implementation,
198 source_term_implementation=self._source_term_implementation_source_term_implementation,
199 pde_terms_without_state=self._pde_terms_without_state,
200 )
201
203 solver_code_snippets.create_compute_time_step_size()
204 )
206 solver_code_snippets.create_compute_new_time_step_size()
207 )
208
210 solver_code_snippets.create_start_time_step_implementation()
211 )
213 solver_code_snippets.create_finish_time_step_implementation()
214 )
216 solver_code_snippets.create_abstract_solver_constructor_statements()
217 )
218
219 super(GlobalFixedTimeStep, self).set_implementation(
220 initial_conditions=initial_conditions,
221 boundary_conditions=boundary_conditions,
222 refinement_criterion=refinement_criterion,
223 memory_location=memory_location,
224 use_split_loop=use_split_loop,
225 additional_action_set_includes=additional_action_set_includes,
226 additional_user_includes=additional_user_includes,
227 )
228
229 @property
231 return (
232 super(GlobalFixedTimeStep, self).user_action_set_includes
233 + """
234#include "exahype2/fv/riemann/Riemann.h"
235"""
236 )
237
238 def __str__(self):
239 result = super(GlobalFixedTimeStep, self).__str__().rstrip("\n")
240 result += (
241 """
242Riemann solver: """
244 + """
245"""
246 )
247 return result
248
249 __repr__ = __str__
Code snippet generator for fixed time stepping in the Runge-Kutta schemes.
Probably the simplest solver you could think off.
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...
__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...
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