10#ifndef __Tpetra_DirectoryImpl_decl_hpp
11#define __Tpetra_DirectoryImpl_decl_hpp
31#ifndef HAVE_TPETRA_DIRECTORY_SPARSE_MAP_FIX
32# define HAVE_TPETRA_DIRECTORY_SPARSE_MAP_FIX 1
35#include "Tpetra_Details_FixedHashTable_decl.hpp"
37#ifndef DOXYGEN_SHOULD_SKIP_THIS
40 template<
class OrdinalType>
54 template<
class LocalOrdinal,
class GlobalOrdinal,
class NodeType>
57 typedef LocalOrdinal local_ordinal_type;
58 typedef GlobalOrdinal global_ordinal_type;
59 typedef NodeType node_type;
60 typedef ::Tpetra::Map<LocalOrdinal, GlobalOrdinal, NodeType> map_type;
107 const Teuchos::ArrayView<const GlobalOrdinal> &globalIDs,
108 const Teuchos::ArrayView<int> &nodeIDs,
109 const Teuchos::ArrayView<LocalOrdinal> &localIDs,
110 const bool computeLIDs)
const;
118 virtual bool isOneToOne (
const Teuchos::Comm<int>& comm)
const = 0;
124 const Teuchos::ArrayView<const GlobalOrdinal> &globalIDs,
125 const Teuchos::ArrayView<int> &nodeIDs,
126 const Teuchos::ArrayView<LocalOrdinal> &localIDs,
127 const bool computeLIDs)
const = 0;
132 template<
class LocalOrdinal,
class GlobalOrdinal,
class NodeType>
134 public Directory<LocalOrdinal, GlobalOrdinal, NodeType> {
137 typedef typename base_type::map_type map_type;
147 bool isOneToOne (
const Teuchos::Comm<int>& comm)
const override;
159 const Teuchos::ArrayView<const GlobalOrdinal> &globalIDs,
160 const Teuchos::ArrayView<int> &nodeIDs,
161 const Teuchos::ArrayView<LocalOrdinal> &localIDs,
162 const bool computeLIDs)
const override;
166 const int numProcs_ = 0;
178 template<
class LocalOrdinal,
class GlobalOrdinal,
class NodeType>
179 class ContiguousUniformDirectory :
180 public Directory<LocalOrdinal, GlobalOrdinal, NodeType> {
183 template <
class LO,
class GO,
class N>
friend class ContiguousUniformDirectory;
187 typedef typename base_type::map_type map_type;
189 ContiguousUniformDirectory () =
default;
190 ContiguousUniformDirectory (
const map_type& map);
191 ~ContiguousUniformDirectory ()
override =
default;
208 const Teuchos::ArrayView<const GlobalOrdinal> &globalIDs,
209 const Teuchos::ArrayView<int> &nodeIDs,
210 const Teuchos::ArrayView<LocalOrdinal> &localIDs,
211 const bool computeLIDs)
const override;
217 template<
class LocalOrdinal,
class GlobalOrdinal,
class NodeType>
218 class DistributedContiguousDirectory :
219 public Directory<LocalOrdinal, GlobalOrdinal, NodeType> {
221 template <
class LO,
class GO,
class N>
friend class DistributedContiguousDirectory;
225 typedef typename base_type::map_type map_type;
227 DistributedContiguousDirectory () =
default;
228 DistributedContiguousDirectory (
const map_type& map);
229 ~DistributedContiguousDirectory ()
override =
default;
246 const Teuchos::ArrayView<const GlobalOrdinal> &globalIDs,
247 const Teuchos::ArrayView<int> &nodeIDs,
248 const Teuchos::ArrayView<LocalOrdinal> &localIDs,
249 const bool computeLIDs)
const override;
277 Teuchos::ArrayRCP<GlobalOrdinal> allMinGIDs_;
282 template<
class LocalOrdinal,
class GlobalOrdinal,
class NodeType>
283 class DistributedNoncontiguousDirectory :
284 public Directory<LocalOrdinal, GlobalOrdinal, NodeType> {
286 template <
class LO,
class GO,
class N>
287 friend class DistributedNoncontiguousDirectory;
292 using map_type =
typename base_type::map_type;
294 DistributedNoncontiguousDirectory () =
default;
295 DistributedNoncontiguousDirectory (
const map_type& map);
296 DistributedNoncontiguousDirectory (
const map_type& map,
297 const tie_break_type& tie_break);
298 ~DistributedNoncontiguousDirectory ()
override =
default;
300 bool isOneToOne (
const Teuchos::Comm<int>& comm)
const override;
312 const Teuchos::ArrayView<const GlobalOrdinal> &globalIDs,
313 const Teuchos::ArrayView<int> &nodeIDs,
314 const Teuchos::ArrayView<LocalOrdinal> &localIDs,
315 const bool computeLIDs)
const override;
324 initialize (
const map_type& map,
325 Teuchos::Ptr<const tie_break_type> tie_break);
339 bool isLocallyOneToOne ()
const {
340 return locallyOneToOne_;
360 Teuchos::RCP<const map_type> directoryMap_;
370 Teuchos::ArrayRCP<int> PIDs_;
377 Teuchos::ArrayRCP<LocalOrdinal> LIDs_;
397 Kokkos::HostSpace::device_type>
399 Teuchos::RCP<lidToPidTable_type> lidToPidTable_;
415 Kokkos::HostSpace::device_type>
417 Teuchos::RCP<lidToLidTable_type> lidToLidTable_;
426 mutable enum EOneToOneResult {
427 ONE_TO_ONE_NOT_CALLED_YET,
435 bool locallyOneToOne_;
Forward declaration of Tpetra::Map.
Interface for breaking ties in ownership.
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
virtual bool isOneToOne(const Teuchos::Comm< int > &comm) const =0
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.
Directory()=default
Constructor.
bool isOneToOne(const Teuchos::Comm< int > &) const override
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.
std::string description() const override
A one-line human-readable description of this object.
std::string description() const override
A one-line human-readable description of this object.
bool isOneToOne(const Teuchos::Comm< int > &comm) const override
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.
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.
std::string description() const override
A one-line human-readable description of this object.
ReplicatedDirectory()=default
Constructor (that takes no arguments).
Interface for breaking ties in ownership.
Nonmember function that computes a residual Computes R = B - A * X.
Namespace Tpetra contains the class and methods constituting the Tpetra library.
LookupStatus
Return status of Map remote index lookup (getRemoteIndexList()).