Peano
Loading...
Searching...
No Matches
GlobalFixedTimeStep.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_MusclHancock
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
13from .kernels import create_musclhancock_kernel_definitions
14from .kernels import create_compute_Riemann_kernel_for_MUSCLHancock_dsl
15
16from .kernels import SolverVariant
17from .kernels import KernelVariant
18
19from exahype2.solvers.fv.FixedTimeSteppingCodeSnippets import FixedTimeSteppingCodeSnippets
20
21
23 def __init__(self,
24 name, patch_size, unknowns, auxiliary_variables, min_volume_h, max_volume_h, normalised_time_step_size,
25 flux=PDETerms.User_Defined_Implementation,
26 ncp=PDETerms.None_Implementation,
27 eigenvalues=PDETerms.User_Defined_Implementation,
28 boundary_conditions=PDETerms.User_Defined_Implementation,
29 refinement_criterion=PDETerms.Empty_Implementation,
30 initial_conditions=PDETerms.User_Defined_Implementation,
31 source_term=PDETerms.None_Implementation,
32 plot_grid_properties=False, pde_terms_without_state=False,
33 overlap=2, kernel_namespace="musclhancock"
34 ):
35 """
36
37 time_step_size: Float
38 This is the normalised time step size w.r.t. the coarsest admissible h value. If
39 the code employs AMR on top of it and refines further, it will automatically
40 downscale the time step size accordingly. So hand in a valid time step size w.r.t.
41 to max_volume_h.
42
43 """
44 super(GlobalFixedTimeStep,self).__init__(name, patch_size, overlap, unknowns, auxiliary_variables, min_volume_h, max_volume_h, plot_grid_properties, pde_terms_without_state, kernel_namespace="musclhancock")
45
46 self._normalised_time_step_size = normalised_time_step_size
47
48 self._flux_implementation_flux_implementation = PDETerms.None_Implementation
49 self._ncp_implementation_ncp_implementation = PDETerms.None_Implementation
52
54#include "kernels/musclhancock.h"
55"""
56
58 ncp=ncp,
59 eigenvalues=eigenvalues,
60 boundary_conditions=boundary_conditions,
61 refinement_criterion=refinement_criterion,
62 initial_conditions=initial_conditions,
63 source_term=source_term )
64
65
67 flux=None,ncp=None,
68 eigenvalues=None,
69 boundary_conditions=None,refinement_criterion=None,initial_conditions=None,source_term=None,
70 memory_location = None,
71 use_split_loop = False,
72 additional_action_set_includes = "",
73 additional_user_includes = ""
74 ):
75 """
76 If you pass in User_Defined, then the generator will create C++ stubs
77 that you have to befill manually. If you pass in None_Implementation, it
78 will create nop, i.e. no implementation or defaults. Any other string
79 is copied 1:1 into the implementation. If you pass in None, then the
80 set value so far won't be overwritten.
81
82 Please note that not all options are supported by all solvers.
83
84 This routine should be the very last invoked by the constructor.
85 """
86 if flux is not None: self._flux_implementation_flux_implementation = flux
87 if ncp is not None: self._ncp_implementation_ncp_implementation = ncp
88 if eigenvalues is not None: self._eigenvalues_implementation_eigenvalues_implementation = eigenvalues
89 if source_term is not None: self._source_term_implementation_source_term_implementation = source_term
90
91 create_musclhancock_kernel_definitions()
92
93 #self._compute_kernel_call = create_compute_Riemann_kernel_for_MusclHancock(
94 # self._flux_implementation, self._ncp_implementation, self._source_term_implementation,
95 # compute_max_eigenvalue_of_next_time_step=False,
96 # solver_variant = SolverVariant.WithVirtualFunctions,
97 # riemann_kernel_variant = RiemannKernelVariant.PatchWiseAoSHeap
98 #)
99
100 self._compute_kernel_call_compute_kernel_call = create_compute_Riemann_kernel_for_MUSCLHancock_dsl(
104 compute_max_eigenvalue_of_next_time_step = False,
105 solver_variant = SolverVariant.WithVirtualFunctions,
106 kernel_variant = KernelVariant.PatchWiseAoS
107 )
108
109 self._compute_kernel_call_stateless_compute_kernel_call_stateless = create_compute_Riemann_kernel_for_MUSCLHancock_dsl(
113 compute_max_eigenvalue_of_next_time_step = False,
114 solver_variant = SolverVariant.Stateless,
115 kernel_variant = KernelVariant.PatchWiseAoS
116 )
117
119
121 self._abstract_solver_user_declarations_abstract_solver_user_declarations += solver_code_snippets.create_abstract_solver_user_declarations()
123 self._abstract_solver_user_definitions_abstract_solver_user_definitions += solver_code_snippets.create_abstract_solver_user_definitions()
124
125 self._compute_time_step_size_compute_time_step_size = solver_code_snippets.create_compute_time_step_size()
126 self._compute_new_time_step_size_compute_new_time_step_size = solver_code_snippets.create_compute_new_time_step_size()
127
130
131 self._start_time_step_implementation_start_time_step_implementation = solver_code_snippets.create_start_time_step_implementation()
132 self._finish_time_step_implementation_finish_time_step_implementation = solver_code_snippets.create_finish_time_step_implementation()
133 self._constructor_implementation_constructor_implementation = solver_code_snippets.create_abstract_solver_constructor_statements()
134
135 super(GlobalFixedTimeStep,self).set_implementation(boundary_conditions, refinement_criterion, initial_conditions, memory_location, use_split_loop, additional_action_set_includes, additional_user_includes)
136
137 @property
139 return super(GlobalFixedTimeStep, self).user_action_set_includes + """
140#include "kernels/musclhancock.h"
141"""
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, normalised_time_step_size, 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, kernel_namespace="musclhancock")
time_step_size: Float This is the normalised time step size w.r.t.
user_action_set_includes(self)
Add further includes to this property, if your action sets require some additional routines from othe...
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...