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 exahype2.solvers.PDETerms import PDETerms
4from exahype2.solvers.rkfd.SeparateSweeps import SeparateSweeps
5
6import jinja2
7
8from .kernels import create_compute_kernel_for_FD4_DSL
9from .kernels import create_FD4_kernel_definitions_3d
10from exahype2.solvers.rkfd.kernels import create_abstract_solver_declarations
11from exahype2.solvers.rkfd.kernels import create_abstract_solver_definitions
12from exahype2.solvers.rkfd.kernels import create_solver_declarations
13from exahype2.solvers.rkfd.kernels import create_solver_definitions
14#
15from exahype2.solvers.rkfd.kernels import SolverVariant
16from exahype2.solvers.rkfd.kernels import KernelVariant
17
18from exahype2.solvers.rkfd.AdaptiveTimeSteppingCodeSnippets import AdaptiveTimeSteppingCodeSnippets
19
20
22 def __init__(self,
23 name, patch_size, rk_order, unknowns, auxiliary_variables, min_meshcell_h, max_meshcell_h, time_step_relaxation,
24 reconstruction_with_rk=False,
25 flux=PDETerms.User_Defined_Implementation,
26 ncp=PDETerms.None_Implementation,
27 point_source=PDETerms.None_Implementation,
28 boundary_conditions=PDETerms.User_Defined_Implementation,
29 refinement_criterion=PDETerms.Empty_Implementation,
30 initial_conditions=PDETerms.User_Defined_Implementation,
31 source_term=PDETerms.None_Implementation,
32 eigenvalues=PDETerms.User_Defined_Implementation,
33 plot_grid_properties=False, KOSigma=8.0
34 ):
35 """!
36
37 Construct solver
38
39 time_step_relaxation: Float
40 Calibration factor of CFL condition. The Runge-Kutta order is multiplied
41 with this value following the formula for Cockburn-Shu damping. However,
42 also the actual polynomial order has to enter the chosen time step size
43 through an additional @f$ p^{-2} @f$ scaling. We expect the user to
44 incorporate such an additional scaling within time_step_relaxation.
45
46 """
47
48 if reconstruction_with_rk:
50 else:
52
53 super(GlobalAdaptiveTimeStep,self).__init__(name,
54 patch_size,
55 3, #overlap,
56 rk_order,
57 unknowns,
58 auxiliary_variables,
59 min_meshcell_h,
60 max_meshcell_h,
61 plot_grid_properties,
62 kernel_namespace="fd4"
63 )
64
65 self._time_step_relaxation = time_step_relaxation
67
68 self._KO_Sigma = KOSigma
69
71 ncp=ncp,
72 eigenvalues=eigenvalues,
73 boundary_conditions=boundary_conditions,
74 refinement_criterion=refinement_criterion,
75 initial_conditions=initial_conditions,
76 source_term=source_term,
77 reconstruction_with_rk=reconstruction_with_rk )
78
79
81 flux=None, ncp=None, source_term=None, eigenvalues=None,
82 boundary_conditions=None,refinement_criterion=None,initial_conditions=None,
83 memory_location = None,
84 additional_action_set_includes = "",
85 additional_user_includes = "",
86 KOSigma = None,
87 reconstruction_with_rk= False
88 ):
89 """
90 If you pass in User_Defined, then the generator will create C++ stubs
91 that you have to befill manually. If you pass in None_Implementation, it
92 will create nop, i.e. no implementation or defaults. Any other string
93 is copied 1:1 into the implementation. If you pass in None, then the
94 set value so far won't be overwritten.
95
96 Please note that not all options are supported by all solvers.
97
98 This routine should be the very last invoked by the constructor.
99 """
100 super(GlobalAdaptiveTimeStep,self).set_implementation(
101 flux, ncp, source_term, eigenvalues,
102 boundary_conditions, refinement_criterion, initial_conditions, memory_location, additional_action_set_includes, additional_user_includes)
103
104 if not KOSigma==None: self._KO_Sigma = KOSigma
105
106 create_FD4_kernel_definitions_3d(self._patch_size_patch_size,
109 self._KO_Sigma,
113 compute_max_eigenvalue_of_next_time_step = True
114 )
115
116 self._compute_kernel_call_compute_kernel_call = create_compute_kernel_for_FD4_DSL(
120 compute_max_eigenvalue_of_next_time_step = True,
121 solver_variant = SolverVariant.WithVirtualFunctions,
122 kernel_variant = KernelVariant.PatchWiseAoSHeap,
123 KOSigma = self._KO_Sigma
124 )
125
126 if reconstruction_with_rk:
127 self._reconstruction_kernel_call_reconstruction_kernel_call = """reconstruct_first_derivatives(
128 patchData,
129 {{NUMBER_OF_GRID_CELLS_PER_PATCH_PER_AXIS}},
130 {{HALO_SIZE}},
131 {{NUMBER_OF_UNKNOWNS}},
132 {{NUMBER_OF_AUXILIARY_VARIABLES}}
133 );
134 """
135 self._primary_variables_indices_primary_variables_indices = "int primaryVarsIndices[25]={ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 53, 54};"
136 self._auxiliary_variables_indices_auxiliary_variables_indices = "int auxiliaryVarsIndices[34]={23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,55,56,57,58}; "
137
138 solver_code_snippets = AdaptiveTimeSteppingCodeSnippets(self._time_step_relaxation, adaptive_starting_timeStep_size="soft")
139
141 self._abstract_solver_user_declarations_abstract_solver_user_declarations += solver_code_snippets.create_abstract_solver_user_declarations()
143 self._abstract_solver_user_definitions_abstract_solver_user_definitions += solver_code_snippets.create_abstract_solver_user_definitions()
144
145 self._compute_time_step_size_compute_time_step_size = solver_code_snippets.create_compute_time_step_size()
146 self._compute_new_time_step_size_compute_new_time_step_size = solver_code_snippets.create_compute_new_time_step_size()
147
150
151 self._start_time_step_implementation_start_time_step_implementation = solver_code_snippets.create_start_time_step_implementation()
152 self._finish_time_step_implementation_finish_time_step_implementation = solver_code_snippets.create_finish_time_step_implementation()
153 self._constructor_implementation_constructor_implementation = solver_code_snippets.create_abstract_solver_constructor_statements()
154
156
157
158 @property
160 return super(GlobalAdaptiveTimeStep, self).user_action_set_includes + """
161#include "kernels/FD4.h"
162"""
163
164
Code snippet generator for fixed time stepping in the Runge-Kutta schemes.
Probably the simplest solver you could think off.
set_implementation(self, flux, ncp, source_term, eigenvalues, boundary_conditions, refinement_criterion, initial_conditions, memory_location, 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_action_sets(self)
Call superclass routine and then reconfigure the update cell call.
__init__(self, name, patch_size, rk_order, unknowns, auxiliary_variables, min_meshcell_h, max_meshcell_h, time_step_relaxation, reconstruction_with_rk=False, flux=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, eigenvalues=PDETerms.User_Defined_Implementation, plot_grid_properties=False, KOSigma=8.0)
Construct solver.
set_implementation(self, flux=None, ncp=None, source_term=None, eigenvalues=None, boundary_conditions=None, refinement_criterion=None, initial_conditions=None, memory_location=None, additional_action_set_includes="", additional_user_includes="", KOSigma=None, reconstruction_with_rk=False)
If you pass in User_Defined, then the generator will create C++ stubs that you have to befill manuall...
add_entries_to_text_replacement_dictionary(self, d)
d: Dictionary of string to string in/out argument
user_action_set_includes(self)
Add further includes to this property, if your action sets require some additional routines from othe...