42 #ifndef __Tpetra_DirectoryImpl_decl_hpp
43 #define __Tpetra_DirectoryImpl_decl_hpp
63 #ifndef HAVE_TPETRA_DIRECTORY_SPARSE_MAP_FIX
64 # define HAVE_TPETRA_DIRECTORY_SPARSE_MAP_FIX 1
65 #endif // HAVE_TPETRA_DIRECTORY_SPARSE_MAP_FIX
67 #include "Tpetra_Details_FixedHashTable_decl.hpp"
69 #ifndef DOXYGEN_SHOULD_SKIP_THIS
72 template<
class OrdinalType>
75 #endif // DOXYGEN_SHOULD_SKIP_THIS
86 template<
class LocalOrdinal,
class GlobalOrdinal,
class NodeType>
89 typedef LocalOrdinal local_ordinal_type;
90 typedef GlobalOrdinal global_ordinal_type;
91 typedef NodeType node_type;
92 typedef ::Tpetra::Map<LocalOrdinal, GlobalOrdinal, NodeType>
map_type;
139 const Teuchos::ArrayView<const GlobalOrdinal> &globalIDs,
140 const Teuchos::ArrayView<int> &nodeIDs,
141 const Teuchos::ArrayView<LocalOrdinal> &localIDs,
142 const bool computeLIDs)
const;
150 virtual bool isOneToOne (
const Teuchos::Comm<int>& comm)
const = 0;
156 const Teuchos::ArrayView<const GlobalOrdinal> &globalIDs,
157 const Teuchos::ArrayView<int> &nodeIDs,
158 const Teuchos::ArrayView<LocalOrdinal> &localIDs,
159 const bool computeLIDs)
const = 0;
164 template<
class LocalOrdinal,
class GlobalOrdinal,
class NodeType>
166 public Directory<LocalOrdinal, GlobalOrdinal, NodeType> {
179 bool isOneToOne (
const Teuchos::Comm<int>& comm)
const override;
181 #ifdef TPETRA_ENABLE_DEPRECATED_CODE
182 template <
class Node2>
184 clone (const ::Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node2>& cloneMap)
const
187 return new Dir2 (cloneMap);
201 const Teuchos::ArrayView<const GlobalOrdinal> &globalIDs,
202 const Teuchos::ArrayView<int> &nodeIDs,
203 const Teuchos::ArrayView<LocalOrdinal> &localIDs,
204 const bool computeLIDs)
const override;
208 const int numProcs_ = 0;
220 template<
class LocalOrdinal,
class GlobalOrdinal,
class NodeType>
222 public Directory<LocalOrdinal, GlobalOrdinal, NodeType> {
239 #ifdef TPETRA_ENABLE_DEPRECATED_CODE
240 template <
class Node2>
242 clone (const ::Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node2>& cloneMap)
const
245 return new Dir2 (cloneMap);
260 const Teuchos::ArrayView<const GlobalOrdinal> &globalIDs,
261 const Teuchos::ArrayView<int> &nodeIDs,
262 const Teuchos::ArrayView<LocalOrdinal> &localIDs,
263 const bool computeLIDs)
const override;
269 template<
class LocalOrdinal,
class GlobalOrdinal,
class NodeType>
271 public Directory<LocalOrdinal, GlobalOrdinal, NodeType> {
287 #ifdef TPETRA_ENABLE_DEPRECATED_CODE
288 template <
class Node2>
290 clone (const ::Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node2>& cloneMap)
const
293 Dir2* dir =
new Dir2 (cloneMap);
295 dir->allMinGIDs_ = allMinGIDs_;
296 }
catch (std::exception& e) {
315 const Teuchos::ArrayView<const GlobalOrdinal> &globalIDs,
316 const Teuchos::ArrayView<int> &nodeIDs,
317 const Teuchos::ArrayView<LocalOrdinal> &localIDs,
318 const bool computeLIDs)
const override;
344 Teuchos::ArrayRCP<GlobalOrdinal> allMinGIDs_;
349 template<
class LocalOrdinal,
class GlobalOrdinal,
class NodeType>
351 public Directory<LocalOrdinal, GlobalOrdinal, NodeType> {
353 template <
class LO,
class GO,
class N>
367 bool isOneToOne (
const Teuchos::Comm<int>& comm)
const override;
369 #ifdef TPETRA_ENABLE_DEPRECATED_CODE
370 template <
class Node2>
372 clone (const ::Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node2>& cloneMap)
const
376 typedef ::Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node2> output_map_type;
377 Dir2* dir =
new Dir2 (cloneMap);
382 RCP<const output_map_type> outDirMap;
384 outDirMap = directoryMap_->template clone<Node2> (cloneMap.getNode ());
387 outDirMap = Teuchos::null;
391 dir->directoryMap_ = outDirMap;
394 dir->lidToPidTable_ = lidToPidTable_;
395 dir->lidToLidTable_ = lidToLidTable_;
396 dir->useHashTables_ = useHashTables_;
411 const Teuchos::ArrayView<const GlobalOrdinal> &globalIDs,
412 const Teuchos::ArrayView<int> &nodeIDs,
413 const Teuchos::ArrayView<LocalOrdinal> &localIDs,
414 const bool computeLIDs)
const override;
423 initialize (
const map_type& map,
424 Teuchos::Ptr<const tie_break_type> tie_break);
438 bool isLocallyOneToOne ()
const {
439 return locallyOneToOne_;
459 Teuchos::RCP<const map_type> directoryMap_;
469 Teuchos::ArrayRCP<int> PIDs_;
476 Teuchos::ArrayRCP<LocalOrdinal> LIDs_;
488 Kokkos::Device<
typename NodeType::execution_space,
489 typename NodeType::memory_space> > > lidToPidTable_;
497 Kokkos::Device<
typename NodeType::execution_space,
498 typename NodeType::memory_space> > > lidToLidTable_;
507 mutable enum EOneToOneResult {
508 ONE_TO_ONE_NOT_CALLED_YET,
516 bool locallyOneToOne_;
530 #endif // __Tpetra_DirectoryImpl_decl_hpp
Interface for breaking ties in ownership.
Implementation of Directory for a locally replicated Map.
Interface for breaking ties in ownership.
std::string description() const
A one-line human-readable description of this object.
LookupStatus
Return status of Map remote index lookup (getRemoteIndexList()).
Implementation of Directory for a distributed noncontiguous Map.
bool isOneToOne(const Teuchos::Comm< int > &) const override
Whether the Directory's input Map is (globally) one to one.
Directory()=default
Constructor.
bool isOneToOne(const Teuchos::Comm< int > &comm) const override
Whether the Directory's input Map is (globally) one to one.
Implementation of Directory for a distributed contiguous Map.
LookupStatus getEntriesImpl(const map_type &map, const Teuchos::ArrayView< const GlobalOrdinal > &globalIDs, const Teuchos::ArrayView< int > &nodeIDs, const Teuchos::ArrayView< LocalOrdinal > &localIDs, const bool computeLIDs) const override
Find process IDs and (optionally) local IDs for the given global IDs.
bool isOneToOne(const Teuchos::Comm< int > &comm) const override
Whether the Directory's input Map is (globally) one to one.
virtual LookupStatus getEntriesImpl(const map_type &map, const Teuchos::ArrayView< const GlobalOrdinal > &globalIDs, const Teuchos::ArrayView< int > &nodeIDs, const Teuchos::ArrayView< LocalOrdinal > &localIDs, const bool computeLIDs) const =0
Actually do the work of getEntries(), with no input validation.
LookupStatus getEntriesImpl(const map_type &map, const Teuchos::ArrayView< const GlobalOrdinal > &globalIDs, const Teuchos::ArrayView< int > &nodeIDs, const Teuchos::ArrayView< LocalOrdinal > &localIDs, const bool computeLIDs) const override
Find process IDs and (optionally) local IDs for the given global IDs.
LookupStatus getEntries(const map_type &map, const Teuchos::ArrayView< const GlobalOrdinal > &globalIDs, const Teuchos::ArrayView< int > &nodeIDs, const Teuchos::ArrayView< LocalOrdinal > &localIDs, const bool computeLIDs) const
std::string description() const
A one-line human-readable description of this object.
A parallel distribution of indices over processes.
ReplicatedDirectory()=default
Constructor (that takes no arguments).
Computes the local ID and process ID corresponding to given global IDs.
std::string description() const
A one-line human-readable description of this object.
virtual bool isOneToOne(const Teuchos::Comm< int > &comm) const =0
Whether the Directory's input Map is (globally) one to one.
LookupStatus getEntriesImpl(const map_type &map, const Teuchos::ArrayView< const GlobalOrdinal > &globalIDs, const Teuchos::ArrayView< int > &nodeIDs, const Teuchos::ArrayView< LocalOrdinal > &localIDs, const bool computeLIDs) const override
Find process IDs and (optionally) local IDs for the given global IDs.
Forward declaration of Tpetra::Map.