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.fv.EnclaveTasking import EnclaveTasking
5
6import jinja2
7
8from .kernels import create_abstract_solver_declarations
9from .kernels import create_abstract_solver_definitions
10from .kernels import create_solver_declarations
11from .kernels import create_solver_definitions
12from .kernels import create_rusanov_kernel_definitions
13from .kernels import create_compute_Riemann_kernel_for_Rusanov_dsl
14
15from .kernels import SolverVariant
16from .kernels import KernelVariant
17
18from exahype2.solvers.fv.AdaptiveTimeSteppingCodeSnippets import AdaptiveTimeSteppingCodeSnippets
19
20from .kernels import SolverVariant
21
22
24 def __init__(self,
25 name, patch_size, unknowns, auxiliary_variables, min_volume_h, max_volume_h, time_step_relaxation,
26 flux=PDETerms.User_Defined_Implementation,
27 ncp=PDETerms.None_Implementation,
28 eigenvalues=PDETerms.User_Defined_Implementation,
29 boundary_conditions=PDETerms.User_Defined_Implementation,
30 refinement_criterion=PDETerms.Empty_Implementation,
31 initial_conditions=PDETerms.User_Defined_Implementation,
32 source_term=PDETerms.None_Implementation,
33 plot_grid_properties=False,
34 pde_terms_without_state=False, overlap=1
35 ):
36 super(GlobalAdaptiveTimeStepWithEnclaveTasking,self).__init__(name,
37 patch_size,
38 overlap,
39 unknowns,
40 auxiliary_variables,
41 min_volume_h,
42 max_volume_h,
43 plot_grid_properties,
44 pde_terms_without_state,
45 kernel_namespace="rusanov")
46 self._time_step_relaxation = time_step_relaxation
47
48 self._flux_implementation_flux_implementation = PDETerms.None_Implementation
49 self._ncp_implementation_ncp_implementation = PDETerms.None_Implementation
52
54
56 ncp=ncp,
57 eigenvalues=eigenvalues,
58 boundary_conditions=boundary_conditions,
59 refinement_criterion=refinement_criterion,
60 initial_conditions=initial_conditions,
61 source_term=source_term)
62
63
65 flux=None,ncp=None,
66 eigenvalues=None,
67 boundary_conditions=None,refinement_criterion=None,initial_conditions=None,source_term=None,
68 memory_location = None,
69 use_split_loop = False,
70 additional_action_set_includes = "",
71 additional_user_includes = ""
72 ):
73 """
74 If you pass in User_Defined, then the generator will create C++ stubs
75 that you have to befill manually. If you pass in None_Implementation, it
76 will create nop, i.e., no implementation or defaults. Any other string
77 is copied 1:1 into the implementation. If you pass in None, then the
78 set value so far won't be overwritten.
79
80 Please note that not all options are supported by all solvers.
81
82 This routine should be the very last invoked by the constructor.
83 """
84 if flux is not None: self._flux_implementation_flux_implementation = flux
85 if ncp is not None: self._ncp_implementation_ncp_implementation = ncp
86 if eigenvalues is not None: self._eigenvalues_implementation_eigenvalues_implementation = eigenvalues
87 if source_term is not None: self._source_term_implementation_source_term_implementation = source_term
88
89 create_rusanov_kernel_definitions(self._patch_size_patch_size,
95 compute_max_eigenvalue_of_next_time_step = True
96 )
97
98 self._compute_kernel_call_compute_kernel_call = create_compute_Riemann_kernel_for_Rusanov_dsl(
102 compute_max_eigenvalue_of_next_time_step = True,
103 solver_variant = SolverVariant.WithVirtualFunctions,
104 kernel_variant = KernelVariant.PatchWiseAoS
105 )
106
107 self._compute_kernel_call_stateless_compute_kernel_call_stateless = create_compute_Riemann_kernel_for_Rusanov_dsl(
111 compute_max_eigenvalue_of_next_time_step = True,
112 solver_variant = SolverVariant.Stateless,
113 kernel_variant = KernelVariant.PatchWiseAoS
114 )
115
120 compute_max_eigenvalue_of_next_time_step = True,
121 solver_variant = SolverVariant.Stateless,
122 kernel_variant = KernelVariant.PatchWiseAoS
123 )
124
129 compute_max_eigenvalue_of_next_time_step = True,
130 solver_variant = SolverVariant.Accelerator,
131 kernel_variant = KernelVariant.PatchWiseAoS
132 )
133
135
137 self._abstract_solver_user_declarations_abstract_solver_user_declarations += solver_code_snippets.create_abstract_solver_user_declarations()
139 self._abstract_solver_user_definitions_abstract_solver_user_definitions += solver_code_snippets.create_abstract_solver_user_definitions()
140
143
144 self._compute_time_step_size_compute_time_step_size = solver_code_snippets.create_compute_time_step_size()
145 self._compute_new_time_step_size_compute_new_time_step_size = solver_code_snippets.create_compute_new_time_step_size()
146
147 self._start_time_step_implementation_start_time_step_implementation = solver_code_snippets.create_start_time_step_implementation()
148 self._finish_time_step_implementation_finish_time_step_implementation = solver_code_snippets.create_finish_time_step_implementation()
149 self._constructor_implementation_constructor_implementation = solver_code_snippets.create_abstract_solver_constructor_statements()
150
151 super(GlobalAdaptiveTimeStepWithEnclaveTasking,self).set_implementation(boundary_conditions, refinement_criterion, initial_conditions, memory_location, use_split_loop, additional_action_set_includes, additional_user_includes)
152
153
155 super(GlobalAdaptiveTimeStepWithEnclaveTasking,self).create_data_structures()
157
158
159 @property
161 return super(GlobalAdaptiveTimeStepWithEnclaveTasking, self).user_action_set_includes + """
162#include "kernels/rusanov.h"
163"""
Code snippet generator for fixed time stepping in the Runge-Kutta schemes.
Enclave tasking variant of the Finite Volume scheme.
_optimise_patch_storage_for_global_time_stepping(self)
Make storage and loading more restrictive such that enclave data are not held in-between primary and ...
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...
create_data_structures(self)
This routine does not really add new data, but it heavily tailors when data are stored,...
user_action_set_includes(self)
Add further includes to this property, if your action sets require some additional routines from othe...
__init__(self, name, patch_size, unknowns, auxiliary_variables, min_volume_h, max_volume_h, time_step_relaxation, flux=PDETerms.User_Defined_Implementation, ncp=PDETerms.None_Implementation, eigenvalues=PDETerms.User_Defined_Implementation, boundary_conditions=PDETerms.User_Defined_Implementation, refinement_criterion=PDETerms.Empty_Implementation, initial_conditions=PDETerms.User_Defined_Implementation, source_term=PDETerms.None_Implementation, plot_grid_properties=False, pde_terms_without_state=False, overlap=1)
Not so nice.
set_implementation(self, flux=None, ncp=None, eigenvalues=None, boundary_conditions=None, refinement_criterion=None, initial_conditions=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...