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 toolbox.blockstructured.api import ReconstructedArrayMemoryLocation
6
7from exahype2.solvers import PDETerms
8from exahype2.solvers.fv.SingleSweep import SingleSweep
9
10from exahype2.solvers.fv.AdaptiveTimeSteppingCodeSnippets import (
11 AdaptiveTimeSteppingCodeSnippets,
12)
13
14
15class GlobalAdaptiveTimeStep(SingleSweep):
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
155 self._abstract_solver_user_declarations = create_abstract_solver_declarations(
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 )
166 self._abstract_solver_user_definitions = create_abstract_solver_definitions(
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
178 self._solver_user_declarations = create_solver_declarations(
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 )
186 self._solver_user_definitions = create_solver_definitions(
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__
__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)
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