Note: this is documentation for an old release. View the latest documentation at docs.fenicsproject.org/dolfinx/v0.9.0/cpp/doxygen/d7/d74/IndexMap_8h_source.html
DOLFINx 0.6.0
DOLFINx C++ interface
Loading...
Searching...
No Matches
IndexMap.h
1// Copyright (C) 2015-2022 Chris Richardson, Garth N. Wells and Igor Baratta
2//
3// This file is part of DOLFINx (https://www.fenicsproject.org)
4//
5// SPDX-License-Identifier: LGPL-3.0-or-later
6
7#pragma once
8
9#include "IndexMap.h"
10#include <cstdint>
11#include <dolfinx/common/MPI.h>
12#include <memory>
13#include <span>
14#include <utility>
15#include <vector>
16
17namespace dolfinx::common
18{
19// Forward declaration
20class IndexMap;
21
29std::vector<int32_t>
30compute_owned_indices(std::span<const std::int32_t> indices,
31 const IndexMap& map);
32
50std::tuple<std::int64_t, std::vector<std::int32_t>,
51 std::vector<std::vector<std::int64_t>>,
52 std::vector<std::vector<int>>>
54 const std::vector<
55 std::pair<std::reference_wrapper<const common::IndexMap>, int>>& maps);
56
64{
65public:
73 IndexMap(MPI_Comm comm, std::int32_t local_size);
74
91 IndexMap(MPI_Comm comm, std::int32_t local_size,
92 std::span<const std::int64_t> ghosts, std::span<const int> owners);
93
113 IndexMap(MPI_Comm comm, std::int32_t local_size,
114 const std::array<std::vector<int>, 2>& src_dest,
115 std::span<const std::int64_t> ghosts, std::span<const int> owners);
116
117 // Copy constructor
118 IndexMap(const IndexMap& map) = delete;
119
121 IndexMap(IndexMap&& map) = default;
122
124 ~IndexMap() = default;
125
127 IndexMap& operator=(IndexMap&& map) = default;
128
129 // Copy assignment
130 IndexMap& operator=(const IndexMap& map) = delete;
131
133 std::array<std::int64_t, 2> local_range() const noexcept;
134
136 std::int32_t num_ghosts() const noexcept;
137
139 std::int32_t size_local() const noexcept;
140
142 std::int64_t size_global() const noexcept;
143
146 const std::vector<std::int64_t>& ghosts() const noexcept;
147
150 MPI_Comm comm() const;
151
155 void local_to_global(std::span<const std::int32_t> local,
156 std::span<std::int64_t> global) const;
157
163 void global_to_local(std::span<const std::int64_t> global,
164 std::span<std::int32_t> local) const;
165
169 std::vector<std::int64_t> global_indices() const;
170
174 const std::vector<int>& owners() const { return _owners; }
175
189 std::pair<IndexMap, std::vector<std::int32_t>>
190 create_submap(std::span<const std::int32_t> indices) const;
191
198
203 std::vector<std::int32_t> shared_indices() const;
204
211 const std::vector<int>& src() const noexcept;
212
220 const std::vector<int>& dest() const noexcept;
221
229 bool overlapped() const noexcept;
230
231private:
232 // Range of indices (global) owned by this process
233 std::array<std::int64_t, 2> _local_range;
234
235 // Number indices across communicator
236 std::int64_t _size_global;
237
238 // MPI communicator that map is defined on
239 dolfinx::MPI::Comm _comm;
240
241 // Local-to-global map for ghost indices
242 std::vector<std::int64_t> _ghosts;
243
244 // Local-to-global map for ghost indices
245 std::vector<int> _owners;
246
247 // Set of ranks that own ghosts
248 std::vector<int> _src;
249
250 // Set of ranks ghost owned indices
251 std::vector<int> _dest;
252
253 // True if map has overlaps (ghosts)
254 bool _overlapping;
255};
256} // namespace dolfinx::common
This class represents the distribution index arrays across processes. An index array is a contiguous ...
Definition: IndexMap.h:64
bool overlapped() const noexcept
Check if index map has overlaps (ghosts on any rank).
Definition: IndexMap.cpp:954
~IndexMap()=default
Destructor.
std::int32_t num_ghosts() const noexcept
Number of ghost indices on this process.
Definition: IndexMap.cpp:390
std::pair< IndexMap, std::vector< std::int32_t > > create_submap(std::span< const std::int32_t > indices) const
Create new index map from a subset of indices in this index map.
Definition: IndexMap.cpp:465
const std::vector< int > & src() const noexcept
Ordered set of MPI ranks that own caller's ghost indices.
Definition: IndexMap.cpp:950
const std::vector< int > & owners() const
The ranks that own each ghost index.
Definition: IndexMap.h:174
std::array< std::int64_t, 2 > local_range() const noexcept
Range of indices (global) owned by this process.
Definition: IndexMap.cpp:385
std::int32_t size_local() const noexcept
Number of indices owned by on this process.
Definition: IndexMap.cpp:392
std::int64_t size_global() const noexcept
Number indices across communicator.
Definition: IndexMap.cpp:397
IndexMap(IndexMap &&map)=default
Move constructor.
IndexMap & operator=(IndexMap &&map)=default
Move assignment.
graph::AdjacencyList< int > index_to_dest_ranks() const
Compute map from each local (owned) index to the set of ranks that have the index as a ghost.
Definition: IndexMap.cpp:640
const std::vector< std::int64_t > & ghosts() const noexcept
Local-to-global map for ghosts (local indexing beyond end of local range)
Definition: IndexMap.cpp:399
void local_to_global(std::span< const std::int32_t > local, std::span< std::int64_t > global) const
Compute global indices for array of local indices.
Definition: IndexMap.cpp:404
void global_to_local(std::span< const std::int64_t > global, std::span< std::int32_t > local) const
Compute local indices for array of global indices.
Definition: IndexMap.cpp:423
const std::vector< int > & dest() const noexcept
Ordered set of MPI ranks that ghost indices owned by caller.
Definition: IndexMap.cpp:952
std::vector< std::int32_t > shared_indices() const
Build a list of owned indices that are ghosted by another rank.
Definition: IndexMap.cpp:865
MPI_Comm comm() const
Return the MPI communicator that the map is defined on.
Definition: IndexMap.cpp:462
std::vector< std::int64_t > global_indices() const
Build list of indices with global indexing.
Definition: IndexMap.cpp:449
This class provides a static adjacency list data structure. It is commonly used to store directed gra...
Definition: AdjacencyList.h:27
Miscellaneous classes, functions and types.
std::tuple< std::int64_t, std::vector< std::int32_t >, std::vector< std::vector< std::int64_t > >, std::vector< std::vector< int > > > stack_index_maps(const std::vector< std::pair< std::reference_wrapper< const common::IndexMap >, int > > &maps)
Compute layout data and ghost indices for a stacked (concatenated) index map, i.e....
Definition: IndexMap.cpp:145
std::vector< int32_t > compute_owned_indices(std::span< const std::int32_t > indices, const IndexMap &map)
Given a vector of indices (local numbering, owned or ghost) and an index map, this function returns t...
Definition: IndexMap.cpp:39