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_rusanov_kernel_definitions
13from .kernels
import create_compute_Riemann_kernel_for_Rusanov_dsl
15from .kernels
import SolverVariant
16from .kernels
import KernelVariant
23 name, patch_size, unknowns, auxiliary_variables, min_volume_h, max_volume_h, normalised_time_step_size,
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,
36 Construct a Finite Volume scheme with a Rusanov solver and fixed time step sizes
38 @param time_step_size: Float
39 This is the normalised time step size w.r.t. the coarsest admissible h value. If
40 the code employs AMR on top of it and refines further, it will automatically
41 downscale the time step size accordingly. So hand in a valid time step size w.r.t.
44 @param normalised_time_step_size: Float
45 Please consult exahype2.solvers.fv.FixedTimeSteppingCodeSnippets. The logic how
46 this field is translated into a time step size is outsourced into this utility
50 super(GlobalFixedTimeStep,self).
__init__(name,
58 pde_terms_without_state,
59 kernel_namespace=
"rusanov")
70#include "exahype2/fv/rusanov/rusanov.h"
76 eigenvalues=eigenvalues,
77 boundary_conditions=boundary_conditions,
78 refinement_criterion=refinement_criterion,
79 initial_conditions=initial_conditions,
80 source_term=source_term
88 boundary_conditions = None,
89 refinement_criterion = None,
90 initial_conditions = None,
92 memory_location = None,
93 use_split_loop = False,
94 additional_action_set_includes = "",
95 additional_user_includes = ""
99 Configure implementation
101 If you pass in User_Defined, then the generator will create C++ stubs
102 that you have to befill manually. If you pass in None_Implementation, it
103 will create nop, i.e., no implementation or defaults. Any other string
104 is copied 1:1 into the implementation. If you pass in None, then the
105 set value so far won't be overwritten.
107 Please note that not all options are supported by all solvers.
109 This routine should be the very last invoked by the constructor.
116 create_rusanov_kernel_definitions()
122 compute_max_eigenvalue_of_next_time_step =
False,
123 solver_variant = SolverVariant.WithVirtualFunctions,
124 kernel_variant = KernelVariant.PatchWiseAoS
131 compute_max_eigenvalue_of_next_time_step =
False,
132 solver_variant = SolverVariant.Stateless,
133 kernel_variant = KernelVariant.PatchWiseAoS
153 super(GlobalFixedTimeStep,self).
set_implementation(boundary_conditions, refinement_criterion, initial_conditions, memory_location, use_split_loop, additional_action_set_includes, additional_user_includes)
157 return super(GlobalFixedTimeStep, self).user_action_set_includes +
"""
158#include "exahype2/fv/rusanov/rusanov.h"
159#include "kernels/rusanov.h"
_abstract_solver_user_declarations
_solver_user_declarations
_user_action_set_includes
_source_term_implementation
_compute_new_time_step_size
_start_time_step_implementation
_eigenvalues_implementation
_compute_kernel_call_stateless
_constructor_implementation
_finish_time_step_implementation
_abstract_solver_user_definitions
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...
user_action_set_includes(self)
Add further includes to this property, if your action sets require some additional routines from othe...
_eigenvalues_implementation
_solver_user_declarations
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="")
Configure implementation.
_constructor_implementation
_compute_kernel_call_stateless
_abstract_solver_user_definitions
_compute_new_time_step_size
_abstract_solver_user_declarations
_source_term_implementation
_start_time_step_implementation
__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)
Construct a Finite Volume scheme with a Rusanov solver and fixed time step sizes.
_finish_time_step_implementation
_normalised_time_step_size