Peano 4
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. You
78 cannot set ncp and fluxes for the ClawPack Riemann solvers, e.g.
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 self._compute_kernel_call_compute_kernel_call = create_compute_Riemann_kernel_for_Rusanov(
91 compute_max_eigenvalue_of_next_time_step = True,
92 solver_variant = SolverVariant.WithVirtualFunctions,
93 kernel_variant = KernelVariant.PatchWiseAoS
94 )
95
96 self._compute_kernel_call_stateless_compute_kernel_call_stateless = create_compute_Riemann_kernel_for_Rusanov(
100 compute_max_eigenvalue_of_next_time_step = True,
101 solver_variant = SolverVariant.Stateless,
102 kernel_variant = KernelVariant.PatchWiseAoS
103 )
104
106
108 self._abstract_solver_user_declarations_abstract_solver_user_declarations += solver_code_snippets.create_abstract_solver_user_declarations()
110 self._abstract_solver_user_definitions_abstract_solver_user_definitions += solver_code_snippets.create_abstract_solver_user_definitions()
111
114
115 self._compute_time_step_size_compute_time_step_size = solver_code_snippets.create_compute_time_step_size()
116 self._compute_new_time_step_size_compute_new_time_step_size = solver_code_snippets.create_compute_new_time_step_size()
117
118 self._start_time_step_implementation_start_time_step_implementation = solver_code_snippets.create_start_time_step_implementation()
119 self._finish_time_step_implementation_finish_time_step_implementation = solver_code_snippets.create_finish_time_step_implementation()
120 self._constructor_implementation_constructor_implementation = solver_code_snippets.create_abstract_solver_constructor_statements()
121
122 super(GlobalAdaptiveTimeStep,self).set_implementation(boundary_conditions, refinement_criterion, initial_conditions, memory_location, use_split_loop, additional_action_set_includes, additional_user_includes)
123
124
125 @property
127 return super(GlobalAdaptiveTimeStep, self).user_action_set_includes + """
128#include "exahype2/fv/rusanov/rusanov.h"
129"""
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...