Line data Source code
1 0 : // Distributed under the MIT License.
2 : // See LICENSE.txt for details.
3 :
4 : #pragma once
5 :
6 : namespace Parallel::protocols {
7 : /*!
8 : * \brief Conforming types register and deregister array elements with other
9 : * parallel components
10 : *
11 : * For example, array elements may have to register and deregister with
12 : * interpolators or observers when the elements get created and destroyed during
13 : * AMR or migrated during load balancing. They may do so by sending messages to
14 : * the parallel components that notify of the creation and destruction of the
15 : * array elements.
16 : *
17 : * Conforming classes have the following static member functions:
18 : *
19 : * ```cpp
20 : * static void perform_registration<ParallelComponent>(const
21 : * db::DataBox<DbTagList>& box, Parallel::GlobalCache<Metavariables>& cache,
22 : * const ArrayIndex& array_index)
23 : *
24 : * static void perform_deregistration<ParallelComponent>(const
25 : * db::DataBox<DbTagList>& box, Parallel::GlobalCache<Metavariables>& cache,
26 : * const ArrayIndex& array_index)
27 : * ```
28 : *
29 : * Here is an example implementation of this protocol:
30 : *
31 : * \snippet RegistrationHelpers.hpp element_registrar_example
32 : */
33 1 : struct ElementRegistrar {
34 : template <typename ConformingType>
35 0 : struct test {};
36 : };
37 : } // namespace Parallel::protocols
|