10#ifndef TPETRA_MAP_DECL_HPP
11#define TPETRA_MAP_DECL_HPP
17#include "Tpetra_ConfigDefs.hpp"
23#include "Tpetra_KokkosCompat_DefaultNode.hpp"
24#include "Kokkos_DualView.hpp"
25#include "Teuchos_Array.hpp"
26#include "Teuchos_Comm.hpp"
27#include "Teuchos_Describable.hpp"
195template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
196class Map :
public Teuchos::Describable {
296 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm,
337 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm);
388 const Kokkos::View<const global_ordinal_type*, device_type>& indexList,
390 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm,
391 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null);
446 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm,
447 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null);
499 const Teuchos::ArrayView<const global_ordinal_type>& indexList,
501 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm,
502 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null);
560 return numGlobalElements_;
569 return numLocalElements_;
602 return Tpetra::Details::OrdinalTraits<local_ordinal_type>::invalid();
632 TEUCHOS_TEST_FOR_EXCEPTION(!haveGlobalConstants(), std::logic_error,
"\"Map::getMinAllGlobalIndex\" called, but global constants have not been computed with \"Map::computeGlobalConstants\".");
642 TEUCHOS_TEST_FOR_EXCEPTION(!haveGlobalConstants(), std::logic_error,
"\"Map::getMaxAllGlobalIndex\" called, but global constants have not been computed with \"Map::computeGlobalConstants\".");
670 bool getGlobalElements(
711 const Teuchos::ArrayView<local_ordinal_type>&
LIDList)
const;
738 const Teuchos::ArrayView<int>&
nodeIDList)
const;
755 global_indices_array_type;
759 global_indices_array_device_type;
947 Teuchos::RCP<const Teuchos::Comm<int>>
getComm()
const;
979 const Teuchos::EVerbosityLevel
verbLevel =
980 Teuchos::Describable::verbLevel_default)
const;
1033 Teuchos::RCP<const Map<local_ordinal_type, global_ordinal_type, Node>>
1063 Teuchos::RCP<const Map<local_ordinal_type, global_ordinal_type, Node>>
1073 localDescribeToString(
const Teuchos::EVerbosityLevel
vl)
const;
1082 void setupDirectory()
const;
1098 bool checkIsDist()
const;
1108 initialNonuniformDebugCheck(
1113 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm)
const;
1116 initWithNonownedHostIndexList(
1124 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm,
1125 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null);
1136 Teuchos::RCP<const Teuchos::Comm<int>> comm_;
1146 size_t numLocalElements_;
1203 mutable bool distributed_;
1206 mutable bool haveGlobalConstants_ =
false;
1209 bool haveGlobalConstants()
const {
return haveGlobalConstants_; }
1331 mutable Teuchos::RCP<
1350template <
class LocalOrdinal,
class GlobalOrdinal>
1351Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal>>
1353 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm);
1369template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
1370Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>
1372 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm);
1381template <
class LocalOrdinal,
class GlobalOrdinal>
1382Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal>>
1384 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm);
1392template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
1393Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>
1395 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm);
1403template <
class LocalOrdinal,
class GlobalOrdinal>
1404Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal>>
1407 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm);
1417template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
1418Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>
1421 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm);
1429template <
class LocalOrdinal,
class GlobalOrdinal>
1430Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal>>
1432 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm);
1441template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
1442Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>
1444 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm);
1456template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
1457Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>
1465template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
1466Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>
1468 const ::Tpetra::Details::TieBreak<LocalOrdinal, GlobalOrdinal>&
tie_break);
1476template <
class LO,
class GO,
class NT>
1477Teuchos::RCP<const Tpetra::Map<LO, GO, NT>>
1482#include "Tpetra_Directory_decl.hpp"
1486template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
1492template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
Declaration and definition of the Tpetra::Map class, an implementation detail of Tpetra::Map.
Declaration of Tpetra::Details::iallreduce.
Forward declaration of Tpetra::Directory.
Forward declaration of Tpetra::Map.
Forward declaration for Tpetra::TieBreak.
Struct that holds views of the contents of a CrsMatrix.
"Local" part of Map suitable for Kokkos kernels.
Implement mapping from global ID to process ID and local ID.
A parallel distribution of indices over processes.
Map & operator=(Map< local_ordinal_type, global_ordinal_type, node_type > &&)=default
Move assigment (shallow move).
Map & operator=(const Map< local_ordinal_type, global_ordinal_type, node_type > &)=default
Copy assigment (shallow copy).
Map(Map< local_ordinal_type, global_ordinal_type, node_type > &&)=default
Move constructor (shallow move).
bool isDistributed() const
Whether this Map is globally distributed or locally replicated.
bool isOneToOne() const
Whether the Map is one to one.
std::string description() const
Implementation of Teuchos::Describable.
Teuchos::ArrayView< const global_ordinal_type > getLocalElementList() const
Return a NONOWNING view of the global indices owned by this process.
Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal > > createLocalMap(const size_t numElements, const Teuchos::RCP< const Teuchos::Comm< int > > &comm)
Nonmember constructor for a locally replicated Map with the default Kokkos Node.
global_ordinal_type getMinAllGlobalIndex() const
The minimum global index over all processes in the communicator.
::Tpetra::Details::FixedHashTable< global_ordinal_type, local_ordinal_type, device_type > global_to_local_table_type
Type of a mapping from global IDs to local IDs.
Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal > > createUniformContigMap(const global_size_t numElements, const Teuchos::RCP< const Teuchos::Comm< int > > &comm)
Non-member constructor for a uniformly distributed, contiguous Map with the default Kokkos Node.
Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal > > createNonContigMap(const Teuchos::ArrayView< const GlobalOrdinal > &elementList, const Teuchos::RCP< const Teuchos::Comm< int > > &comm)
Nonmember constructor for a non-contiguous Map using the default Kokkos::Device type.
global_ordinal_type getGlobalElement(local_ordinal_type localIndex) const
The global index corresponding to the given local index.
Node node_type
Legacy typedef that will go away at some point.
Kokkos::View< const global_ordinal_type *, Kokkos::LayoutLeft, device_type > lgMap_
A mapping from local IDs to global IDs.
Map()
Default constructor (that does nothing).
GlobalOrdinal global_ordinal_type
The type of global indices.
bool operator!=(const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > &map1, const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > &map2)
True if map1 is not the same as (in the sense of isSameAs()) map2, else false.
LookupStatus getRemoteIndexList(const Teuchos::ArrayView< const global_ordinal_type > &GIDList, const Teuchos::ArrayView< int > &nodeIDList, const Teuchos::ArrayView< local_ordinal_type > &LIDList) const
Return the process ranks and corresponding local indices for the given global indices.
bool isNodeLocalElement(local_ordinal_type localIndex) const
Whether the given local index is valid for this Map on the calling process.
bool isUniform() const
Whether the range of global indices is uniform.
Teuchos::RCP< const Teuchos::Comm< int > > getComm() const
Accessors for the Teuchos::Comm and Kokkos Node objects.
Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > createUniformContigMapWithNode(const global_size_t numElements, const Teuchos::RCP< const Teuchos::Comm< int > > &comm)
Non-member constructor for a uniformly distributed, contiguous Map with a user-specified Kokkos Node.
typename device_type::execution_space execution_space
The Kokkos execution space.
LocalOrdinal local_ordinal_type
The type of local indices.
Teuchos::RCP< const Map< local_ordinal_type, global_ordinal_type, Node > > removeEmptyProcesses() const
Advanced methods.
void lazyPushToHost() const
Push the device data to host, if needed.
global_ordinal_type getMaxAllGlobalIndex() const
The maximum global index over all processes in the communicator.
bool isCompatible(const Map< local_ordinal_type, global_ordinal_type, Node > &map) const
True if and only if map is compatible with this Map.
global_ordinal_type getIndexBase() const
The index base for this Map.
Teuchos::RCP< const Tpetra::Map< LO, GO, NT > > createOneToOneAndMakeOverlappingMapFitted(Teuchos::RCP< const Tpetra::Map< LO, GO, NT > > &M)
Creates a one-to-one version of the given Map where each GID lives on only one process....
Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal > > createContigMap(const global_size_t numElements, const size_t localNumElements, const Teuchos::RCP< const Teuchos::Comm< int > > &comm)
Non-member constructor for a (potentially) non-uniformly distributed, contiguous Map using the defaul...
bool locallySameAs(const Map< local_ordinal_type, global_ordinal_type, node_type > &map) const
Is this Map locally the same as the input Map?
global_to_local_table_host_type glMapHost_
Host View of glMap_.
bool isLocallyFitted(const Map< local_ordinal_type, global_ordinal_type, Node > &map) const
True if and only if map is locally fitted to this Map.
bool operator==(const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > &map1, const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > &map2)
True if map1 is the same as (in the sense of isSameAs()) map2, else false.
virtual ~Map()
Destructor (virtual for memory safety of derived classes).
::Tpetra::Details::FixedHashTable< global_ordinal_type, local_ordinal_type, Kokkos::HostSpace::device_type > global_to_local_table_host_type
Type of a mapping from global IDs to local IDs on host.
Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > createOneToOne(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &M)
Nonmember constructor for a contiguous Map with user-defined weights and a user-specified,...
global_indices_array_device_type getMyGlobalIndicesDevice() const
Return a view of the global indices owned by this process on the Map's device.
global_ordinal_type getMinGlobalIndex() const
The minimum global index owned by the calling process.
local_ordinal_type getLocalElement(global_ordinal_type globalIndex) const
The local index corresponding to the given global index.
Teuchos::RCP< const Map< local_ordinal_type, global_ordinal_type, Node > > replaceCommWithSubset(const Teuchos::RCP< const Teuchos::Comm< int > > &newComm) const
Replace this Map's communicator with a subset communicator.
::Tpetra::Details::LocalMap< local_ordinal_type, global_ordinal_type, device_type > local_map_type
Type of the "local" Map.
global_ordinal_type getMaxGlobalIndex() const
The maximum global index owned by the calling process.
Map(const Map< local_ordinal_type, global_ordinal_type, node_type > &)=default
Copy constructor (shallow copy).
Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > createLocalMapWithNode(const size_t numElements, const Teuchos::RCP< const Teuchos::Comm< int > > &comm)
Nonmember constructor for a locally replicated Map with a specified Kokkos Node.
global_size_t getGlobalNumElements() const
The number of elements in this Map.
bool isContiguous() const
True if this Map is distributed contiguously, else false.
Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > createNonContigMapWithNode(const Teuchos::ArrayView< const GlobalOrdinal > &elementList, const Teuchos::RCP< const Teuchos::Comm< int > > &comm)
Nonmember constructor for a noncontiguous Map with a user-specified, possibly nondefault Kokkos Node ...
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel=Teuchos::Describable::verbLevel_default) const
Describe this object in a human-readable way to the given output stream.
bool isNodeGlobalElement(global_ordinal_type globalIndex) const
Whether the given global index is owned by this Map on the calling process.
Kokkos::View< const global_ordinal_type *, Kokkos::LayoutLeft, Kokkos::HostSpace > lgMapHost_
Host View of lgMap_.
bool isSameAs(const Map< local_ordinal_type, global_ordinal_type, Node > &map) const
True if and only if map is identical to this Map.
local_ordinal_type getMinLocalIndex() const
The minimum local index.
size_t getLocalNumElements() const
The number of elements belonging to the calling process.
global_to_local_table_type glMap_
A mapping from global IDs to local IDs.
local_map_type getLocalMap() const
Get the LocalMap for Kokkos-Kernels.
global_indices_array_type getMyGlobalIndices() const
Return a view of the global indices owned by this process.
typename device_type::memory_space memory_space
The Kokkos memory space.
local_ordinal_type getMaxLocalIndex() const
The maximum local index on the calling process.
Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > createOneToOne(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &M, const ::Tpetra::Details::TieBreak< LocalOrdinal, GlobalOrdinal > &tie_break)
Creates a one-to-one version of the given Map where each GID lives on only one process....
void computeGlobalConstants() const
Compute global constants for the map. This method needs to be called collectively over all processes ...
Teuchos::RCP< Directory< local_ordinal_type, global_ordinal_type, node_type > > directory_
Object that can find the process rank and local index for any given global index.
Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > createContigMapWithNode(const global_size_t numElements, const size_t localNumElements, const Teuchos::RCP< const Teuchos::Comm< int > > &comm)
Nonmember constructor for a (potentially) nonuniformly distributed, contiguous Map for a user-specifi...
typename Node::device_type device_type
This class' Kokkos::Device specialization.
Namespace Tpetra contains the class and methods constituting the Tpetra library.
LookupStatus
Return status of Map remote index lookup (getRemoteIndexList()).
size_t global_size_t
Global size_t object.
LocalGlobal
Enum for local versus global allocation of Map entries.