Peano
Loading...
Searching...
No Matches
GlobalAdaptiveTimeStep.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 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(GlobalAdaptiveTimeStep, 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
139 if (
141 == ReconstructedArrayMemoryLocation.HeapThroughTarchWithoutDelete
143 == ReconstructedArrayMemoryLocation.HeapWithoutDelete
145 == ReconstructedArrayMemoryLocation.ManagedSharedAcceleratorDeviceMemoryThroughTarchWithoutDelete
146 ):
147 raise Exception(
148 "Memory mode without appropriate delete chosen, i.e. this will lead to a memory leak"
149 )
150
151 solver_code_snippets = AdaptiveTimeSteppingCodeSnippets(
153 )
154
156 flux_implementation=self._flux_implementation_flux_implementation,
157 ncp_implementation=self._ncp_implementation_ncp_implementation,
158 eigenvalues_implementation=self._eigenvalues_implementation_eigenvalues_implementation,
159 riemann_solver_implementation=self._riemann_solver_implementation,
160 source_term_implementation=self._source_term_implementation_source_term_implementation,
161 pde_terms_without_state=self._pde_terms_without_state,
162 )
164 solver_code_snippets.create_abstract_solver_user_declarations()
165 )
167 flux_implementation=self._flux_implementation_flux_implementation,
168 ncp_implementation=self._ncp_implementation_ncp_implementation,
169 eigenvalues_implementation=self._eigenvalues_implementation_eigenvalues_implementation,
170 riemann_solver_implementation=self._riemann_solver_implementation,
171 source_term_implementation=self._source_term_implementation_source_term_implementation,
172 pde_terms_without_state=self._pde_terms_without_state,
173 )
175 solver_code_snippets.create_abstract_solver_user_definitions()
176 )
177
178 self._solver_user_declarations_solver_user_declarations = create_solver_declarations(
179 flux_implementation=self._flux_implementation_flux_implementation,
180 ncp_implementation=self._ncp_implementation_ncp_implementation,
181 eigenvalues_implementation=self._eigenvalues_implementation_eigenvalues_implementation,
182 riemann_solver_implementation=self._riemann_solver_implementation,
183 source_term_implementation=self._source_term_implementation_source_term_implementation,
184 pde_terms_without_state=self._pde_terms_without_state,
185 )
186 self._solver_user_definitions_solver_user_definitions = create_solver_definitions(
187 flux_implementation=self._flux_implementation_flux_implementation,
188 ncp_implementation=self._ncp_implementation_ncp_implementation,
189 eigenvalues_implementation=self._eigenvalues_implementation_eigenvalues_implementation,
190 riemann_solver_implementation=self._riemann_solver_implementation,
191 source_term_implementation=self._source_term_implementation_source_term_implementation,
192 pde_terms_without_state=self._pde_terms_without_state,
193 )
194
196 solver_code_snippets.create_compute_time_step_size()
197 )
199 solver_code_snippets.create_compute_new_time_step_size()
200 )
201
203 solver_code_snippets.create_start_time_step_implementation()
204 )
206 solver_code_snippets.create_finish_time_step_implementation()
207 )
209 solver_code_snippets.create_abstract_solver_constructor_statements()
210 )
211
212 super(GlobalAdaptiveTimeStep, self).set_implementation(
213 initial_conditions=initial_conditions,
214 boundary_conditions=boundary_conditions,
215 refinement_criterion=refinement_criterion,
216 memory_location=memory_location,
217 use_split_loop=use_split_loop,
218 additional_action_set_includes=additional_action_set_includes,
219 additional_user_includes=additional_user_includes,
220 )
221
222 @property
224 return (
225 super(GlobalAdaptiveTimeStep, self).user_action_set_includes
226 + """
227#include "exahype2/fv/riemann/Riemann.h"
228"""
229 )
230
231 def __str__(self):
232 result = super(GlobalAdaptiveTimeStep, self).__str__().rstrip("\n")
233 result += (
234 """
235Riemann solver: """
237 + """
238"""
239 )
240 return result
241
242 __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...
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...
__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)
Instantiate a generic FV scheme with an overlap of 1.
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