92 Add the tasks of the setup over a regular mesh to setup_simulation
94 The initial condition task carries the tag
95 FinishedInitialRegularMeshSetup.
98 peano4.api.Logger().log(
"Create setup task graph for Finite Volume scheme over a regular, block-structured mesh with Rusanov flux")
100 assert any(isinstance(term, InitPointWisely)
for term
in self.
_solver_solver.pde_terms), (
101 f
"Solver {self._solver.name} has no InitPointWisely PDE term registered. "
102 "SetupSimulationOverRegularGrid needs one to fill in the initial condition - "
103 "add one via solver.add_pde_term(exahype2.api.InitPointWisely(...))."
111 entity=peano4.api.taskgraph.Task.GridEntity.CELL,
113 "not peano4::grid::isGridStationary( peano4::parallel::SpacetreeSet::getInstance().getGridStatistics() )"
114 " or ( ::toolbox::loadbalancing::LoadBalancingService::getInstance().hasLoadBalancing()"
115 " and ( not ::toolbox::loadbalancing::LoadBalancingService::getInstance().getLoadBalancing()->hasStagnated()"
116 " or ::toolbox::loadbalancing::LoadBalancingService::getInstance().getLoadBalancing()->hasSplitRecently() ) )"
120 entity=peano4.api.taskgraph.Task.GridEntity.CELL,
122 "not peano4::grid::isGridStationary( peano4::parallel::SpacetreeSet::getInstance().getGridStatistics() )"
123 " or ( ::toolbox::loadbalancing::LoadBalancingService::getInstance().hasLoadBalancing()"
124 " and ::toolbox::loadbalancing::LoadBalancingService::getInstance().getLoadBalancing()->hasSplitRecently() )"
128 assert hasattr(self.
_solver_solver.numerical_scheme,
"patch_size"), (
129 f
"Solver {self._solver.name}'s numerical scheme has no attribute "
130 "patch_size. SetupSimulationOverRegularGrid assumes the numerical "
131 "scheme has added this field to itself immediately upon construction."
140 refine_task.add_action_set(
144 "not ::toolbox::loadbalancing::LoadBalancingService::getInstance().hasLoadBalancing()"
145 " or not ::toolbox::loadbalancing::LoadBalancingService::getInstance().getLoadBalancing()->hasSplitRecently()"
148#include "toolbox/loadbalancing/AbstractLoadBalancing.h"
149#include "toolbox/loadbalancing/LoadBalancingService.h"
154 refine_task.add_action_set(toolbox.loadbalancing.api.actionsets.LoadBalancing())
158 consolidate_load_balancing_task.add_action_set(
159 toolbox.loadbalancing.api.actionsets.ToggleLoadBalancing(
160 enable_load_balancing=
False, plug_into_prepare_traversal=
True
163 consolidate_load_balancing_task.add_action_set(toolbox.loadbalancing.api.actionsets.LoadBalancing())
165 initial_condition_task =
peano4.api.taskgraph.Task(name=f
"{self._solver.name} Initial condition", entity=peano4.api.taskgraph.Task.GridEntity.CELL)
167 project_on_faces_task =
peano4.api.taskgraph.Task(name=f
"{self._solver.name} Project on faces", entity=peano4.api.taskgraph.Task.GridEntity.CELL)
169 consolidate_load_balancing_task.add_dependency(refine_task)
170 initial_condition_task.add_dependency(consolidate_load_balancing_task)
171 project_on_faces_task.add_dependency(initial_condition_task)
173 initial_condition_task.add_action_set(
176 project_on_faces_task.add_action_set(
187 if hasattr(self.
_solver_solver.numerical_scheme,
"create_restriction_of_hanging_faces"):
188 project_on_faces_task.add_action_set(
189 self.
_solver_solver.numerical_scheme.create_restriction_of_hanging_faces()
193 project_on_faces_task.add_action_set(
194 RollOverUpdatedFaceWithSommerfeldBoundaryConditions.create_roll_over(
202 setup_simulation.add_task(refine_task)
203 setup_simulation.add_task(consolidate_load_balancing_task)
204 setup_simulation.add_task(initial_condition_task)
205 setup_simulation.add_task(project_on_faces_task)
207 initial_condition_task.use_cell(self.
_solver_solver._patch, peano4.api.taskgraph.Task.DataAccess.WRITE)
208 project_on_faces_task.use_cell(self.
_solver_solver._patch, peano4.api.taskgraph.Task.DataAccess.READ_AND_WRITE)
209 project_on_faces_task.use_face(self.
_solver_solver._patch_overlap_update, peano4.api.taskgraph.Task.DataAccess.TEMPORARY)
210 project_on_faces_task.use_face(self.
_solver_solver._patch_overlap_current_time_step, peano4.api.taskgraph.Task.DataAccess.WRITE)