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.rkdg.SeparateSweepsWithEnclaveTasking import SeparateSweepsWithEnclaveTasking
5
6from exahype2.solvers.rkdg.kernels import create_abstract_solver_declarations
7from exahype2.solvers.rkdg.kernels import create_abstract_solver_definitions
8from exahype2.solvers.rkdg.kernels import create_solver_declarations
9from exahype2.solvers.rkdg.kernels import create_solver_definitions
10
11from exahype2.solvers.rkdg.kernels import SolverVariant
12
13from exahype2.solvers.rkdg.kernels import create_volumetric_solver_call_dsl
14from exahype2.solvers.rkdg.kernels import create_add_solver_contributions_call
15from exahype2.solvers.rkdg.kernels import create_multiply_with_inverted_mass_matrix_call
16from exahype2.solvers.rkdg.rusanov.kernels import create_Riemann_solver_call_dsl
17from exahype2.solvers.rkdg.kernels import create_cell_integral_kernel_definitions
18from exahype2.solvers.rkdg.rusanov.kernels import create_Riemann_solver_kernel_definitions
19from exahype2.solvers.rkdg.kernels import clear_dg_kernel_file
20
21from exahype2.solvers.rkdg.AdaptiveTimeSteppingCodeSnippets import AdaptiveTimeSteppingCodeSnippets
22
24
25
27 """!
28
29 RKDG solver with global adaptive time step
30
31 Please consult GlobalAdaptiveTimeStep for more documentation. This version is
32 basically the same with the "only" exception being that we employ enclave
33 tasking here.
34
35 """
36 def __init__(self,
37 name,
38 rk_order,
39 polynomials,
40 unknowns,
41 auxiliary_variables,
42 min_cell_h,
43 max_cell_h,
44 time_step_relaxation,
45 flux=PDETerms.User_Defined_Implementation,
46 eigenvalues=PDETerms.User_Defined_Implementation,
47 ncp=PDETerms.None_Implementation,
48 point_source=PDETerms.None_Implementation,
49 boundary_conditions=PDETerms.User_Defined_Implementation,
50 refinement_criterion=PDETerms.Empty_Implementation,
51 initial_conditions=PDETerms.User_Defined_Implementation,
52 source_term=PDETerms.None_Implementation,
53 plot_grid_properties=False,
54 pde_terms_without_state=False,
55 ):
56 """!
57
58 Construct RKDG solver with adaptive global time step and enclave tasking
59
60 """
61 super(GlobalAdaptiveTimeStepWithEnclaveTasking,self).__init__(name,
62 rk_order,
63 polynomials,
64 FaceProjections.Solution,
65 unknowns,
66 auxiliary_variables,
67 min_cell_h,
68 max_cell_h,
69 plot_grid_properties,
70 pde_terms_without_state)
71
72 self._time_step_relaxation = time_step_relaxation
74
76
77 clear_dg_kernel_file()
78 create_cell_integral_kernel_definitions(self._kernel_namespace_kernel_namespace)
79 create_Riemann_solver_kernel_definitions()
80
81 self._volumetric_compute_kernel_call_volumetric_compute_kernel_call = create_volumetric_solver_call_dsl(self._basis, SolverVariant.WithVirtualFunctions)
82 self._volumetric_compute_kernel_call_stateless_volumetric_compute_kernel_call_stateless = create_volumetric_solver_call_dsl(self._basis, SolverVariant.Stateless)
83 self._Riemann_compute_kernel_call_Riemann_compute_kernel_call = create_Riemann_solver_call_dsl(self._basis, FaceProjections.Solution)
84 # TODO: self._Riemann_compute_kernel_call_stateless =
85 self._fused_volumetric_compute_kernel_call_stateless_cpu_fused_volumetric_compute_kernel_call_stateless_cpu = create_volumetric_solver_call_dsl(self._basis, SolverVariant.Stateless)
86 self._fused_volumetric_compute_kernel_call_stateless_gpu_fused_volumetric_compute_kernel_call_stateless_gpu = create_volumetric_solver_call_dsl(self._basis, SolverVariant.Accelerator)
87 # TODO: self._fused_Riemann_compute_kernel_call_cpu =
88 # TODO: self._fused_Riemann_compute_kernel_call_gpu =
89 self._add_solver_contributions_call_add_solver_contributions_call = create_add_solver_contributions_call(self._basis)
90 self._multiply_with_inverted_mass_matrix_call_multiply_with_inverted_mass_matrix_call = create_multiply_with_inverted_mass_matrix_call(self._basis)
91
92 self.set_implementationset_implementation(boundary_conditions=boundary_conditions,
93 refinement_criterion=refinement_criterion,
94 initial_conditions=initial_conditions,
95 additional_action_set_includes="",
96 additional_user_includes="",
97 flux=flux,
98 eigenvalues=eigenvalues,
99 ncp=ncp,
100 source_term=source_term,
101 point_source=point_source
102 )
103
104
106 flux=None,
107 ncp=None,
108 eigenvalues=None,
109 boundary_conditions=None,
110 refinement_criterion=None,
111 initial_conditions=None,
112 source_term=None,
113 point_source=None,
114 additional_action_set_includes = "",
115 additional_user_includes = ""
116 ):
117 """
118 If you pass in User_Defined, then the generator will create C++ stubs
119 that you have to befill manually. If you pass in None_Implementation, it
120 will create nop, i.e., no implementation or defaults. Any other string
121 is copied 1:1 into the implementation. If you pass in None, then the
122 set value so far won't be overwritten.
123
124 Please note that not all options are supported by all solvers.
125
126 This routine should be the very last invoked by the constructor.
127 """
128 super(GlobalAdaptiveTimeStepWithEnclaveTasking,self).set_implementation(boundary_conditions=boundary_conditions,
129 refinement_criterion=refinement_criterion,
130 initial_conditions=initial_conditions,
131 additional_action_set_includes=additional_action_set_includes,
132 additional_user_includes=additional_user_includes,
133 flux=flux,
134 ncp=ncp,
135 eigenvalues=eigenvalues,
136 source_term=source_term,
137 point_source=point_source
138 )
139
141
143 self._abstract_solver_user_declarations_abstract_solver_user_declarations += solver_code_snippets.create_abstract_solver_user_declarations()
145 self._abstract_solver_user_definitions_abstract_solver_user_definitions += solver_code_snippets.create_abstract_solver_user_definitions()
146
149
150 self._compute_time_step_size_compute_time_step_size = solver_code_snippets.create_compute_time_step_size()
151 self._compute_new_time_step_size_compute_new_time_step_size = solver_code_snippets.create_compute_new_time_step_size()
152
153 self._start_time_step_implementation_start_time_step_implementation = solver_code_snippets.create_start_time_step_implementation()
154 self._finish_time_step_implementation_finish_time_step_implementation = solver_code_snippets.create_finish_time_step_implementation()
155 self._constructor_implementation_constructor_implementation = solver_code_snippets.create_abstract_solver_constructor_statements()
156
157
158 @property
160 return super(GlobalAdaptiveTimeStepWithEnclaveTasking, self).user_action_set_includes + """
161#include "exahype2/dg/rusanov/Rusanov.h"
162#include "kernels/dg.h"
163"""
Code snippet generator for fixed time stepping in the Runge-Kutta schemes.
set_implementation(self, flux=None, ncp=None, eigenvalues=None, boundary_conditions=None, refinement_criterion=None, initial_conditions=None, source_term=None, point_source=None, 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...
Two separate sweeps per Runge-Kutta sweep where volumetric operations are outsourced into dedicated 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, flux=None, ncp=None, eigenvalues=None, boundary_conditions=None, refinement_criterion=None, initial_conditions=None, source_term=None, point_source=None, 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, rk_order, polynomials, unknowns, auxiliary_variables, min_cell_h, max_cell_h, time_step_relaxation, flux=PDETerms.User_Defined_Implementation, eigenvalues=PDETerms.User_Defined_Implementation, ncp=PDETerms.None_Implementation, point_source=PDETerms.None_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)
Construct RKDG solver with adaptive global time step and enclave tasking.