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