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 = PDETerms.None_Implementation
52 self._ncp_implementation = PDETerms.None_Implementation
53 self._eigenvalues_implementation = PDETerms.None_Implementation
54 self._riemann_solver_implementation = PDETerms.None_Implementation
55 self._source_term_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:
97 self._initial_conditions_implementation = initial_conditions
98 if boundary_conditions is not None:
99 self._boundary_conditions_implementation = boundary_conditions
100 if refinement_criterion is not None:
101 self._refinement_criterion_implementation = refinement_criterion
102 if flux is not None:
103 self._flux_implementation = flux
104 if ncp is not None:
105 self._ncp_implementation = ncp
106 if eigenvalues is not None:
107 self._eigenvalues_implementation = eigenvalues
108 if riemann_solver is not None:
109 self._riemann_solver_implementation = riemann_solver
110 if source_term is not None:
111 self._source_term_implementation = source_term
112 if memory_location is not None:
114 if use_split_loop:
115 self._use_split_loop = use_split_loop
116
118 flux_implementation=self._flux_implementation,
119 ncp_implementation=self._ncp_implementation,
120 eigenvalues_implementation=self._eigenvalues_implementation,
121 riemann_solver_implementation=self._riemann_solver_implementation,
122 source_term_implementation=self._source_term_implementation,
123 compute_max_eigenvalue_of_next_time_step=self._compute_eigenvalue,
124 solver_variant=SolverVariant.WithVirtualFunctions,
125 kernel_variant=KernelVariant.PatchWiseAoS,
126 )
127
129 flux_implementation=self._flux_implementation,
130 ncp_implementation=self._ncp_implementation,
131 eigenvalues_implementation=self._eigenvalues_implementation,
132 riemann_solver_implementation=self._riemann_solver_implementation,
133 source_term_implementation=self._source_term_implementation,
134 compute_max_eigenvalue_of_next_time_step=self._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,
157 ncp_implementation=self._ncp_implementation,
158 eigenvalues_implementation=self._eigenvalues_implementation,
159 riemann_solver_implementation=self._riemann_solver_implementation,
160 source_term_implementation=self._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,
168 ncp_implementation=self._ncp_implementation,
169 eigenvalues_implementation=self._eigenvalues_implementation,
170 riemann_solver_implementation=self._riemann_solver_implementation,
171 source_term_implementation=self._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
179 flux_implementation=self._flux_implementation,
180 ncp_implementation=self._ncp_implementation,
181 eigenvalues_implementation=self._eigenvalues_implementation,
182 riemann_solver_implementation=self._riemann_solver_implementation,
183 source_term_implementation=self._source_term_implementation,
184 pde_terms_without_state=self._pde_terms_without_state,
185 )
187 flux_implementation=self._flux_implementation,
188 ncp_implementation=self._ncp_implementation,
189 eigenvalues_implementation=self._eigenvalues_implementation,
190 riemann_solver_implementation=self._riemann_solver_implementation,
191 source_term_implementation=self._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__
str _compute_kernel_call_stateless
Definition FV.py:295
str _constructor_implementation
Definition FV.py:306
str _abstract_solver_user_definitions
Definition FV.py:300
str _finish_time_step_implementation
Definition FV.py:305
str _solver_user_declarations
Definition FV.py:301
str _abstract_solver_user_declarations
Definition FV.py:299
tuple _reconstructed_array_memory_location
Definition FV.py:265
str _start_time_step_implementation
Definition FV.py:304
str _compute_new_time_step_size
Definition FV.py:290
Probably the simplest solver you could think off.
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)
create_solver_definitions(flux_implementation, ncp_implementation, eigenvalues_implementation, riemann_solver_implementation, source_term_implementation, pde_terms_without_state)
Definition kernels.py:908
create_abstract_solver_declarations(flux_implementation, ncp_implementation, eigenvalues_implementation, riemann_solver_implementation, source_term_implementation, pde_terms_without_state)
Definition kernels.py:237
create_solver_declarations(flux_implementation, ncp_implementation, eigenvalues_implementation, riemann_solver_implementation, source_term_implementation, pde_terms_without_state)
Definition kernels.py:678
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
create_abstract_solver_definitions(flux_implementation, ncp_implementation, eigenvalues_implementation, riemann_solver_implementation, source_term_implementation, pde_terms_without_state)
Definition kernels.py:462