3from .RungeKuttaDG
import RungeKuttaDG
16 Probably the simplest solver you could think off.
17 We run over the grid twice per Runge-Kutta step. In the first step,
18 we compute the linear reconstruction, project this one onto the faces
19 and also compute the volumetric prediction. In the second step, we
20 solve the Riemann problem and add it to the prediction.
22 In the attribute terminology, we call the two runs over the grid sweeps,
23 i.e., we work with two grid sweeps per Runge-Kutta step.
30 number_of_face_projections,
36 pde_terms_without_state):
38 The super call invokes the creation of the data sets, where the guards have
39 to be known already. So we bring those guys forward and then call the superclass
73 super(SeparateSweeps, self).
__init__(name,
76 number_of_face_projections,
82 pde_terms_without_state)
91 First, call the superclass' create_data_structures() to ensure that all
92 the data structures are in place.
94 The linear combination is to be computed if and only if
114 We invoke the superclass which creates all the action sets, and then we
115 set the appropriate guards.
117 - _action_set_update_face_label - can be done always
118 - _action_set_update_cell_label - can be done always
119 - _action_set_linear_combination_of_estimates - primary sweeps only, as
120 these kick off the Runge-Kutta step.
121 - _action_set_couple_resolution_transitions_and_handle_dynamic_mesh_refinement -
122 primary only, as the secondary step is a sole clean-up
123 - _action_set_project_linear_combination_onto_faces - only required in
124 primary sweep. In the secondary, we collect the results together, i.e., we
125 don't immediately need the boundary data anymore.
126 - _action_set_solve_volume_integral - only done in the primary sweep.
127 - _action_set_handle_boundary - only in secondary sweep, as we now have
128 access to the left and right face data and hence can invoke the
130 - _action_set_solve_Riemann_problem - secondary sweep. See discussion of
132 - _action_set_add_volume_and_face_solution - secondary sweep. The
133 Riemann solve plugs into the first touch of a face in the secondary
134 sweep, so now we can sum up the solutions.
135 - _action_set_compute_final_linear_combination_and_project_solution_onto_faces -
136 very last secondary sweep.
137 - _action_set_AMR - very last secondary sweep, i.e., after we have
139 - _action_set_postprocess_solution - same as for item above.
141 :: Guards around linear combination of estimates
143 We rely on the action set LinearCombination as it is initialised in the
144 superclass. So the only thing we have to do is to ensure that the
145 linear combination over the estimates is computed if and only if this
146 is required. For the separate sweeps, we compute the linear combinations
147 if the cell holds data, i.e., is on the finest level, and if it is the
148 primary of the two sweeps which realise a RK step, i.e., the one where
149 we later on project onto the faces.
An abstract class for any RKDG solver of any order.
_action_set_project_linear_combination_onto_faces
_action_set_solve_Riemann_problem
_action_set_solve_volume_integral
get_name_of_global_instance(self)
_store_cell_data_default_guard(self)
Extend the guard via ands only.
_provide_cell_data_to_compute_kernels_default_guard(self)
number_of_Runge_Kutta_steps(self)
_action_set_compute_final_linear_combination_and_project_solution_onto_faces
_store_face_data_default_guard(self)
Extend the guard via ands only.
create_data_structures(self)
Recall in subclasses if you wanna change the number of unknowns or auxiliary variables.
create_action_sets(self)
Overwrite in subclasses if you wanna create different action sets.
_action_set_handle_boundary
_solver_template_file_class_name
_action_set_linear_combination_of_estimates
_action_set_add_volume_and_face_solution
_action_set_couple_resolution_transitions_and_handle_dynamic_mesh_refinement
_linear_combination_of_estimates
Probably the simplest solver you could think off.
__init__(self, name, rk_order, polynomial_basis, number_of_face_projections, unknowns, auxiliary_variables, min_cell_h, max_cell_h, plot_grid_properties, pde_terms_without_state)
The super call invokes the creation of the data sets, where the guards have to be known already.
_primary_sweeps_of_Runge_Kutta_step_on_face
_solver_template_file_class_name
_secondary_sweeps_of_Runge_Kutta_step_on_cell
_primary_sweeps_of_Runge_Kutta_step_on_cell
_any_secondary_sweep_of_a_Runge_Kutta_step_on_cell
_any_secondary_sweep_of_a_Runge_Kutta_step_on_face
_any_primary_sweep_of_a_Runge_Kutta_step_on_face
_secondary_sweeps_of_Runge_Kutta_step_on_face
_any_primary_sweep_of_a_Runge_Kutta_step_on_cell
create_data_structures(self)
First, call the superclass' create_data_structures() to ensure that all the data structures are in pl...
_first_iteration_after_initialisation_guard
create_action_sets(self)
We invoke the superclass which creates all the action sets, and then we set the appropriate guards.
_initialisation_sweep_guard