Note: this is documentation for an old release. View the latest documentation at docs.fenicsproject.org/v0.1.0/v0.9.0/cpp
DOLFINx  0.1.0
DOLFINx C++ interface
Public Types | Public Member Functions | List of all members
dolfinx::common::IndexMap Class Reference

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>

Public Types

enum  Mode { insert, add }
 Mode for reverse scatter operation.
 
enum  Direction { reverse, forward, symmetric }
 Edge directions of neighborhood communicator.
 

Public Member Functions

 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.
 
IndexMapoperator= (IndexMap &&map)=default
 Move assignment.
 
IndexMapoperator= (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...
 

Detailed Description

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.

Constructor & Destructor Documentation

◆ 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]commThe MPI communicator
[in]local_sizeLocal 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_commThe MPI communicator
[in]local_sizeLocal size of the IndexMap, i.e. the number of owned entries
[in]dest_ranksRanks 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]ghostsThe global indices of ghost entries
[in]src_ranksOwner rank (on global communicator) of each entry in ghosts

Member Function Documentation

◆ comm()

MPI_Comm IndexMap::comm ( Direction  dir = Direction::symmetric) const

Return a MPI communicator with attached distributed graph topology information.

Parameters
[in]dirEdge 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]globalGlobal indices
[out]localThe 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]localLocal indices
[out]globalThe 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_dataLocal 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_dataGhost data on this process received from the owning process. Size will be n * num_ghosts().
[in]nNumber 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_dataLocal 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_dataGhost data on this process received from the owning process. Size will be n * num_ghosts().
[in]nNumber of data items per index
[in]opSum or set received values in local_data

◆ shared_indices()

const graph::AdjacencyList< std::int32_t > & IndexMap::shared_indices ( ) const
noexcept
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: