DOLFINx 0.10.0.0
DOLFINx C++ interface
Loading...
Searching...
No Matches
IndexMap.h
1// Copyright (C) 2015-2024 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
24enum class IndexMapOrder : bool
25{
26 preserve = true,
27 any = false
28};
29
37std::vector<int32_t>
38compute_owned_indices(std::span<const std::int32_t> indices,
39 const IndexMap& map);
40
58std::tuple<std::int64_t, std::vector<std::int32_t>,
59 std::vector<std::vector<std::int64_t>>,
60 std::vector<std::vector<int>>>
62 const std::vector<std::pair<std::reference_wrapper<const IndexMap>, int>>&
63 maps);
64
83std::pair<IndexMap, std::vector<std::int32_t>> create_sub_index_map(
84 const IndexMap& imap, std::span<const std::int32_t> indices,
85 IndexMapOrder order = IndexMapOrder::any, bool allow_owner_change = false);
86
94{
95public:
104 IndexMap(MPI_Comm comm, std::int32_t local_size);
105
134 IndexMap(MPI_Comm comm, std::int32_t local_size,
135 std::span<const std::int64_t> ghosts, std::span<const int> owners,
136 int tag = static_cast<int>(dolfinx::MPI::tag::consensus_nbx));
137
157 IndexMap(MPI_Comm comm, std::int32_t local_size,
158 const std::array<std::vector<int>, 2>& src_dest,
159 std::span<const std::int64_t> ghosts, std::span<const int> owners);
160
161 // Copy constructor
162 IndexMap(const IndexMap& map) = delete;
163
165 IndexMap(IndexMap&& map) = default;
166
168 ~IndexMap() = default;
169
171 IndexMap& operator=(IndexMap&& map) = default;
172
173 // Copy assignment
174 IndexMap& operator=(const IndexMap& map) = delete;
175
177 std::array<std::int64_t, 2> local_range() const noexcept;
178
180 std::int32_t num_ghosts() const noexcept;
181
183 std::int32_t size_local() const noexcept;
184
186 std::int64_t size_global() const noexcept;
187
190 std::span<const std::int64_t> ghosts() const noexcept;
191
194 MPI_Comm comm() const;
195
199 void local_to_global(std::span<const std::int32_t> local,
200 std::span<std::int64_t> global) const;
201
207 void global_to_local(std::span<const std::int64_t> global,
208 std::span<std::int32_t> local) const;
209
213 std::vector<std::int64_t> global_indices() const;
214
218 std::span<const int> owners() const { return _owners; }
219
233 int tag = static_cast<int>(dolfinx::MPI::tag::consensus_nbx)) const;
234
239 std::vector<std::int32_t> shared_indices() const;
240
247 std::span<const int> src() const noexcept;
248
256 std::span<const int> dest() const noexcept;
257
273 std::array<double, 2> imbalance() const;
274
275private:
276 // Range of indices (global) owned by this process
277 std::array<std::int64_t, 2> _local_range;
278
279 // Number indices across communicator
280 std::int64_t _size_global;
281
282 // MPI communicator that map is defined on
283 dolfinx::MPI::Comm _comm;
284
285 // Local-to-global map for ghost indices
286 std::vector<std::int64_t> _ghosts;
287
288 // Owning rank on _comm for the ith ghost index
289 std::vector<int> _owners;
290
291 // Set of ranks that own ghosts
292 std::vector<int> _src;
293
294 // Set of ranks ghost owned indices
295 std::vector<int> _dest;
296};
297} // namespace dolfinx::common
Definition IndexMap.h:94
~IndexMap()=default
Destructor.
std::span< const int > owners() const
The ranks that own each ghost index.
Definition IndexMap.h:218
std::int32_t num_ghosts() const noexcept
Number of ghost indices on this process.
Definition IndexMap.cpp:931
std::span< const int > dest() const noexcept
Ordered set of MPI ranks that ghost indices owned by caller.
Definition IndexMap.cpp:1302
std::array< std::int64_t, 2 > local_range() const noexcept
Range of indices (global) owned by this process.
Definition IndexMap.cpp:926
std::int32_t size_local() const noexcept
Number of indices owned by this process.
Definition IndexMap.cpp:933
std::int64_t size_global() const noexcept
Number indices across communicator.
Definition IndexMap.cpp:938
IndexMap(IndexMap &&map)=default
Move constructor.
IndexMap & operator=(IndexMap &&map)=default
Move assignment.
std::array< double, 2 > imbalance() const
Returns the imbalance of the current IndexMap.
Definition IndexMap.cpp:1304
std::span< const int > src() const noexcept
Ordered set of MPI ranks that own caller's ghost indices.
Definition IndexMap.cpp:1300
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:945
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:964
IndexMap(MPI_Comm comm, std::int32_t local_size)
Create an non-overlapping index map.
Definition IndexMap.cpp:856
std::span< const std::int64_t > ghosts() const noexcept
Definition IndexMap.cpp:940
graph::AdjacencyList< int > index_to_dest_ranks(int tag=static_cast< int >(dolfinx::MPI::tag::consensus_nbx)) const
Compute map from each local (owned) index to the set of ranks that have the index as a ghost.
Definition IndexMap.cpp:1007
std::vector< std::int32_t > shared_indices() const
Build a list of owned indices that are ghosted by another rank.
Definition IndexMap.cpp:1229
MPI_Comm comm() const
Return the MPI communicator that the map is defined on.
Definition IndexMap.cpp:1005
std::vector< std::int64_t > global_indices() const
Build list of indices with global indexing.
Definition IndexMap.cpp:993
Definition topologycomputation.h:24
Miscellaneous classes, functions and types.
Definition dolfinx_common.h:8
std::pair< IndexMap, std::vector< std::int32_t > > create_sub_index_map(const IndexMap &imap, std::span< const std::int32_t > indices, IndexMapOrder order=IndexMapOrder::any, bool allow_owner_change=false)
Create a new index map from a subset of indices in an existing index map.
Definition IndexMap.cpp:815
std::vector< int32_t > compute_owned_indices(std::span< const std::int32_t > indices, const IndexMap &map)
Given a sorted vector of indices (local numbering, owned or ghost) and an index map,...
Definition IndexMap.cpp:537
IndexMapOrder
Definition IndexMap.h:25
@ any
Allow arbitrary ordering of ghost indices in sub-maps.
@ preserve
Preserve the ordering of ghost indices.
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 IndexMap >, int > > &maps)
Compute layout data and ghost indices for a stacked (concatenated) index map, i.e....
Definition IndexMap.cpp:649
Top-level namespace.
Definition defines.h:12