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_musclhancock_kernel_definitions
13from .kernels import create_compute_Riemann_kernel_for_MUSCLHancock_dsl
14
15from exahype2.solvers.fv.AdaptiveTimeSteppingCodeSnippets import AdaptiveTimeSteppingCodeSnippets
16
17from .kernels import SolverVariant
18from .kernels import KernelVariant
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=2
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="musclhancock")
44
45 self._time_step_relaxation = time_step_relaxation
46
47 self._flux_implementation_flux_implementation = PDETerms.None_Implementation
48 self._ncp_implementation_ncp_implementation = PDETerms.None_Implementation
51
53
55 ncp=ncp,
56 eigenvalues=eigenvalues,
57 boundary_conditions=boundary_conditions,
58 refinement_criterion=refinement_criterion,
59 initial_conditions=initial_conditions,
60 source_term=source_term )
61
62
64 flux=None,ncp=None,
65 eigenvalues=None,
66 boundary_conditions=None,refinement_criterion=None,initial_conditions=None,source_term=None,
67 memory_location = None,
68 use_split_loop = False,
69 additional_action_set_includes = "",
70 additional_user_includes = ""
71 ):
72 """
73 If you pass in User_Defined, then the generator will create C++ stubs
74 that you have to befill manually. If you pass in None_Implementation, it
75 will create nop, i.e. no implementation or defaults. Any other string
76 is copied 1:1 into the implementation. If you pass in None, then the
77 set value so far won't be overwritten.
78
79 Please note that not all options are supported by all solvers.
80
81 This routine should be the very last invoked by the constructor.
82 """
83 if flux is not None: self._flux_implementation_flux_implementation = flux
84 if ncp is not None: self._ncp_implementation_ncp_implementation = ncp
85 if eigenvalues is not None: self._eigenvalues_implementation_eigenvalues_implementation = eigenvalues
86 if source_term is not None: self._source_term_implementation_source_term_implementation = source_term
87
88 create_musclhancock_kernel_definitions()
89
90 #self._compute_kernel_call = create_compute_Riemann_kernel_for_MusclHancock(
91 # self._flux_implementation, self._ncp_implementation, self._source_term_implementation,
92 # compute_max_eigenvalue_of_next_time_step=True,
93 # solver_variant = SolverVariant.WithVirtualFunctions,
94 # riemann_kernel_variant = RiemannKernelVariant.PatchWiseAoSHeap
95 #)
96
97 self._compute_kernel_call_compute_kernel_call = create_compute_Riemann_kernel_for_MUSCLHancock_dsl(
101 compute_max_eigenvalue_of_next_time_step = True,
102 solver_variant = SolverVariant.WithVirtualFunctions,
103 kernel_variant = KernelVariant.PatchWiseAoS
104 )
105
106 self._compute_kernel_call_stateless_compute_kernel_call_stateless = create_compute_Riemann_kernel_for_MUSCLHancock_dsl(
110 compute_max_eigenvalue_of_next_time_step = True,
111 solver_variant = SolverVariant.Stateless,
112 kernel_variant = KernelVariant.PatchWiseAoS
113 )
114
117 self._abstract_solver_user_declarations_abstract_solver_user_declarations += solver_code_snippets.create_abstract_solver_user_declarations()
119 self._abstract_solver_user_definitions_abstract_solver_user_definitions += solver_code_snippets.create_abstract_solver_user_definitions()
120
123
124 self._compute_time_step_size_compute_time_step_size = solver_code_snippets.create_compute_time_step_size()
125 self._compute_new_time_step_size_compute_new_time_step_size = solver_code_snippets.create_compute_new_time_step_size()
126
127 self._start_time_step_implementation_start_time_step_implementation = solver_code_snippets.create_start_time_step_implementation()
128 self._finish_time_step_implementation_finish_time_step_implementation = solver_code_snippets.create_finish_time_step_implementation()
129 self._constructor_implementation_constructor_implementation = solver_code_snippets.create_abstract_solver_constructor_statements()
130
131 super(GlobalAdaptiveTimeStep,self).set_implementation(boundary_conditions, refinement_criterion, initial_conditions, memory_location, use_split_loop, additional_action_set_includes, additional_user_includes)
132
133
134 @property
136 return super(GlobalAdaptiveTimeStep, self).user_action_set_includes + """
137#include "kernels/musclhancock.h"
138"""
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...
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...
__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=2)
Instantiate a generic FV scheme with an overlap of 1.
user_action_set_includes(self)
Add further includes to this property, if your action sets require some additional routines from othe...