10 #ifndef TPETRA_MAP_DECL_HPP
11 #define TPETRA_MAP_DECL_HPP
17 #include "Tpetra_ConfigDefs.hpp"
22 #include "Tpetra_KokkosCompat_DefaultNode.hpp"
23 #include "Kokkos_DualView.hpp"
24 #include "Teuchos_Array.hpp"
25 #include "Teuchos_Comm.hpp"
26 #include "Teuchos_Describable.hpp"
194 template <
class LocalOrdinal,
197 class Map :
public Teuchos::Describable {
297 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm,
336 const size_t numLocalElements,
338 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm);
381 const Kokkos::View<const global_ordinal_type*, device_type>& indexList,
383 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm);
430 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm);
474 const Teuchos::ArrayView<const global_ordinal_type>& indexList,
476 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm);
534 return numGlobalElements_;
543 return numLocalElements_;
576 return Tpetra::Details::OrdinalTraits<local_ordinal_type>::invalid();
679 const Teuchos::ArrayView<int>& nodeIDList,
680 const Teuchos::ArrayView<local_ordinal_type>& LIDList)
const;
707 const Teuchos::ArrayView<int>& nodeIDList)
const;
724 global_indices_array_type;
728 global_indices_array_device_type;
916 Teuchos::RCP<const Teuchos::Comm<int>>
getComm()
const;
947 describe(Teuchos::FancyOStream& out,
948 const Teuchos::EVerbosityLevel verbLevel =
949 Teuchos::Describable::verbLevel_default)
const;
1002 Teuchos::RCP<const Map<local_ordinal_type, global_ordinal_type, Node>>
1032 Teuchos::RCP<const Map<local_ordinal_type, global_ordinal_type, Node>>
1042 localDescribeToString(
const Teuchos::EVerbosityLevel vl)
const;
1051 void setupDirectory()
const;
1067 bool checkIsDist()
const;
1077 initialNonuniformDebugCheck(
1078 const char errorMessagePrefix[],
1080 const size_t numLocalElements,
1082 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm)
const;
1085 initWithNonownedHostIndexList(
1086 const char errorMessagePrefix[],
1091 Kokkos::MemoryUnmanaged>& entryList,
1093 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm);
1104 Teuchos::RCP<const Teuchos::Comm<int>> comm_;
1114 size_t numLocalElements_;
1224 global_to_local_table_type;
1238 global_to_local_table_type glMap_;
1241 typedef ::Tpetra::Details::FixedHashTable<
1243 global_to_local_table_host_type;
1250 mutable global_to_local_table_host_type glMapHost_;
1288 mutable Teuchos::RCP<
1307 template <
class LocalOrdinal,
class GlobalOrdinal>
1308 Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal>>
1310 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm);
1326 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
1327 Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>
1329 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm);
1338 template <
class LocalOrdinal,
class GlobalOrdinal>
1339 Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal>>
1341 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm);
1349 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
1350 Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>
1352 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm);
1360 template <
class LocalOrdinal,
class GlobalOrdinal>
1361 Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal>>
1363 const size_t localNumElements,
1364 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm);
1374 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
1375 Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>
1377 const size_t localNumElements,
1378 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm);
1386 template <
class LocalOrdinal,
class GlobalOrdinal>
1387 Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal>>
1389 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm);
1398 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
1399 Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>
1401 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm);
1415 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
1416 Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>
1417 createOneToOne(
const Teuchos::RCP<
const Map<LocalOrdinal, GlobalOrdinal, Node>>& M);
1424 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
1425 Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>
1426 createOneToOne(
const Teuchos::RCP<
const Map<LocalOrdinal, GlobalOrdinal, Node>>& M,
1427 const ::Tpetra::Details::TieBreak<LocalOrdinal, GlobalOrdinal>& tie_break);
1431 #include "Tpetra_Directory_decl.hpp"
1435 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
1441 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
1445 #endif // TPETRA_MAP_DECL_HPP
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 getMaxGlobalIndex() const
The maximum global index owned by the calling process.
LO local_ordinal_type
The type of local indices.
virtual ~Map()
Destructor (virtual for memory safety of derived classes).
GO global_ordinal_type
The type of global indices.
bool isSameAs(const Map< local_ordinal_type, global_ordinal_type, Node > &map) const
True if and only if map is identical to this Map.
global_indices_array_type getMyGlobalIndices() const
Return a view of the global indices owned by this process.
bool isContiguous() const
True if this Map is distributed contiguously, else false.
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.
LookupStatus
Return status of Map remote index lookup (getRemoteIndexList()).
size_t getLocalNumElements() const
The number of elements belonging to the calling process.
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 isUniform() const
Whether the range of global indices is uniform.
Declaration and definition of the Tpetra::Map class, an implementation detail of Tpetra::Map.
global_indices_array_device_type getMyGlobalIndicesDevice() const
Return a view of the global indices owned by this process on the Map's device.
bool isDistributed() const
Whether this Map is globally distributed or locally replicated.
Teuchos::RCP< const Map< local_ordinal_type, global_ordinal_type, Node > > removeEmptyProcesses() const
Advanced methods.
Teuchos::RCP< const Teuchos::Comm< int > > getComm() const
Accessors for the Teuchos::Comm and Kokkos Node objects.
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.
typename device_type::memory_space memory_space
The Kokkos memory space.
local_ordinal_type getMinLocalIndex() const
The minimum local index.
"Local" part of Map suitable for Kokkos kernels.
void lazyPushToHost() const
Push the device data to host, if needed.
Teuchos::ArrayView< const global_ordinal_type > getLocalElementList() const
Return a NONOWNING view of the global indices owned by this process.
size_t global_size_t
Global size_t object.
bool isCompatible(const Map< local_ordinal_type, global_ordinal_type, Node > &map) const
True if and only if map is compatible with this Map.
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...
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.
global_ordinal_type getIndexBase() const
The index base for this Map.
global_ordinal_type getGlobalElement(local_ordinal_type localIndex) const
The global index corresponding to the given local index.
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.
Forward declaration of Tpetra::Directory.
local_ordinal_type getMaxLocalIndex() const
The maximum local index on the calling process.
bool isNodeLocalElement(local_ordinal_type localIndex) const
Whether the given local index is valid for this Map on the calling process.
bool isNodeGlobalElement(global_ordinal_type globalIndex) const
Whether the given global index is owned by this Map on the calling process.
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, possibly nondefault Kokkos Node type.
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...
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.
local_map_type getLocalMap() const
Get the LocalMap for Kokkos-Kernels.
global_ordinal_type getMinGlobalIndex() const
The minimum global index owned by the calling process.
typename device_type::execution_space execution_space
The Kokkos execution space.
A parallel distribution of indices over processes.
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 ...
global_ordinal_type getMaxAllGlobalIndex() const
The maximum global index over all processes in the communicator.
local_ordinal_type getLocalElement(global_ordinal_type globalIndex) const
The local index corresponding to the given global index.
Implement mapping from global ID to process ID and local ID.
bool isOneToOne() const
Whether the Map is one to one.
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...
bool locallySameAs(const Map< local_ordinal_type, global_ordinal_type, node_type > &map) const
Is this Map locally the same as the input Map?
Map & operator=(const Map< local_ordinal_type, global_ordinal_type, node_type > &)=default
Copy assigment (shallow copy).
typename node_type::device_type device_type
This class' Kokkos::Device specialization.
LocalGlobal
Enum for local versus global allocation of Map entries.
::Tpetra::Details::LocalMap< local_ordinal_type, global_ordinal_type, device_type > local_map_type
Type of the "local" Map.
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.
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...
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.
node_type node_type
Legacy typedef that will go away at some point.
global_ordinal_type getMinAllGlobalIndex() const
The minimum global index over all processes in the communicator.
Forward declaration of Tpetra::Map.
global_size_t getGlobalNumElements() const
The number of elements in this Map.
Forward declaration for Tpetra::TieBreak.
std::string description() const
Implementation of Teuchos::Describable.
Map()
Default constructor (that does nothing).