42 #ifndef __Tpetra_DirectoryImpl_decl_hpp 43 #define __Tpetra_DirectoryImpl_decl_hpp 48 #include <Tpetra_ConfigDefs.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> 72 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
class Map;
76 template <
class LocalOrdinal,
class GlobalOrdinal>
class TieBreak;
85 template<
class LocalOrdinal,
class GlobalOrdinal,
class NodeType>
88 typedef LocalOrdinal local_ordinal_type;
89 typedef GlobalOrdinal global_ordinal_type;
90 typedef NodeType node_type;
91 typedef ::Tpetra::Map<LocalOrdinal, GlobalOrdinal, NodeType>
map_type;
136 const Teuchos::ArrayView<const GlobalOrdinal> &globalIDs,
137 const Teuchos::ArrayView<int> &nodeIDs,
138 const Teuchos::ArrayView<LocalOrdinal> &localIDs,
139 const bool computeLIDs)
const;
147 virtual bool isOneToOne (
const Teuchos::Comm<int>& comm)
const = 0;
153 const Teuchos::ArrayView<const GlobalOrdinal> &globalIDs,
154 const Teuchos::ArrayView<int> &nodeIDs,
155 const Teuchos::ArrayView<LocalOrdinal> &localIDs,
156 const bool computeLIDs)
const = 0;
161 template<
class LocalOrdinal,
class GlobalOrdinal,
class NodeType>
163 public Directory<LocalOrdinal, GlobalOrdinal, NodeType> {
174 virtual bool isOneToOne (
const Teuchos::Comm<int>& comm)
const;
176 template <
class Node2>
178 clone (const ::Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node2>& cloneMap)
const 181 return new Dir2 (cloneMap);
194 const Teuchos::ArrayView<const GlobalOrdinal> &globalIDs,
195 const Teuchos::ArrayView<int> &nodeIDs,
196 const Teuchos::ArrayView<LocalOrdinal> &localIDs,
197 const bool computeLIDs)
const;
213 template<
class LocalOrdinal,
class GlobalOrdinal,
class NodeType>
215 public Directory<LocalOrdinal, GlobalOrdinal, NodeType> {
234 template <
class Node2>
236 clone (const ::Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node2>& cloneMap)
const 239 return new Dir2 (cloneMap);
253 const Teuchos::ArrayView<const GlobalOrdinal> &globalIDs,
254 const Teuchos::ArrayView<int> &nodeIDs,
255 const Teuchos::ArrayView<LocalOrdinal> &localIDs,
256 const bool computeLIDs)
const;
262 template<
class LocalOrdinal,
class GlobalOrdinal,
class NodeType>
264 public Directory<LocalOrdinal, GlobalOrdinal, NodeType> {
282 template <
class Node2>
284 clone (const ::Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node2>& cloneMap)
const 287 Dir2* dir =
new Dir2 (cloneMap);
289 dir->allMinGIDs_ = allMinGIDs_;
290 }
catch (std::exception& e) {
308 const Teuchos::ArrayView<const GlobalOrdinal> &globalIDs,
309 const Teuchos::ArrayView<int> &nodeIDs,
310 const Teuchos::ArrayView<LocalOrdinal> &localIDs,
311 const bool computeLIDs)
const;
337 Teuchos::ArrayRCP<GlobalOrdinal> allMinGIDs_;
342 template<
class LocalOrdinal,
class GlobalOrdinal,
class NodeType>
344 public Directory<LocalOrdinal, GlobalOrdinal, NodeType> {
362 virtual bool isOneToOne (
const Teuchos::Comm<int>& comm)
const;
364 template <
class Node2>
366 clone (const ::Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node2>& cloneMap)
const 370 typedef ::Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node2> output_map_type;
371 Dir2* dir =
new Dir2 (cloneMap);
376 RCP<const output_map_type> outDirMap;
378 outDirMap = directoryMap_->template clone<Node2> (cloneMap.getNode ());
381 outDirMap = Teuchos::null;
385 dir->directoryMap_ = outDirMap;
388 dir->lidToPidTable_ = lidToPidTable_;
389 dir->lidToLidTable_ = lidToLidTable_;
390 dir->useHashTables_ = useHashTables_;
404 const Teuchos::ArrayView<const GlobalOrdinal> &globalIDs,
405 const Teuchos::ArrayView<int> &nodeIDs,
406 const Teuchos::ArrayView<LocalOrdinal> &localIDs,
407 const bool computeLIDs)
const;
417 Teuchos::Ptr<const tie_break_type> tie_break);
431 bool isLocallyOneToOne ()
const {
432 return locallyOneToOne_;
452 Teuchos::RCP<const map_type> directoryMap_;
462 Teuchos::ArrayRCP<int> PIDs_;
469 Teuchos::ArrayRCP<LocalOrdinal> LIDs_;
481 Kokkos::Device<
typename NodeType::execution_space,
482 typename NodeType::memory_space> > > lidToPidTable_;
490 Kokkos::Device<
typename NodeType::execution_space,
491 typename NodeType::memory_space> > > lidToLidTable_;
500 mutable enum EOneToOneResult {
501 ONE_TO_ONE_NOT_CALLED_YET,
509 bool locallyOneToOne_;
523 #endif // __Tpetra_DirectoryImpl_decl_hpp Interface for breaking ties in ownership.
Namespace Tpetra contains the class and methods constituting the Tpetra library.
std::string description() const
A one-line human-readable description of this object.
Implementation of Directory for a locally replicated Map.
Interface for breaking ties in ownership.
LookupStatus
Return status of Map remote index lookup (getRemoteIndexList()).
Implementation of Directory for a distributed noncontiguous Map.
Implementation of Directory for a distributed contiguous Map.
ReplicatedDirectory()
Constructor (that takes no arguments).
Implementation details of Tpetra.
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.
std::string description() const
A one-line human-readable description of this object.
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
Find process IDs and (optionally) local IDs for the given global IDs.
std::string description() const
A one-line human-readable description of this object.
virtual bool isOneToOne(const Teuchos::Comm< int > &) const
Whether the Directory's input Map is (globally) one to one.
Describes a parallel distribution of objects over processes.
Computes the local ID and process ID corresponding to given global IDs.
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
Find process IDs and (optionally) local IDs for the given global IDs.
virtual bool isOneToOne(const Teuchos::Comm< int > &comm) const
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
Find process IDs and (optionally) local IDs for the given global IDs.
virtual bool isOneToOne(const Teuchos::Comm< int > &comm) const
Whether the Directory's input Map is (globally) one to one.
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