42 #ifndef __Tpetra_DirectoryImpl_decl_hpp
43 #define __Tpetra_DirectoryImpl_decl_hpp
48 #include <Tpetra_ConfigDefs.hpp>
64 #ifndef HAVE_TPETRA_DIRECTORY_SPARSE_MAP_FIX
65 # define HAVE_TPETRA_DIRECTORY_SPARSE_MAP_FIX 1
66 #endif // HAVE_TPETRA_DIRECTORY_SPARSE_MAP_FIX
68 #include <Tpetra_Details_FixedHashTable_decl.hpp>
70 #ifndef DOXYGEN_SHOULD_SKIP_THIS
73 template<
class OrdinalType>
76 #endif // DOXYGEN_SHOULD_SKIP_THIS
87 template<
class LocalOrdinal,
class GlobalOrdinal,
class NodeType>
90 typedef LocalOrdinal local_ordinal_type;
91 typedef GlobalOrdinal global_ordinal_type;
92 typedef NodeType node_type;
93 typedef ::Tpetra::Map<LocalOrdinal, GlobalOrdinal, NodeType>
map_type;
138 const Teuchos::ArrayView<const GlobalOrdinal> &globalIDs,
139 const Teuchos::ArrayView<int> &nodeIDs,
140 const Teuchos::ArrayView<LocalOrdinal> &localIDs,
141 const bool computeLIDs)
const;
149 virtual bool isOneToOne (
const Teuchos::Comm<int>& comm)
const = 0;
155 const Teuchos::ArrayView<const GlobalOrdinal> &globalIDs,
156 const Teuchos::ArrayView<int> &nodeIDs,
157 const Teuchos::ArrayView<LocalOrdinal> &localIDs,
158 const bool computeLIDs)
const = 0;
163 template<
class LocalOrdinal,
class GlobalOrdinal,
class NodeType>
165 public Directory<LocalOrdinal, GlobalOrdinal, NodeType> {
176 virtual bool isOneToOne (
const Teuchos::Comm<int>& comm)
const;
178 template <
class Node2>
180 clone (const ::Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node2>& cloneMap)
const
183 return new Dir2 (cloneMap);
196 const Teuchos::ArrayView<const GlobalOrdinal> &globalIDs,
197 const Teuchos::ArrayView<int> &nodeIDs,
198 const Teuchos::ArrayView<LocalOrdinal> &localIDs,
199 const bool computeLIDs)
const;
215 template<
class LocalOrdinal,
class GlobalOrdinal,
class NodeType>
217 public Directory<LocalOrdinal, GlobalOrdinal, NodeType> {
236 template <
class Node2>
238 clone (const ::Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node2>& cloneMap)
const
241 return new Dir2 (cloneMap);
255 const Teuchos::ArrayView<const GlobalOrdinal> &globalIDs,
256 const Teuchos::ArrayView<int> &nodeIDs,
257 const Teuchos::ArrayView<LocalOrdinal> &localIDs,
258 const bool computeLIDs)
const;
264 template<
class LocalOrdinal,
class GlobalOrdinal,
class NodeType>
266 public Directory<LocalOrdinal, GlobalOrdinal, NodeType> {
284 template <
class Node2>
286 clone (const ::Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node2>& cloneMap)
const
289 Dir2* dir =
new Dir2 (cloneMap);
291 dir->allMinGIDs_ = allMinGIDs_;
292 }
catch (std::exception& e) {
310 const Teuchos::ArrayView<const GlobalOrdinal> &globalIDs,
311 const Teuchos::ArrayView<int> &nodeIDs,
312 const Teuchos::ArrayView<LocalOrdinal> &localIDs,
313 const bool computeLIDs)
const;
339 Teuchos::ArrayRCP<GlobalOrdinal> allMinGIDs_;
344 template<
class LocalOrdinal,
class GlobalOrdinal,
class NodeType>
346 public Directory<LocalOrdinal, GlobalOrdinal, NodeType> {
364 virtual bool isOneToOne (
const Teuchos::Comm<int>& comm)
const;
366 template <
class Node2>
368 clone (const ::Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node2>& cloneMap)
const
372 typedef ::Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node2> output_map_type;
373 Dir2* dir =
new Dir2 (cloneMap);
378 RCP<const output_map_type> outDirMap;
380 outDirMap = directoryMap_->template clone<Node2> (cloneMap.getNode ());
383 outDirMap = Teuchos::null;
387 dir->directoryMap_ = outDirMap;
390 dir->lidToPidTable_ = lidToPidTable_;
391 dir->lidToLidTable_ = lidToLidTable_;
392 dir->useHashTables_ = useHashTables_;
406 const Teuchos::ArrayView<const GlobalOrdinal> &globalIDs,
407 const Teuchos::ArrayView<int> &nodeIDs,
408 const Teuchos::ArrayView<LocalOrdinal> &localIDs,
409 const bool computeLIDs)
const;
419 Teuchos::Ptr<const tie_break_type> tie_break);
433 bool isLocallyOneToOne ()
const {
434 return locallyOneToOne_;
454 Teuchos::RCP<const map_type> directoryMap_;
464 Teuchos::ArrayRCP<int> PIDs_;
471 Teuchos::ArrayRCP<LocalOrdinal> LIDs_;
483 Kokkos::Device<
typename NodeType::execution_space,
484 typename NodeType::memory_space> > > lidToPidTable_;
492 Kokkos::Device<
typename NodeType::execution_space,
493 typename NodeType::memory_space> > > lidToLidTable_;
502 mutable enum EOneToOneResult {
503 ONE_TO_ONE_NOT_CALLED_YET,
511 bool locallyOneToOne_;
525 #endif // __Tpetra_DirectoryImpl_decl_hpp