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 = PDETerms.None_Implementation
48 self._ncp_implementation = PDETerms.None_Implementation
49 self._eigenvalues_implementation = PDETerms.None_Implementation
50 self._source_term_implementation = PDETerms.None_Implementation
51
53
54 self.set_implementation(flux=flux,
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
84 if ncp is not None: self._ncp_implementation = ncp
85 if eigenvalues is not None: self._eigenvalues_implementation = eigenvalues
86 if source_term is not None: self._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 = 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 = 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 += solver_code_snippets.create_abstract_solver_user_declarations()
119 self._abstract_solver_user_definitions += solver_code_snippets.create_abstract_solver_user_definitions()
120
123
124 self._compute_time_step_size = solver_code_snippets.create_compute_time_step_size()
125 self._compute_new_time_step_size = solver_code_snippets.create_compute_new_time_step_size()
126
127 self._start_time_step_implementation = solver_code_snippets.create_start_time_step_implementation()
128 self._finish_time_step_implementation = solver_code_snippets.create_finish_time_step_implementation()
129 self._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"""
str _compute_kernel_call_stateless
Definition FV.py:295
str _constructor_implementation
Definition FV.py:306
str _abstract_solver_user_definitions
Definition FV.py:300
str _finish_time_step_implementation
Definition FV.py:305
str _solver_user_declarations
Definition FV.py:301
str _abstract_solver_user_declarations
Definition FV.py:299
str _start_time_step_implementation
Definition FV.py:304
str _compute_new_time_step_size
Definition FV.py:290
Probably the simplest solver you could think off.
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)
user_action_set_includes(self)
Add further includes to this property, if your action sets require some additional routines from othe...