42 #ifndef __Tpetra_DirectoryImpl_decl_hpp 43 #define __Tpetra_DirectoryImpl_decl_hpp 45 #include <Tpetra_ConfigDefs.hpp> 60 #ifndef HAVE_TPETRA_DIRECTORY_SPARSE_MAP_FIX 61 # define HAVE_TPETRA_DIRECTORY_SPARSE_MAP_FIX 1 62 #endif // HAVE_TPETRA_DIRECTORY_SPARSE_MAP_FIX 64 #include <Tpetra_Details_FixedHashTable_decl.hpp> 69 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
class Map;
73 template <
class LocalOrdinal,
class GlobalOrdinal>
class TieBreak;
82 template<
class LocalOrdinal,
class GlobalOrdinal,
class NodeType>
85 typedef LocalOrdinal local_ordinal_type;
86 typedef GlobalOrdinal global_ordinal_type;
87 typedef NodeType node_type;
88 typedef ::Tpetra::Map<LocalOrdinal, GlobalOrdinal, NodeType>
map_type;
133 const Teuchos::ArrayView<const GlobalOrdinal> &globalIDs,
134 const Teuchos::ArrayView<int> &nodeIDs,
135 const Teuchos::ArrayView<LocalOrdinal> &localIDs,
136 const bool computeLIDs)
const;
144 virtual bool isOneToOne (
const Teuchos::Comm<int>& comm)
const = 0;
150 const Teuchos::ArrayView<const GlobalOrdinal> &globalIDs,
151 const Teuchos::ArrayView<int> &nodeIDs,
152 const Teuchos::ArrayView<LocalOrdinal> &localIDs,
153 const bool computeLIDs)
const = 0;
158 template<
class LocalOrdinal,
class GlobalOrdinal,
class NodeType>
160 public Directory<LocalOrdinal, GlobalOrdinal, NodeType> {
171 virtual bool isOneToOne (
const Teuchos::Comm<int>& comm)
const;
173 template <
class Node2>
175 clone (const ::Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node2>& cloneMap)
const 178 return new Dir2 (cloneMap);
185 std::string description ()
const;
191 const Teuchos::ArrayView<const GlobalOrdinal> &globalIDs,
192 const Teuchos::ArrayView<int> &nodeIDs,
193 const Teuchos::ArrayView<LocalOrdinal> &localIDs,
194 const bool computeLIDs)
const;
210 template<
class LocalOrdinal,
class GlobalOrdinal,
class NodeType>
212 public Directory<LocalOrdinal, GlobalOrdinal, NodeType> {
231 template <
class Node2>
233 clone (const ::Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node2>& cloneMap)
const 236 return new Dir2 (cloneMap);
243 std::string description ()
const;
250 const Teuchos::ArrayView<const GlobalOrdinal> &globalIDs,
251 const Teuchos::ArrayView<int> &nodeIDs,
252 const Teuchos::ArrayView<LocalOrdinal> &localIDs,
253 const bool computeLIDs)
const;
259 template<
class LocalOrdinal,
class GlobalOrdinal,
class NodeType>
261 public Directory<LocalOrdinal, GlobalOrdinal, NodeType> {
279 template <
class Node2>
281 clone (const ::Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node2>& cloneMap)
const 284 Dir2* dir =
new Dir2 (cloneMap);
286 dir->allMinGIDs_ = allMinGIDs_;
287 }
catch (std::exception& e) {
298 std::string description ()
const;
305 const Teuchos::ArrayView<const GlobalOrdinal> &globalIDs,
306 const Teuchos::ArrayView<int> &nodeIDs,
307 const Teuchos::ArrayView<LocalOrdinal> &localIDs,
308 const bool computeLIDs)
const;
334 Teuchos::ArrayRCP<GlobalOrdinal> allMinGIDs_;
339 template<
class LocalOrdinal,
class GlobalOrdinal,
class NodeType>
341 public Directory<LocalOrdinal, GlobalOrdinal, NodeType> {
357 const tie_break_type& tie_break);
359 virtual bool isOneToOne (
const Teuchos::Comm<int>& comm)
const;
361 template <
class Node2>
363 clone (const ::Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node2>& cloneMap)
const 366 typedef ::Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node2> output_map_type;
367 Dir2* dir =
new Dir2 (cloneMap);
372 RCP<const output_map_type> outDirMap;
374 outDirMap = directoryMap_->template clone<Node2> (cloneMap.getNode ());
377 outDirMap = Teuchos::null;
381 dir->directoryMap_ = outDirMap;
384 dir->lidToPidTable_ = lidToPidTable_;
385 dir->lidToLidTable_ = lidToLidTable_;
386 dir->useHashTables_ = useHashTables_;
394 std::string description ()
const;
400 const Teuchos::ArrayView<const GlobalOrdinal> &globalIDs,
401 const Teuchos::ArrayView<int> &nodeIDs,
402 const Teuchos::ArrayView<LocalOrdinal> &localIDs,
403 const bool computeLIDs)
const;
413 Teuchos::Ptr<const tie_break_type> tie_break);
427 bool isLocallyOneToOne ()
const {
428 return locallyOneToOne_;
448 Teuchos::RCP<const map_type> directoryMap_;
458 Teuchos::ArrayRCP<int> PIDs_;
465 Teuchos::ArrayRCP<LocalOrdinal> LIDs_;
477 Kokkos::Device<
typename NodeType::execution_space,
478 typename NodeType::memory_space> > > lidToPidTable_;
486 Kokkos::Device<
typename NodeType::execution_space,
487 typename NodeType::memory_space> > > lidToLidTable_;
496 mutable enum EOneToOneResult {
497 ONE_TO_ONE_NOT_CALLED_YET,
505 bool locallyOneToOne_;
519 #endif // __Tpetra_DirectoryImpl_decl_hpp Interface for breaking ties in ownership.
void initialize(int *argc, char ***argv)
Initialize Tpetra.
Namespace Tpetra contains the class and methods constituting the Tpetra library.
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.
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.
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
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.
virtual bool isOneToOne(const Teuchos::Comm< int > &) const
Whether the Directory's input Map is (globally) one to one.