49 #ifndef XPETRA_STRIDEDMAP_DEF_HPP
50 #define XPETRA_STRIDEDMAP_DEF_HPP
52 #include "Xpetra_StridedMap.hpp"
54 #include <Teuchos_OrdinalTraits.hpp>
57 #include "Xpetra_MapFactory.hpp"
61 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
65 GlobalOrdinal indexBase,
66 std::vector<size_t>& stridingInfo,
67 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm,
68 LocalOrdinal stridedBlockId,
71 : stridingInfo_(stridingInfo)
72 , stridedBlockId_(stridedBlockId)
74 , indexBase_(indexBase) {
79 TEUCHOS_TEST_FOR_EXCEPTION(stridingInfo.size() == 0,
81 "StridedMap::StridedMap: stridingInfo not valid: stridingInfo.size() = 0?");
83 TEUCHOS_TEST_FOR_EXCEPTION(numGlobalElements == Teuchos::OrdinalTraits<global_size_t>::invalid(),
84 std::invalid_argument,
85 "StridedMap::StridedMap: numGlobalElements is invalid");
87 TEUCHOS_TEST_FOR_EXCEPTION(numGlobalElements % blkSize != 0,
89 "StridedMap::StridedMap: stridingInfo not valid: getFixedBlockSize "
90 "is not an integer multiple of numGlobalElements.");
92 if (stridedBlockId != -1) {
93 TEUCHOS_TEST_FOR_EXCEPTION(stridingInfo.size() <
static_cast<size_t>(stridedBlockId),
95 "StridedTpetraMap::StridedTpetraMap: "
96 "stridedBlockId > stridingInfo.size()");
100 if (blkSize != 1 ||
offset_ != 0) {
105 RCP<Map> nodeMap = MapFactory_t::Build(xlib, numGlobalNodes, indexBase, comm, lg);
106 global_size_t numLocalNodes = nodeMap->getLocalNumElements();
109 size_t nStridedOffset = 0;
110 size_t nDofsPerNode = blkSize;
111 if (stridedBlockId > -1) {
112 for (
int j = 0; j < stridedBlockId; j++) {
117 numGlobalElements = numGlobalNodes * Teuchos::as<global_size_t>(nDofsPerNode);
119 size_t numLocalElements = numLocalNodes * Teuchos::as<size_t>(nDofsPerNode);
121 std::vector<GlobalOrdinal> dofgids(numLocalElements);
122 for (LocalOrdinal i = 0; i < Teuchos::as<LocalOrdinal>(numLocalNodes); i++) {
123 GlobalOrdinal nodeGID = nodeMap->getGlobalElement(i);
125 for (
size_t j = 0; j < nDofsPerNode; j++) {
126 dofgids[i * nDofsPerNode + j] =
indexBase_ +
offset_ + (nodeGID -
indexBase_) * Teuchos::as<GlobalOrdinal>(blkSize) + Teuchos::as<GlobalOrdinal>(nStridedOffset + j);
130 map_ = MapFactory_t::Build(xlib, numGlobalElements, dofgids, indexBase, comm);
132 if (stridedBlockId == -1) {
133 TEUCHOS_TEST_FOR_EXCEPTION(
getLocalNumElements() != Teuchos::as<size_t>(nodeMap->getLocalNumElements() * nDofsPerNode),
135 "StridedTpetraMap::StridedTpetraMap: wrong distribution of dofs among processors.");
137 TEUCHOS_TEST_FOR_EXCEPTION(
getGlobalNumElements() != Teuchos::as<size_t>(nodeMap->getGlobalNumElements() * nDofsPerNode),
139 "StridedTpetraMap::StridedTpetraMap: wrong distribution of dofs among processors.");
141 size_t nDofsInStridedBlock = stridingInfo[stridedBlockId];
142 TEUCHOS_TEST_FOR_EXCEPTION(
getLocalNumElements() != Teuchos::as<size_t>(nodeMap->getLocalNumElements() * nDofsInStridedBlock),
144 "StridedTpetraMap::StridedTpetraMap: wrong distribution of dofs among processors.");
146 TEUCHOS_TEST_FOR_EXCEPTION(
getGlobalNumElements() != Teuchos::as<size_t>(nodeMap->getGlobalNumElements() * nDofsInStridedBlock),
148 "StridedTpetraMap::StridedTpetraMap: wrong distribution of dofs among processors.");
151 map_ = MapFactory_t::Build(xlib, numGlobalElements, indexBase, comm, lg);
157 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
161 size_t numLocalElements,
162 GlobalOrdinal indexBase,
163 std::vector<size_t>& stridingInfo,
164 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm,
165 LocalOrdinal stridedBlockId,
166 GlobalOrdinal offset)
167 : stridingInfo_(stridingInfo)
168 , stridedBlockId_(stridedBlockId)
170 , indexBase_(indexBase) {
174 TEUCHOS_TEST_FOR_EXCEPTION(stridingInfo.size() == 0,
176 "StridedMap::StridedMap: stridingInfo not valid: stridingInfo.size() = 0?");
177 if (numGlobalElements != Teuchos::OrdinalTraits<global_size_t>::invalid()) {
178 TEUCHOS_TEST_FOR_EXCEPTION(numGlobalElements % blkSize != 0,
180 "StridedMap::StridedMap: stridingInfo not valid: getFixedBlockSize is not an integer "
181 "multiple of numGlobalElements.");
182 #ifdef HAVE_XPETRA_DEBUG
185 Teuchos::reduceAll(*comm, Teuchos::REDUCE_SUM, Teuchos::as<global_size_t>(numLocalElements), Teuchos::outArg(sumLocalElements));
187 TEUCHOS_TEST_FOR_EXCEPTION(sumLocalElements != numGlobalElements,
188 std::invalid_argument,
189 "StridedMap::StridedMap: sum of numbers of local elements is different from the provided "
190 "number of global elements.");
194 TEUCHOS_TEST_FOR_EXCEPTION(
195 numLocalElements % blkSize != 0,
197 "StridedMap::StridedMap: stridingInfo not valid: getFixedBlockSize is not an integer multiple of numLocalElements.");
199 if (stridedBlockId != -1) {
200 TEUCHOS_TEST_FOR_EXCEPTION(stridingInfo.size() < Teuchos::as<size_t>(stridedBlockId),
202 "StridedTpetraMap::StridedTpetraMap: stridedBlockId > stridingInfo.size()");
206 if (blkSize != 1 ||
offset_ != 0) {
208 global_size_t numGlobalNodes = Teuchos::OrdinalTraits<global_size_t>::invalid();
209 if (numGlobalElements != Teuchos::OrdinalTraits<global_size_t>::invalid()) {
210 numGlobalNodes = numGlobalElements / blkSize;
215 RCP<Map> nodeMap = MapFactory_t::Build(xlib, numGlobalNodes, numLocalNodes, indexBase, comm);
218 size_t nStridedOffset = 0;
219 size_t nDofsPerNode = blkSize;
220 if (stridedBlockId > -1) {
221 for (
int j = 0; j < stridedBlockId; j++) {
226 numGlobalElements = nodeMap->getGlobalNumElements() * Teuchos::as<global_size_t>(nDofsPerNode);
228 numLocalElements = numLocalNodes * Teuchos::as<size_t>(nDofsPerNode);
230 std::vector<GlobalOrdinal> dofgids(numLocalElements);
231 for (LocalOrdinal i = 0; i < Teuchos::as<LocalOrdinal>(numLocalNodes); i++) {
232 GlobalOrdinal nodeGID = nodeMap->getGlobalElement(i);
234 for (
size_t j = 0; j < nDofsPerNode; j++) {
235 dofgids[i * nDofsPerNode + j] =
indexBase_ +
offset_ + (nodeGID -
indexBase_) * Teuchos::as<GlobalOrdinal>(blkSize) + Teuchos::as<GlobalOrdinal>(nStridedOffset + j);
239 map_ = MapFactory_t::Build(xlib, numGlobalElements, dofgids, indexBase, comm);
241 if (stridedBlockId == -1) {
242 TEUCHOS_TEST_FOR_EXCEPTION(
getLocalNumElements() != Teuchos::as<size_t>(nodeMap->getLocalNumElements() * nDofsPerNode),
244 "StridedTpetraMap::StridedTpetraMap: wrong distribution of dofs among processors.");
246 TEUCHOS_TEST_FOR_EXCEPTION(
getGlobalNumElements() != Teuchos::as<size_t>(nodeMap->getGlobalNumElements() * nDofsPerNode),
248 "StridedTpetraMap::StridedTpetraMap: wrong distribution of dofs among processors.");
250 int nDofsInStridedBlock = stridingInfo[stridedBlockId];
252 TEUCHOS_TEST_FOR_EXCEPTION(
getLocalNumElements() != Teuchos::as<size_t>(nodeMap->getLocalNumElements() * nDofsInStridedBlock),
254 "StridedTpetraMap::StridedTpetraMap: wrong distribution of dofs among processors.");
256 TEUCHOS_TEST_FOR_EXCEPTION(
getGlobalNumElements() != Teuchos::as<size_t>(nodeMap->getGlobalNumElements() * nDofsInStridedBlock),
258 "StridedTpetraMap::StridedTpetraMap: wrong distribution of dofs among processors.");
261 map_ = MapFactory_t::Build(xlib, numGlobalElements, numLocalElements, indexBase, comm);
267 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
271 const Teuchos::ArrayView<const GlobalOrdinal>& elementList,
272 GlobalOrdinal indexBase,
273 std::vector<size_t>& stridingInfo,
274 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm,
275 LocalOrdinal stridedBlockId)
276 : stridingInfo_(stridingInfo)
277 , stridedBlockId_(stridedBlockId)
278 , indexBase_(indexBase) {
283 TEUCHOS_TEST_FOR_EXCEPTION(stridingInfo.size() == 0,
285 "StridedMap::StridedMap: stridingInfo not valid: stridingInfo.size() = 0?");
286 if (stridedBlockId != -1)
287 TEUCHOS_TEST_FOR_EXCEPTION(stridingInfo.size() < Teuchos::as<size_t>(stridedBlockId),
289 "StridedTpetraMap::StridedTpetraMap: stridedBlockId > stridingInfo.size()");
290 if (numGlobalElements != Teuchos::OrdinalTraits<global_size_t>::invalid()) {
291 TEUCHOS_TEST_FOR_EXCEPTION(numGlobalElements % blkSize != 0,
293 "StridedMap::StridedMap: stridingInfo not valid: getFixedBlockSize is not an integer "
294 "multiple of numGlobalElements.");
295 #ifdef HAVE_XPETRA_DEBUG
297 global_size_t sumLocalElements, numLocalElements = elementList.size();
298 Teuchos::reduceAll(*comm, Teuchos::REDUCE_SUM, numLocalElements, Teuchos::outArg(sumLocalElements));
299 TEUCHOS_TEST_FOR_EXCEPTION(sumLocalElements != numGlobalElements,
300 std::invalid_argument,
301 "StridedMap::StridedMap: sum of numbers of local elements is different from the provided "
302 "number of global elements.");
306 if (stridedBlockId == -1) {
311 TEUCHOS_TEST_FOR_EXCEPTION(elementList.size() % blkSize != 0,
313 "StridedMap::StridedMap: stridingInfo not valid: getFixedBlockSize is not an integer "
314 "multiple of elementList.size().");
320 TEUCHOS_TEST_FOR_EXCEPTION(elementList.size() % stridingInfo[stridedBlockId] != 0,
322 "StridedMap::StridedMap: stridingInfo not valid: stridingBlockInfo[stridedBlockId] is not "
323 "an integer multiple of elementList.size().");
326 map_ = MapFactory_t::Build(xlib, numGlobalElements, elementList, indexBase, comm);
331 GlobalOrdinal minGidOnCurProc = Teuchos::OrdinalTraits<GlobalOrdinal>::max();
332 for (Teuchos_Ordinal k = 0; k < elementList.size(); k++)
334 if (elementList[k] < minGidOnCurProc) {
335 minGidOnCurProc = elementList[k];
339 Teuchos::reduceAll(*comm, Teuchos::REDUCE_MIN, minGidOnCurProc, Teuchos::outArg(
offset_));
342 size_t nStridedOffset = 0;
343 for (
int j = 0; j < stridedBlockId; j++) {
344 nStridedOffset += stridingInfo[j];
346 const GlobalOrdinal goStridedOffset = Teuchos::as<GlobalOrdinal>(nStridedOffset);
354 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
357 std::vector<size_t>& stridingInfo,
359 LocalOrdinal stridedBlockId,
360 GlobalOrdinal offset)
361 : stridingInfo_(stridingInfo)
362 , stridedBlockId_(stridedBlockId)
364 , indexBase_(map->getIndexBase()) {
369 if (Teuchos::rcp_dynamic_cast<const StridedMap>(map) == Teuchos::null) {
372 map_ = map->getMap();
376 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
381 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
385 return stridingInfo_;
388 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
391 stridingInfo_ = stridingInfo;
394 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
399 for (std::vector<size_t>::const_iterator it = stridingInfo_.begin(); it != stridingInfo_.end(); ++it) {
405 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
409 return stridedBlockId_;
412 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
415 return stridingInfo_.size() > 1 ?
true :
false;
418 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
421 return getFixedBlockSize() > 1 ?
true :
false;
424 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
431 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
437 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
441 GlobalOrdinal tgid = gid - offset_ - indexBase_;
442 tgid = tgid % getFixedBlockSize();
444 size_t nStridedOffset = 0;
445 size_t stridedBlockId = 0;
446 for (
size_t j = 0; j < stridingInfo_.size(); j++) {
447 nStridedOffset += stridingInfo_[j];
448 if (Teuchos::as<size_t>(tgid) < nStridedOffset) {
453 return stridedBlockId;
456 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
457 RCP<const Xpetra::Map<LocalOrdinal, GlobalOrdinal, Node>>
463 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
466 #ifndef HAVE_XPETRA_DEBUG
469 if (getStridedBlockId() == -1) {
471 if (getLocalNumElements() % getFixedBlockSize() != 0 ||
472 getGlobalNumElements() % getFixedBlockSize() != 0)
476 Teuchos::ArrayView<const GlobalOrdinal> dofGids = getLocalElementList();
479 if (dofGids.size() == 0)
484 if (dofGids.size() % stridingInfo_[stridedBlockId_] != 0) {
489 size_t nStridedOffset = 0;
490 for (
int j = 0; j < stridedBlockId_; j++) {
491 nStridedOffset += stridingInfo_[j];
494 const GlobalOrdinal goStridedOffset = Teuchos::as<GlobalOrdinal>(nStridedOffset);
495 const GlobalOrdinal goZeroOffset = (dofGids[0] - nStridedOffset - offset_ - indexBase_) / Teuchos::as<GlobalOrdinal>(getFixedBlockSize());
497 GlobalOrdinal cnt = 0;
499 i < Teuchos::as<size_t>(dofGids.size()) / stridingInfo_[stridedBlockId_];
500 i += stridingInfo_[stridedBlockId_]) {
501 const GlobalOrdinal first_gid = dofGids[i];
504 cnt = (first_gid - goStridedOffset - offset_ - indexBase_) / Teuchos::as<GlobalOrdinal>(getFixedBlockSize()) - goZeroOffset;
507 for (
size_t j = 0; j < stridingInfo_[stridedBlockId_]; j++) {
508 const GlobalOrdinal gid = dofGids[i + j];
509 const GlobalOrdinal r = (gid - Teuchos::as<GlobalOrdinal>(j) - goStridedOffset - offset_ - indexBase_) / Teuchos::as<GlobalOrdinal>(getFixedBlockSize()) - goZeroOffset - cnt;
515 std::cout <<
"goZeroOffset : " << goZeroOffset << std::endl
516 <<
"dofGids[0] : " << dofGids[0] << std::endl
517 <<
"stridedOffset : " << nStridedOffset << std::endl
518 <<
"offset_ : " << offset_ << std::endl
519 <<
"goStridedOffset: " << goStridedOffset << std::endl
520 <<
"getFixedBlkSize: " << getFixedBlockSize() << std::endl
521 <<
"gid: " << gid <<
" GID: " << r << std::endl;
533 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
537 return map_->getGlobalNumElements();
540 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
544 return map_->getLocalNumElements();
547 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
551 return map_->getIndexBase();
554 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
558 return map_->getMinLocalIndex();
561 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
565 return map_->getMaxLocalIndex();
568 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
572 return map_->getMinGlobalIndex();
575 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
579 return map_->getMaxGlobalIndex();
582 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
586 return map_->getMinAllGlobalIndex();
589 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
593 return map_->getMaxAllGlobalIndex();
596 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
600 return map_->getLocalElement(globalIndex);
603 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
607 return map_->getGlobalElement(localIndex);
610 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
614 const Teuchos::ArrayView<int>& nodeIDList,
615 const Teuchos::ArrayView<LocalOrdinal>& LIDList)
const {
616 return map_->getRemoteIndexList(GIDList, nodeIDList, LIDList);
619 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
623 const Teuchos::ArrayView<int>& nodeIDList)
const {
624 return map_->getRemoteIndexList(GIDList, nodeIDList);
627 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
628 Teuchos::ArrayView<const GlobalOrdinal>
631 return map_->getLocalElementList();
634 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
638 return map_->getMyGlobalIndicesDevice();
641 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
644 return map_->isNodeLocalElement(localIndex);
647 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
650 return map_->isNodeGlobalElement(globalIndex);
653 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
656 return map_->isContiguous();
659 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
662 return map_->isDistributed();
665 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
668 return map_->isCompatible(map);
671 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
674 return map_->isSameAs(map);
677 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
678 Teuchos::RCP<const Teuchos::Comm<int>>
681 return map_->getComm();
684 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
685 RCP<const Xpetra::Map<LocalOrdinal, GlobalOrdinal, Node>>
688 return map_->removeEmptyProcesses();
691 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
692 RCP<const Xpetra::Map<LocalOrdinal, GlobalOrdinal, Node>>
695 return map_->replaceCommWithSubset(newComm);
698 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
702 return map_->description();
705 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
707 describe(Teuchos::FancyOStream& out,
const Teuchos::EVerbosityLevel verbLevel)
const {
708 map_->describe(out, verbLevel);
711 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
720 #endif // XPETRA_STRIDEDMAP_DEF_HPP
Teuchos::ArrayView< const GlobalOrdinal > getLocalElementList() const
Return a list of the global indices owned by this node.
LookupStatus getRemoteIndexList(const Teuchos::ArrayView< const GlobalOrdinal > &GIDList, const Teuchos::ArrayView< int > &nodeIDList, const Teuchos::ArrayView< LocalOrdinal > &LIDList) const
Returns the node IDs and corresponding local indices for a given list of global indices.
LocalOrdinal getStridedBlockId() const
GlobalOrdinal getMaxGlobalIndex() const
Returns maximum global index owned by this node.
GlobalOrdinal getGlobalElement(LocalOrdinal localIndex) const
Return the global index for a given local index.
size_t GID2StridingBlockId(GlobalOrdinal gid) const
bool isContiguous() const
Returns true if this Map is distributed contiguously; returns false otherwise.
void setStridingData(std::vector< size_t > stridingInfo)
size_t getLocalNumElements() const
Returns the number of elements belonging to the calling node.
GlobalOrdinal indexBase_
Index base for the strided map (default = 0)
GlobalOrdinal getOffset() const
Exception throws to report errors in the internal logical of the program.
LocalOrdinal getMaxLocalIndex() const
Returns maximum local index.
Teuchos::RCP< const Teuchos::Comm< int > > getComm() const
Get the Comm object for this Map.
bool isCompatible(const Map &map) const
Returns true if map is compatible with this Map.
std::string description() const
Return a simple one-line description of this object.
GlobalOrdinal getMaxAllGlobalIndex() const
Return the maximum global index over all nodes.
bool isNodeGlobalElement(GlobalOrdinal globalIndex) const
Returns true if the global index is found in this Map on this node; returns false if it isn't...
bool isNodeLocalElement(LocalOrdinal localIndex) const
Returns true if the local index is valid for this Map on this node; returns false if it isn't...
bool isStrided() const
returns true, if this is a strided map (i.e. more than 1 strided blocks)
bool isSameAs(const Map &map) const
Returns true if map is identical to this Map.
std::vector< size_t > stridingInfo_
Vector with size of strided blocks (dofs)
RCP< const Map > removeEmptyProcesses() const
Return a new Map with processes with zero elements removed.
RCP< const Map > replaceCommWithSubset(const Teuchos::RCP< const Teuchos::Comm< int >> &newComm) const
bool isDistributed() const
Returns true if this Map is distributed across more than one node; returns false otherwise.
size_t getFixedBlockSize() const
global_indices_array_device_type getMyGlobalIndicesDevice() const
Return a view of the global indices owned by this process on the Map's device.
GlobalOrdinal offset_
Offset for gids in map (default = 0)
GlobalOrdinal getMinGlobalIndex() const
Returns minimum global index owned by this node.
size_t global_size_t
Global size_t object.
GlobalOrdinal getIndexBase() const
Returns the index base for this Map.
RCP< const Xpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > getMap() const
global_size_t getGlobalNumElements() const
Returns the number of elements in this Map.
Kokkos::View< const global_ordinal_type *, typename Node::device_type > global_indices_array_device_type
virtual bool CheckConsistency()
std::vector< size_t > getStridingData() const
LocalOrdinal getLocalElement(GlobalOrdinal globalIndex) const
Return the local index for a given global index.
StridedMap(UnderlyingLib xlib, global_size_t numGlobalElements, GlobalOrdinal indexBase, std::vector< size_t > &stridingInfo, const Teuchos::RCP< const Teuchos::Comm< int >> &comm, LocalOrdinal stridedBlockId=-1, GlobalOrdinal offset=0, LocalGlobal lg=GloballyDistributed)
Map constructor with contiguous uniform distribution.
LocalOrdinal getMinLocalIndex() const
Returns minimum local index.
UnderlyingLib lib() const
Get the library used by this object (Tpetra or Epetra?)
GlobalOrdinal getMinAllGlobalIndex() const
Return the minimum global index over all nodes.
Create an Xpetra::Map instance.
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel=Teuchos::Describable::verbLevel_default) const
Print the object with some verbosity level to a FancyOStream object.
virtual ~StridedMap()
Destructor.
void setOffset(GlobalOrdinal offset)
RCP< const Xpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > map_