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_compute_Riemann_kernel_for_Rusanov
9from .kernels import create_abstract_solver_declarations
10from .kernels import create_abstract_solver_definitions
11from .kernels import create_solver_declarations
12from .kernels import create_solver_definitions
13
14from .kernels import SolverVariant
15from .kernels import KernelVariant
16
17from exahype2.solvers.fv.AdaptiveTimeSteppingCodeSnippets import AdaptiveTimeSteppingCodeSnippets
18
19
21 def __init__(self,
22 name, patch_size, unknowns, auxiliary_variables, min_volume_h, max_volume_h, time_step_relaxation,
23 flux=PDETerms.User_Defined_Implementation,
24 ncp=PDETerms.None_Implementation,
25 eigenvalues=PDETerms.User_Defined_Implementation,
26 boundary_conditions=PDETerms.User_Defined_Implementation,
27 refinement_criterion=PDETerms.Empty_Implementation,
28 initial_conditions=PDETerms.User_Defined_Implementation,
29 source_term=PDETerms.None_Implementation,
30 plot_grid_properties=False,
31 pde_terms_without_state=False, overlap=1
32 ):
33 super(GlobalAdaptiveTimeStep,self).__init__(name,
34 patch_size,
35 overlap,
36 unknowns,
37 auxiliary_variables,
38 min_volume_h,
39 max_volume_h,
40 plot_grid_properties,
41 pde_terms_without_state,
42 kernel_namespace="rusanov")
43 self._time_step_relaxation = time_step_relaxation
44
45 self._flux_implementation_flux_implementation = PDETerms.None_Implementation
46 self._ncp_implementation_ncp_implementation = PDETerms.None_Implementation
49
51
53 ncp=ncp,
54 eigenvalues=eigenvalues,
55 boundary_conditions=boundary_conditions,
56 refinement_criterion=refinement_criterion,
57 initial_conditions=initial_conditions,
58 source_term=source_term)
59
60
62 flux=None,ncp=None,
63 eigenvalues=None,
64 boundary_conditions=None,refinement_criterion=None,initial_conditions=None,source_term=None,
65 memory_location = None,
66 use_split_loop = False,
67 additional_action_set_includes = "",
68 additional_user_includes = ""
69 ):
70 """
71 If you pass in User_Defined, then the generator will create C++ stubs
72 that you have to befill manually. If you pass in None_Implementation, it
73 will create nop, i.e., no implementation or defaults. Any other string
74 is copied 1:1 into the implementation. If you pass in None, then the
75 set value so far won't be overwritten.
76
77 Please note that not all options are supported by all solvers.
78
79 This routine should be the very last invoked by the constructor.
80 """
81 if flux is not None: self._flux_implementation_flux_implementation = flux
82 if ncp is not None: self._ncp_implementation_ncp_implementation = ncp
83 if eigenvalues is not None: self._eigenvalues_implementation_eigenvalues_implementation = eigenvalues
84 if source_term is not None: self._source_term_implementation_source_term_implementation = source_term
85
86 self._compute_kernel_call_compute_kernel_call = create_compute_Riemann_kernel_for_Rusanov(
90 compute_max_eigenvalue_of_next_time_step = True,
91 solver_variant = SolverVariant.WithVirtualFunctions,
92 kernel_variant = KernelVariant.PatchWiseAoS
93 )
94
95 self._compute_kernel_call_stateless_compute_kernel_call_stateless = create_compute_Riemann_kernel_for_Rusanov(
99 compute_max_eigenvalue_of_next_time_step = True,
100 solver_variant = SolverVariant.Stateless,
101 kernel_variant = KernelVariant.PatchWiseAoS
102 )
103
105
107 self._abstract_solver_user_declarations_abstract_solver_user_declarations += solver_code_snippets.create_abstract_solver_user_declarations()
109 self._abstract_solver_user_definitions_abstract_solver_user_definitions += solver_code_snippets.create_abstract_solver_user_definitions()
110
113
114 self._compute_time_step_size_compute_time_step_size = solver_code_snippets.create_compute_time_step_size()
115 self._compute_new_time_step_size_compute_new_time_step_size = solver_code_snippets.create_compute_new_time_step_size()
116
117 self._start_time_step_implementation_start_time_step_implementation = solver_code_snippets.create_start_time_step_implementation()
118 self._finish_time_step_implementation_finish_time_step_implementation = solver_code_snippets.create_finish_time_step_implementation()
119 self._constructor_implementation_constructor_implementation = solver_code_snippets.create_abstract_solver_constructor_statements()
120
121 super(GlobalAdaptiveTimeStep,self).set_implementation(boundary_conditions, refinement_criterion, initial_conditions, memory_location, use_split_loop, additional_action_set_includes, additional_user_includes)
122
123
124 @property
126 return super(GlobalAdaptiveTimeStep, self).user_action_set_includes + """
127#include "exahype2/fv/rusanov/rusanov.h"
128"""
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...