42 #ifndef TPETRA_MAP_DECL_HPP 43 #define TPETRA_MAP_DECL_HPP 49 #include "Tpetra_ConfigDefs.hpp" 50 #include "Kokkos_DefaultNode.hpp" 51 #include "Kokkos_DualView.hpp" 52 #include "Teuchos_Describable.hpp" 53 #include "Tpetra_Details_FixedHashTable_decl.hpp" 66 #ifndef HAVE_TPETRA_FIXED_HASH_TABLE 67 # define HAVE_TPETRA_FIXED_HASH_TABLE 1 68 #endif // HAVE_TPETRA_FIXED_HASH_TABLE 72 #ifndef DOXYGEN_SHOULD_SKIP_THIS 74 template <
class LO,
class GO,
class N>
class Directory;
75 #endif // DOXYGEN_SHOULD_SKIP_THIS 79 #ifndef DOXYGEN_SHOULD_SKIP_THIS 81 template <
class LO,
class GO>
class TieBreak;
82 #endif // DOXYGEN_SHOULD_SKIP_THIS 86 template<
class OutMapType,
class InMapType>
88 typedef typename OutMapType::node_type out_node_type;
89 typedef typename InMapType::node_type in_node_type;
92 clone (
const InMapType& mapIn,
93 const Teuchos::RCP<out_node_type>& node2);
98 Teuchos::RCP<Node> defaultArgNode() {
104 return KokkosClassic::Details::getNode<Node> ();
257 class GlobalOrdinal = Details::DefaultTypes::global_ordinal_type,
259 class Map :
public Teuchos::Describable {
317 GlobalOrdinal indexBase,
318 const Teuchos::RCP<
const Teuchos::Comm<int> > &comm,
320 const Teuchos::RCP<Node> &node = defaultArgNode<Node>());
362 size_t numLocalElements,
363 GlobalOrdinal indexBase,
364 const Teuchos::RCP<
const Teuchos::Comm<int> > &comm,
365 const Teuchos::RCP<Node> &node = defaultArgNode<Node>());
402 const Teuchos::ArrayView<const GlobalOrdinal> &elementList,
403 GlobalOrdinal indexBase,
404 const Teuchos::RCP<
const Teuchos::Comm<int> > &comm,
405 const Teuchos::RCP<Node> &node = defaultArgNode<Node>());
431 bool isOneToOne ()
const;
439 return numGlobalElements_;
448 return numLocalElements_;
466 return static_cast<LocalOrdinal
> (0);
480 if (this->getNodeNumElements () == 0) {
483 return static_cast<LocalOrdinal
> (this->getNodeNumElements () - 1);
535 LocalOrdinal getLocalElement (GlobalOrdinal globalIndex)
const;
545 GlobalOrdinal getGlobalElement (LocalOrdinal localIndex)
const;
577 getRemoteIndexList (
const Teuchos::ArrayView<const GlobalOrdinal>& GIDList,
578 const Teuchos::ArrayView< int>& nodeIDList,
579 const Teuchos::ArrayView< LocalOrdinal>& LIDList)
const;
605 getRemoteIndexList (
const Teuchos::ArrayView<const GlobalOrdinal> & GIDList,
606 const Teuchos::ArrayView< int> & nodeIDList)
const;
614 Teuchos::ArrayView<const GlobalOrdinal> getNodeElementList()
const;
626 bool isNodeLocalElement (LocalOrdinal localIndex)
const;
634 bool isNodeGlobalElement (GlobalOrdinal globalIndex)
const;
642 bool isUniform ()
const;
655 bool isContiguous ()
const;
677 bool isDistributed ()
const;
748 Teuchos::RCP<const Teuchos::Comm<int> > getComm ()
const;
751 Teuchos::RCP<Node> getNode ()
const;
758 std::string description ()
const;
762 describe (Teuchos::FancyOStream &out,
763 const Teuchos::EVerbosityLevel verbLevel=Teuchos::Describable::verbLevel_default)
const;
770 template <
class NodeOut>
771 Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, NodeOut> >
772 clone (
const RCP<NodeOut>& nodeOut)
const;
821 RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >
822 removeEmptyProcesses ()
const;
851 RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> >
852 replaceCommWithSubset (
const Teuchos::RCP<
const Teuchos::Comm<int> >& newComm)
const;
859 template <
class LO,
class GO,
class N>
friend class Map;
862 template<
class OutMapType,
class InMapType>
872 void setupDirectory ()
const;
888 bool checkIsDist()
const;
891 Teuchos::RCP<const Teuchos::Comm<int> > comm_;
894 Teuchos::RCP<Node> node_;
897 GlobalOrdinal indexBase_;
903 size_t numLocalElements_;
906 GlobalOrdinal minMyGID_;
909 GlobalOrdinal maxMyGID_;
912 GlobalOrdinal minAllGID_;
915 GlobalOrdinal maxAllGID_;
923 GlobalOrdinal firstContiguousGID_;
938 GlobalOrdinal lastContiguousGID_;
959 typedef typename Kokkos::Device<
typename Node::execution_space,
960 typename Node::memory_space> device_type;
978 mutable Kokkos::DualView<GlobalOrdinal*, device_type> lgMap_;
996 global_to_local_table_type glMap_;
1034 mutable Teuchos::RCP<Directory<LocalOrdinal,GlobalOrdinal,Node> > directory_;
1051 template <
class LocalOrdinal,
class GlobalOrdinal>
1052 Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal> >
1053 createLocalMap (
size_t numElements,
const Teuchos::RCP<
const Teuchos::Comm<int> >& comm);
1071 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
1072 Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >
1074 const Teuchos::RCP<
const Teuchos::Comm<int> >& comm,
1075 const Teuchos::RCP<Node>& node = defaultArgNode<Node> ());
1084 template <
class LocalOrdinal,
class GlobalOrdinal>
1085 Teuchos::RCP< const Map<LocalOrdinal,GlobalOrdinal> >
1087 const Teuchos::RCP<
const Teuchos::Comm<int> >& comm);
1095 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
1096 Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >
1098 const Teuchos::RCP<
const Teuchos::Comm<int> >& comm,
1099 const Teuchos::RCP<Node>& node =
1100 defaultArgNode<Node> ());
1110 template <
class LocalOrdinal,
class GlobalOrdinal>
1111 Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal> >
1113 size_t localNumElements,
1114 const Teuchos::RCP<
const Teuchos::Comm<int> > &comm);
1122 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
1123 Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> >
1125 size_t localNumElements,
1126 const Teuchos::RCP<
const Teuchos::Comm<int> >& comm,
1127 const Teuchos::RCP<Node>& node =
1128 defaultArgNode<Node> ());
1138 template <
class LocalOrdinal,
class GlobalOrdinal>
1139 Teuchos::RCP<const Map<LocalOrdinal,GlobalOrdinal> >
1141 const RCP<
const Teuchos::Comm<int> > &comm);
1149 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
1150 Teuchos::RCP< const Map<LocalOrdinal,GlobalOrdinal,Node> >
1152 const RCP<
const Teuchos::Comm<int> > &comm,
1153 const RCP<Node> &node);
1161 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
1162 Teuchos::RCP< const Map<LocalOrdinal,GlobalOrdinal,Node> >
1165 const Teuchos::RCP<
const Teuchos::Comm<int> > &comm,
1166 const Teuchos::RCP<Node> &node);
1174 template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
1175 Teuchos::RCP< const Map<LocalOrdinal,GlobalOrdinal,Node> >
1185 template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
1186 Teuchos::RCP< const Map<LocalOrdinal,GlobalOrdinal,Node> >
1192 #include "Tpetra_Directory_decl.hpp" 1197 template<
class OutMapType,
class InMapType>
1199 MapCloner<OutMapType, InMapType>::
1200 clone (
const InMapType& mapIn,
1201 const Teuchos::RCP<out_node_type>& nodeOut)
1203 typedef ::Tpetra::Directory<
typename OutMapType::local_ordinal_type,
1204 typename OutMapType::global_ordinal_type,
1205 typename OutMapType::node_type> out_dir_type;
1206 typedef typename OutMapType::global_to_local_table_type out_table_type;
1213 mapOut.comm_ = mapIn.comm_;
1214 mapOut.indexBase_ = mapIn.indexBase_;
1215 mapOut.numGlobalElements_ = mapIn.numGlobalElements_;
1216 mapOut.numLocalElements_ = mapIn.numLocalElements_;
1217 mapOut.minMyGID_ = mapIn.minMyGID_;
1218 mapOut.maxMyGID_ = mapIn.maxMyGID_;
1219 mapOut.minAllGID_ = mapIn.minAllGID_;
1220 mapOut.maxAllGID_ = mapIn.maxAllGID_;
1221 mapOut.firstContiguousGID_= mapIn.firstContiguousGID_;
1222 mapOut.lastContiguousGID_ = mapIn.lastContiguousGID_;
1223 mapOut.uniform_ = mapIn.uniform_;
1224 mapOut.contiguous_ = mapIn.contiguous_;
1225 mapOut.distributed_ = mapIn.distributed_;
1226 mapOut.lgMap_ = mapIn.lgMap_;
1231 mapOut.glMap_ = out_table_type (mapIn.glMap_);
1233 mapOut.node_ = nodeOut;
1238 mapOut.directory_ = Teuchos::rcp (
new out_dir_type ());
1245 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
1246 template <
class NodeOut>
1247 RCP<const Map<LocalOrdinal, GlobalOrdinal, NodeOut> >
1249 clone (
const Teuchos::RCP<NodeOut>& nodeOut)
const 1255 return Teuchos::rcp (
new out_map_type (cloner_type::clone (*
this, nodeOut)));
1262 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
1269 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
1275 #endif // TPETRA_MAP_DECL_HPP Interface for breaking ties in ownership.
Namespace Tpetra contains the class and methods constituting the Tpetra library.
Traits class for "invalid" (flag) values of integer types that Tpetra uses as local ordinals or globa...
GlobalOrdinal getMinGlobalIndex() const
The minimum global index owned by the calling process.
Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, NodeOut > > clone(const RCP< NodeOut > &nodeOut) const
Advanced methods.
GlobalOrdinal global_ordinal_type
The type of global indices.
Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal > > createNonContigMap(const ArrayView< const GlobalOrdinal > &elementList, const RCP< const Teuchos::Comm< int > > &comm)
Non-member constructor for a non-contiguous Map with the default Kokkos Node.
KokkosClassic::DefaultNode::DefaultNodeType node_type
Default value of Node template parameter.
LookupStatus
Return status of Map remote index lookup (getRemoteIndexList()).
Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > createLocalMapWithNode(size_t numElements, const Teuchos::RCP< const Teuchos::Comm< int > > &comm, const Teuchos::RCP< Node > &node=defaultArgNode< Node >())
Nonmember constructor for a locally replicated Map with a specified Kokkos Node.
Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > createContigMapWithNode(global_size_t numElements, size_t localNumElements, const Teuchos::RCP< const Teuchos::Comm< int > > &comm, const Teuchos::RCP< Node > &node=defaultArgNode< Node >())
Non-member constructor for a (potentially) non-uniformly distributed, contiguous Map with a user-spec...
GlobalOrdinal getIndexBase() const
The index base for this Map.
LocalOrdinal getMinLocalIndex() const
The minimum local index.
GlobalOrdinal getMinAllGlobalIndex() const
The minimum global index over all processes in the communicator.
int local_ordinal_type
Default value of LocalOrdinal template parameter.
Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal > > createLocalMap(size_t numElements, const Teuchos::RCP< const Teuchos::Comm< int > > &comm)
Nonmember constructor for a locally replicated Map with the default Kokkos Node.
Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > createWeightedContigMapWithNode(int thisNodeWeight, global_size_t numElements, const Teuchos::RCP< const Teuchos::Comm< int > > &comm, const Teuchos::RCP< Node > &node)
Non-member constructor for a contiguous Map with user-defined weights and a user-specified Kokkos Nod...
Implementation details of Tpetra.
GlobalOrdinal getMaxAllGlobalIndex() const
The maximum global index over all processes in the communicator.
size_t global_size_t
Global size_t object.
Traits class for "invalid" (flag) values of integer types that Tpetra uses as local ordinals or globa...
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.
Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal > > createUniformContigMap(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, Node > > createOneToOne(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &M)
Creates a one-to-one version of the given Map where each GID is owned by only one process...
GlobalOrdinal getMaxGlobalIndex() const
The maximum global index owned by the calling process.
Node node_type
The type of the Kokkos Node.
Implementation detail of Map::clone().
Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal > > createContigMap(global_size_t numElements, size_t localNumElements, const Teuchos::RCP< const Teuchos::Comm< int > > &comm)
Non-member constructor for a (potentially) non-uniformly distributed, contiguous Map with the default...
size_t getNodeNumElements() const
The number of elements belonging to the calling process.
Describes a parallel distribution of objects over processes.
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.
bool isSameAs(const Map< LocalOrdinal, GlobalOrdinal, Node > &map) const
True if and only if map is identical to this Map.
LocalOrdinal local_ordinal_type
The type of local indices.
Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > createNonContigMapWithNode(const ArrayView< const GlobalOrdinal > &elementList, const RCP< const Teuchos::Comm< int > > &comm, const RCP< Node > &node)
Non-member constructor for a non-contiguous Map with a user-specified Kokkos Node.
LocalGlobal
Enum for local versus global allocation of Map entries.
LocalOrdinal getMaxLocalIndex() const
The maximum local index on the calling process.
Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > createUniformContigMapWithNode(global_size_t numElements, const Teuchos::RCP< const Teuchos::Comm< int > > &comm, const Teuchos::RCP< Node > &node=defaultArgNode< Node >())
Non-member constructor for a uniformly distributed, contiguous Map with a user-specified Kokkos Node...
global_size_t getGlobalNumElements() const
The number of elements in this Map.