This class represents the distribution index arrays across processes. An index array is a contiguous collection of N+1 indices [0, 1, . . ., N] that are distributed across M processes. On a given process, the IndexMap stores a portion of the index set using local indices [0, 1, . . . , n], and a map from the local indices to a unique global index.
More...
#include <IndexMap.h>
|
enum | Mode { insert,
add
} |
| Mode for reverse scatter operation.
|
|
enum | Direction { reverse,
forward,
symmetric
} |
| Edge directions of neighborhood communicator.
|
|
|
| IndexMap (MPI_Comm comm, std::int32_t local_size) |
| Create an non-overlapping index map with local_size owned on this process. More...
|
|
| IndexMap (MPI_Comm mpi_comm, std::int32_t local_size, const std::vector< int > &dest_ranks, const std::vector< std::int64_t > &ghosts, const std::vector< int > &src_ranks) |
| Create an index map with local_size owned indiced on this process. More...
|
|
| IndexMap (const IndexMap &map)=delete |
|
| IndexMap (IndexMap &&map)=default |
| Move constructor.
|
|
| ~IndexMap ()=default |
| Destructor.
|
|
IndexMap & | operator= (IndexMap &&map)=default |
| Move assignment.
|
|
IndexMap & | operator= (const IndexMap &map)=delete |
|
std::array< std::int64_t, 2 > | local_range () const noexcept |
| Range of indices (global) owned by this process.
|
|
std::int32_t | num_ghosts () const noexcept |
| Number of ghost indices on this process.
|
|
std::int32_t | size_local () const noexcept |
| Number of indices owned by on this process.
|
|
std::int64_t | size_global () const noexcept |
| Number indices across communicator.
|
|
const std::vector< std::int64_t > & | ghosts () const noexcept |
| Local-to-global map for ghosts (local indexing beyond end of local range)
|
|
MPI_Comm | comm (Direction dir=Direction::symmetric) const |
| Return a MPI communicator with attached distributed graph topology information. More...
|
|
void | local_to_global (const xtl::span< const std::int32_t > &local, const xtl::span< std::int64_t > &global) const |
| Compute global indices for array of local indices. More...
|
|
void | global_to_local (const xtl::span< const std::int64_t > &global, const xtl::span< std::int32_t > &local) const |
| Compute local indices for array of global indices. More...
|
|
std::vector< std::int64_t > | global_indices () const |
| Global indices. More...
|
|
const graph::AdjacencyList< std::int32_t > & | shared_indices () const noexcept |
|
std::vector< int > | ghost_owner_rank () const |
| Owner rank (on global communicator) of each ghost entry.
|
|
std::map< std::int32_t, std::set< int > > | compute_shared_indices () const |
|
template<typename T > |
void | scatter_fwd (xtl::span< const T > local_data, xtl::span< T > remote_data, int n) const |
| Send n values for each index that is owned to processes that have the index as a ghost. The size of the input array local_data must be the same as n * size_local(). More...
|
|
template<typename T > |
void | scatter_rev (xtl::span< T > local_data, xtl::span< const T > remote_data, int n, IndexMap::Mode op) const |
| Send n values for each ghost index to owning to the process. More...
|
|
This class represents the distribution index arrays across processes. An index array is a contiguous collection of N+1 indices [0, 1, . . ., N] that are distributed across M processes. On a given process, the IndexMap stores a portion of the index set using local indices [0, 1, . . . , n], and a map from the local indices to a unique global index.
◆ IndexMap() [1/2]
IndexMap::IndexMap |
( |
MPI_Comm |
comm, |
|
|
std::int32_t |
local_size |
|
) |
| |
Create an non-overlapping index map with local_size owned on this process.
- Note
- Collective
- Parameters
-
[in] | comm | The MPI communicator |
[in] | local_size | Local size of the IndexMap, i.e. the number of owned entries |
◆ IndexMap() [2/2]
IndexMap::IndexMap |
( |
MPI_Comm |
mpi_comm, |
|
|
std::int32_t |
local_size, |
|
|
const std::vector< int > & |
dest_ranks, |
|
|
const std::vector< std::int64_t > & |
ghosts, |
|
|
const std::vector< int > & |
src_ranks |
|
) |
| |
Create an index map with local_size owned indiced on this process.
- Note
- Collective
- Parameters
-
[in] | mpi_comm | The MPI communicator |
[in] | local_size | Local size of the IndexMap, i.e. the number of owned entries |
[in] | dest_ranks | Ranks that 'ghost' indices that are owned by the calling rank. I.e., ranks that the caller will send data to when updating ghost values. |
[in] | ghosts | The global indices of ghost entries |
[in] | src_ranks | Owner rank (on global communicator) of each entry in ghosts |
◆ comm()
MPI_Comm IndexMap::comm |
( |
Direction |
dir = Direction::symmetric | ) |
const |
Return a MPI communicator with attached distributed graph topology information.
- Parameters
-
[in] | dir | Edge direction of communicator (forward, reverse, symmetric) |
- Returns
- A neighborhood communicator for the specified edge direction
◆ compute_shared_indices()
std::map< std::int32_t, std::set< int > > IndexMap::compute_shared_indices |
( |
| ) |
const |
- Todo:
- Aim to remove this function? If it's kept, should it work with neighborhood ranks?
Compute map from each local (owned) index to the set of ranks that have the index as a ghost
- Returns
- shared indices
◆ global_indices()
std::vector< std::int64_t > IndexMap::global_indices |
( |
| ) |
const |
Global indices.
- Returns
- The global index for all local indices (0, 1, 2, ...) on this process, including ghosts
◆ global_to_local()
void IndexMap::global_to_local |
( |
const xtl::span< const std::int64_t > & |
global, |
|
|
const xtl::span< std::int32_t > & |
local |
|
) |
| const |
Compute local indices for array of global indices.
- Parameters
-
[in] | global | Global indices |
[out] | local | The local of the corresponding global index in 'global'. Returns -1 if the local index does not exist on this process. |
◆ local_to_global()
void IndexMap::local_to_global |
( |
const xtl::span< const std::int32_t > & |
local, |
|
|
const xtl::span< std::int64_t > & |
global |
|
) |
| const |
Compute global indices for array of local indices.
- Parameters
-
[in] | local | Local indices |
[out] | global | The global indices |
◆ scatter_fwd()
template<typename T >
void IndexMap::scatter_fwd |
( |
xtl::span< const T > |
local_data, |
|
|
xtl::span< T > |
remote_data, |
|
|
int |
n |
|
) |
| const |
Send n values for each index that is owned to processes that have the index as a ghost. The size of the input array local_data must be the same as n * size_local().
- Parameters
-
[in] | local_data | Local data associated with each owned local index to be sent to process where the data is ghosted. Size must be n * size_local(). |
[in,out] | remote_data | Ghost data on this process received from the owning process. Size will be n * num_ghosts(). |
[in] | n | Number of data items per index |
◆ scatter_rev()
template<typename T >
void IndexMap::scatter_rev |
( |
xtl::span< T > |
local_data, |
|
|
xtl::span< const T > |
remote_data, |
|
|
int |
n, |
|
|
IndexMap::Mode |
op |
|
) |
| const |
Send n values for each ghost index to owning to the process.
- Parameters
-
[in,out] | local_data | Local data associated with each owned local index to be sent to process where the data is ghosted. Size must be n * size_local(). |
[in] | remote_data | Ghost data on this process received from the owning process. Size will be n * num_ghosts(). |
[in] | n | Number of data items per index |
[in] | op | Sum or set received values in local_data |
◆ shared_indices()
- Todo:
- Reconsider name Local (owned) indices shared with neighbor processes, i.e. are ghosts on other processes, grouped by sharing (neighbor) process(destination ranks in forward communicator and source ranks in the reverse communicator)
- Returns
- List of indices that are ghosted on other processes
The documentation for this class was generated from the following files:
- /__w/dolfinx/dolfinx/cpp/dolfinx/common/IndexMap.h
- /__w/dolfinx/dolfinx/cpp/dolfinx/common/IndexMap.cpp