42 #ifndef TPETRA_DETAILS_LOCALMAP_HPP
43 #define TPETRA_DETAILS_LOCALMAP_HPP
49 #include "Tpetra_Details_FixedHashTable.hpp"
71 template<
class LocalOrdinal,
class GlobalOrdinal,
class DeviceType>
74 typedef LocalOrdinal local_ordinal_type;
75 typedef GlobalOrdinal global_ordinal_type;
76 typedef DeviceType device_type;
80 myMinGid_ (Tpetra::Details::OrdinalTraits<GlobalOrdinal>::invalid ()),
81 myMaxGid_ (Tpetra::Details::OrdinalTraits<GlobalOrdinal>::invalid ()),
82 firstContiguousGid_ (Tpetra::Details::OrdinalTraits<GlobalOrdinal>::invalid ()),
83 lastContiguousGid_ (Tpetra::Details::OrdinalTraits<GlobalOrdinal>::invalid ()),
84 numLocalElements_ (0),
87 LocalMap (const ::Tpetra::Details::FixedHashTable<GlobalOrdinal, LocalOrdinal, DeviceType>& glMap,
88 const ::Kokkos::View<const GlobalOrdinal*, ::Kokkos::LayoutLeft, DeviceType>& lgMap,
89 const GlobalOrdinal indexBase,
90 const GlobalOrdinal myMinGid,
91 const GlobalOrdinal myMaxGid,
92 const GlobalOrdinal firstContiguousGid,
93 const GlobalOrdinal lastContiguousGid,
94 const LocalOrdinal numLocalElements,
95 const bool contiguous) :
98 indexBase_ (indexBase),
100 myMaxGid_ (myMaxGid),
101 firstContiguousGid_ (firstContiguousGid),
102 lastContiguousGid_ (lastContiguousGid),
103 numLocalElements_ (numLocalElements),
104 contiguous_ (contiguous)
109 return numLocalElements_;
131 KOKKOS_INLINE_FUNCTION LocalOrdinal
134 if (numLocalElements_ == 0) {
135 return ::Tpetra::Details::OrdinalTraits<LocalOrdinal>::invalid ();
137 return static_cast<LocalOrdinal> (numLocalElements_ - 1);
152 KOKKOS_INLINE_FUNCTION LocalOrdinal
156 if (globalIndex < myMinGid_ || globalIndex > myMaxGid_) {
157 return ::Tpetra::Details::OrdinalTraits<LocalOrdinal>::invalid ();
159 return static_cast<LocalOrdinal> (globalIndex - myMinGid_);
161 else if (globalIndex >= firstContiguousGid_ &&
162 globalIndex <= lastContiguousGid_) {
163 return static_cast<LocalOrdinal> (globalIndex - firstContiguousGid_);
168 return glMap_.
get (globalIndex);
173 KOKKOS_INLINE_FUNCTION GlobalOrdinal
177 return ::Tpetra::Details::OrdinalTraits<GlobalOrdinal>::invalid ();
183 return lgMap_(localIndex);
204 ::Kokkos::View<const GlobalOrdinal*, ::Kokkos::LayoutLeft, DeviceType> lgMap_;
205 GlobalOrdinal indexBase_;
206 GlobalOrdinal myMinGid_;
207 GlobalOrdinal myMaxGid_;
208 GlobalOrdinal firstContiguousGid_;
209 GlobalOrdinal lastContiguousGid_;
210 LocalOrdinal numLocalElements_;
218 #endif // TPETRA_DETAILS_LOCALMAP_HPP