AlgorithmGroupDeclarations.hpp
1 // Distributed under the MIT License.
2 // See LICENSE.txt for details.
3 
4 #pragma once
5 
6 #include "Parallel/ArrayIndex.hpp"
7 
8 #include "Parallel/Algorithms/AlgorithmGroup.decl.h"
9 
10 namespace Parallel {
11 namespace Algorithms {
12 
13 /*!
14  * \ingroup ParallelGroup
15  * \brief A struct that stores the charm++ types relevant for a particular group
16  * component
17  *
18  * \details The type traits are:
19  * - `cproxy`: the charm++ proxy.
20  * See https://charm.readthedocs.io/en/latest/faq/manual.html#what-is-a-proxy
21  * - `cbase`: the charm++ base class. See
22  * https://charm.readthedocs.io/en/latest/charm++/manual.html#chare-objects
23  * - `algorithm_type`: the chare type (`AlgorithmGroup`) for the group
24  * component.
25  * - `ckindex`: A charm++ chare index object. Useful for obtaining entry
26  * method indices that are needed for creating callbacks. See
27  * https://charm.readthedocs.io/en/latest/charm++/manual.html#creating-a-ckcallback-object
28  * - `cproxy_section`: The charm++ section proxy class. See
29  * https://charm.readthedocs.io/en/latest/charm++/manual.html?#sections-subsets-of-a-chare-array-group
30  */
31 struct Group {
32  template <typename ParallelComponent,
33  typename SpectreArrayIndex>
34  using cproxy = CProxy_AlgorithmGroup<ParallelComponent,
35  SpectreArrayIndex>;
36 
37  template <typename ParallelComponent,
38  typename SpectreArrayIndex>
39  using cbase = CBase_AlgorithmGroup<ParallelComponent,
40  SpectreArrayIndex>;
41 
42  template <typename ParallelComponent,
43  typename SpectreArrayIndex>
44  using algorithm_type = AlgorithmGroup<ParallelComponent,
45  SpectreArrayIndex>;
46 
47  template <typename ParallelComponent,
48  typename SpectreArrayIndex>
49  using ckindex = CkIndex_AlgorithmGroup<ParallelComponent,
50  SpectreArrayIndex>;
51 
52  template <typename ParallelComponent, typename SpectreArrayIndex>
53  using cproxy_section =
54  CProxySection_AlgorithmGroup<ParallelComponent, SpectreArrayIndex>;
55 };
56 } // namespace Algorithms
57 } // namespace Parallel
Parallel::Algorithms::Group
A struct that stores the charm++ types relevant for a particular group component.
Definition: AlgorithmGroupDeclarations.hpp:31
AlgorithmGroup
A Spectre algorithm object that wraps a charm++ group chare.
Definition: AlgorithmGroup.hpp:43
Parallel
Functionality for parallelization.
Definition: ElementReceiveInterpPoints.hpp:13