|
| | __init__ (self, name, patch_size, min_cell_size, max_cell_size, KernelParallelisation parallelisation_of_interpolation, KernelParallelisation parallelisation_of_kernels, interpolation_method) |
| | create_action_sets (self) |
| | __init__ (self, name, patch_size, rk_order, min_meshcell_h, max_meshcell_h, pde_terms_without_state, second_order=False) |
| | Constructor.
|
| | add_tracer (self, name, coordinates, project, number_of_entries_between_two_db_flushes, data_delta_between_two_snapsots, time_delta_between_two_snapsots, clear_database_after_flush, tracer_unknowns) |
| | Add tracer to project.
|
| | __init__ (self) |
| | Constructor.
|
| | enable_second_order (self) |
| | add_all_solver_constants (self) |
| | Add domain-specific constants.
|
| | add_makefile_parameters (self, peano4_project, path_of_ccz4_application) |
| | Add include path and minimal required cpp files to makefile.
|
4th order Finite Differences solver with a limiter
The FD scheme is our primary solver, i.e. the one we wanna use (almost) everywhere. Hence, we have to be sure that we use the right boundary conditions. In our case, that should be Sommerfeld ones. As we work with a limited FD4 solver, we have to ensure that we get the solver coupling right.
The primary solver is a plain CCZ4 FD4 solver with enclave tasking. There are some modification though:
- We ensure that we use Sommerfeld boundary conditions. This means that we have to replace the whole generic boundary treatment with a bespoke action set.
- The coupling has to be injected. We model the coupling as separate (enclave) tasks to avoid that we totally serialise the solver steps whenever we encounter a coupling.
Definition at line 205 of file SBH.py.
| SBH.FD4SolverWithLimiter.create_action_sets |
( |
| self | ) |
|
Tailor action set behaviour
We first make a few additional cells skeleton cells. The rationale
behind additional skeletons is given in the @ref benchmarks_exahype2_ccz4_single_black_hole "generic overview".
Given the first remark there on FD4-FV coupling, one would be tempted
to use the predicate
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
self._action_set_update_cell.additional_skeleton_guard = " " "(
repositories::instanceOf" " " + self._name_without_FD4_extension + " " "_FV.isCellOverlappingWithBHImpactArea(marker) and not repositories::instanceOf" " " + self._name_without_FD4_extension + " " "_FV.areAllFaceConnectedCellsOverlappingWithBHImpactArea(marker) ) " " " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Once we study the other items (notably the fourth), we see that it is reasonable to make all the overlap region a skeleton within the FD4 solver.
Definition at line 291 of file SBH.py.
References ccz4.CCZ4Solver._auxiliary_variables, mgccz4.MGCCZ4Solver._auxiliary_variables, and create_action_sets().
Referenced by mgccz4.MGCCZ4Solver.add_derivative_calculation(), ccz4.CCZ4Solver.add_Psi4W(), and create_action_sets().