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.fv.SingleSweep import SingleSweep
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
20
22 def __init__(self,
23 name, patch_size, unknowns, auxiliary_variables, min_volume_h, max_volume_h, time_step_relaxation,
24 flux=PDETerms.User_Defined_Implementation,
25 ncp=PDETerms.None_Implementation,
26 eigenvalues=PDETerms.User_Defined_Implementation,
27 boundary_conditions=PDETerms.User_Defined_Implementation,
28 refinement_criterion=PDETerms.Empty_Implementation,
29 initial_conditions=PDETerms.User_Defined_Implementation,
30 source_term=PDETerms.None_Implementation,
31 plot_grid_properties=False,
32 pde_terms_without_state=False, overlap=1
33 ):
34 super(GlobalAdaptiveTimeStep,self).__init__(name,
35 patch_size,
36 overlap,
37 unknowns,
38 auxiliary_variables,
39 min_volume_h,
40 max_volume_h,
41 plot_grid_properties,
42 pde_terms_without_state,
43 kernel_namespace="rusanov")
44 self._time_step_relaxation = time_step_relaxation
45
46 self._flux_implementation_flux_implementation = PDETerms.None_Implementation
47 self._ncp_implementation_ncp_implementation = PDETerms.None_Implementation
50
52
54 ncp=ncp,
55 eigenvalues=eigenvalues,
56 boundary_conditions=boundary_conditions,
57 refinement_criterion=refinement_criterion,
58 initial_conditions=initial_conditions,
59 source_term=source_term)
60
61
63 flux=None,ncp=None,
64 eigenvalues=None,
65 boundary_conditions=None,refinement_criterion=None,initial_conditions=None,source_term=None,
66 memory_location = None,
67 use_split_loop = False,
68 additional_action_set_includes = "",
69 additional_user_includes = ""
70 ):
71 """
72 If you pass in User_Defined, then the generator will create C++ stubs
73 that you have to befill manually. If you pass in None_Implementation, it
74 will create nop, i.e., no implementation or defaults. Any other string
75 is copied 1:1 into the implementation. If you pass in None, then the
76 set value so far won't be overwritten.
77
78 Please note that not all options are supported by all solvers.
79
80 This routine should be the very last invoked by the constructor.
81 """
82 if flux is not None: self._flux_implementation_flux_implementation = flux
83 if ncp is not None: self._ncp_implementation_ncp_implementation = ncp
84 if eigenvalues is not None: self._eigenvalues_implementation_eigenvalues_implementation = eigenvalues
85 if source_term is not None: self._source_term_implementation_source_term_implementation = source_term
86
87 create_rusanov_kernel_definitions()
88
89 self._compute_kernel_call_compute_kernel_call = create_compute_Riemann_kernel_for_Rusanov_dsl(
93 compute_max_eigenvalue_of_next_time_step = True,
94 solver_variant = SolverVariant.WithVirtualFunctions,
95 kernel_variant = KernelVariant.PatchWiseAoS
96 )
97
98 self._compute_kernel_call_stateless_compute_kernel_call_stateless = create_compute_Riemann_kernel_for_Rusanov_dsl(
102 compute_max_eigenvalue_of_next_time_step = True,
103 solver_variant = SolverVariant.Stateless,
104 kernel_variant = KernelVariant.PatchWiseAoS
105 )
106
108
110 self._abstract_solver_user_declarations_abstract_solver_user_declarations += solver_code_snippets.create_abstract_solver_user_declarations()
112 self._abstract_solver_user_definitions_abstract_solver_user_definitions += solver_code_snippets.create_abstract_solver_user_definitions()
113
116
117 self._compute_time_step_size_compute_time_step_size = solver_code_snippets.create_compute_time_step_size()
118 self._compute_new_time_step_size_compute_new_time_step_size = solver_code_snippets.create_compute_new_time_step_size()
119
120 self._start_time_step_implementation_start_time_step_implementation = solver_code_snippets.create_start_time_step_implementation()
121 self._finish_time_step_implementation_finish_time_step_implementation = solver_code_snippets.create_finish_time_step_implementation()
122 self._constructor_implementation_constructor_implementation = solver_code_snippets.create_abstract_solver_constructor_statements()
123
124 super(GlobalAdaptiveTimeStep,self).set_implementation(boundary_conditions, refinement_criterion, initial_conditions, memory_location, use_split_loop, additional_action_set_includes, additional_user_includes)
125
126
127 @property
129 return super(GlobalAdaptiveTimeStep, self).user_action_set_includes + """
130#include "kernels/rusanov.h"
131"""
Code snippet generator for fixed time stepping in the Runge-Kutta schemes.
Probably the simplest solver you could think off.
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...
__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)
Instantiate a generic FV scheme with an overlap of 1.
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...
user_action_set_includes(self)
Add further includes to this property, if your action sets require some additional routines from othe...