Peano
Loading...
Searching...
No Matches
GlobalFixedTimeStep.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.SeparateSweeps import SeparateSweeps
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
19 FixedTimeSteppingCodeSnippets,
20)
21
23
24
26 """!
27
28 RKDG solver with Rusanov Riemann solver and global fixed time step
29
30 Likely the simplest version of the RKDG solver with Rusanov. We "inherit"
31 basically all parameters from the superclass. The major difference is the
32
33
34 """
36 self,
37 name,
38 rk_order,
39 polynomials,
40 unknowns,
41 auxiliary_variables,
42 min_cell_h,
43 max_cell_h,
44 time_step_size,
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 pde_terms_without_state=False,
54 plot_grid_properties=False,
55 ):
56 """!
57
58 Construct RKDG solver with fixed time step
59
60 For Rusanov, we really only need the solution along the face, and so we
61 ar fine with one quantity per PDE to be projected.
62
63 """
64 super(GlobalFixedTimeStep, self).__init__(
65 name,
66 rk_order,
67 polynomials,
68 FaceProjections.Solution,
69 unknowns,
70 auxiliary_variables,
71 min_cell_h,
72 max_cell_h,
73 plot_grid_properties,
74 pde_terms_without_state
75 )
76
78 self._normalised_time_step_size = time_step_size
79
81 self._volumetric_compute_kernel_call_volumetric_compute_kernel_call = create_volumetric_solver_call(self._basis, SolverVariant.WithVirtualFunctions)
82 self._volumetric_compute_kernel_call_stateless_volumetric_compute_kernel_call_stateless = create_volumetric_solver_call(self._basis, SolverVariant.Stateless)
83 self._Riemann_compute_kernel_call_Riemann_compute_kernel_call = create_Riemann_solver_call(self._basis, FaceProjections.Solution)
84 # TODO: self._Riemann_compute_kernel_call_stateless =
85 self._add_solver_contributions_call_add_solver_contributions_call = create_add_solver_contributions_call(self._basis)
86 self._multiply_with_inverted_mass_matrix_call_multiply_with_inverted_mass_matrix_call = create_multiply_with_inverted_mass_matrix_call(self._basis)
87
89 boundary_conditions=boundary_conditions,
90 refinement_criterion=refinement_criterion,
91 initial_conditions=initial_conditions,
92 additional_action_set_includes="",
93 additional_user_includes="",
94 flux=flux,
95 eigenvalues=eigenvalues,
96 ncp=ncp,
97 source_term=source_term,
98 point_source=point_source,
99 )
100
101
103 self,
104 flux=None,
105 ncp=None,
106 boundary_conditions=None,
107 refinement_criterion=None,
108 initial_conditions=None,
109 eigenvalues=None,
110 source_term=None,
111 point_source=None,
112 additional_action_set_includes="",
113 additional_user_includes="",
114 ):
115 super(GlobalFixedTimeStep, self).set_implementation(
116 boundary_conditions=boundary_conditions,
117 refinement_criterion=refinement_criterion,
118 initial_conditions=initial_conditions,
119 additional_action_set_includes="",
120 additional_user_includes="",
121 flux=flux,
122 ncp=ncp,
123 eigenvalues=eigenvalues,
124 source_term=source_term,
125 point_source=point_source,
126 )
127
128 # self._source_term_call = create_source_term_kernel(self._source_term_implementation)
129 # self._Riemann_solver_call = create_compute_Riemann_kernel_for_Rusanov(self._flux_implementation, self._ncp_implementation)
130
131 solver_code_snippets = FixedTimeSteppingCodeSnippets(
133 )
134
142 )
144 solver_code_snippets.create_abstract_solver_user_declarations()
145 )
153 )
155 solver_code_snippets.create_abstract_solver_user_definitions()
156 )
157
158 self._solver_user_declarations_solver_user_declarations = create_solver_declarations(
165 )
166 self._solver_user_definitions_solver_user_definitions = create_solver_definitions(
173 )
174
176 solver_code_snippets.create_compute_time_step_size()
177 )
179 solver_code_snippets.create_compute_new_time_step_size()
180 )
181
183 solver_code_snippets.create_start_time_step_implementation()
184 )
186 solver_code_snippets.create_finish_time_step_implementation()
187 )
189 solver_code_snippets.create_abstract_solver_constructor_statements()
190 )
191
192
193 @property
195 return (
196 super(GlobalFixedTimeStep, self).user_action_set_includes
197 + """
198#include "exahype2/dg/rusanov/Rusanov.h"
199"""
200 )
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...
Probably the simplest solver you could think off.
RKDG solver with Rusanov Riemann solver and global fixed time step.
__init__(self, name, rk_order, polynomials, unknowns, auxiliary_variables, min_cell_h, max_cell_h, time_step_size, 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, pde_terms_without_state=False, plot_grid_properties=False)
Construct RKDG solver with fixed time step.
set_implementation(self, flux=None, ncp=None, boundary_conditions=None, refinement_criterion=None, initial_conditions=None, eigenvalues=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...
user_action_set_includes(self)
Add further includes to this property, if your action sets require some additional routines from othe...