46 #ifndef XPETRA_MAPFACTORY_DEF_HPP 47 #define XPETRA_MAPFACTORY_DEF_HPP 51 #ifdef HAVE_XPETRA_TPETRA 52 # include "Xpetra_TpetraMap.hpp" 54 #ifdef HAVE_XPETRA_EPETRA 58 #include "Xpetra_BlockedMap.hpp" 63 template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
75 template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
76 Teuchos::RCP<Map<LocalOrdinal, GlobalOrdinal, Node>>
80 GlobalOrdinal indexBase,
81 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm,
86 #ifdef HAVE_XPETRA_TPETRA 100 template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
101 Teuchos::RCP<Map<LocalOrdinal, GlobalOrdinal, Node>>
105 size_t numLocalElements,
106 GlobalOrdinal indexBase,
107 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm)
111 #ifdef HAVE_XPETRA_TPETRA 125 template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
126 Teuchos::RCP<Map<LocalOrdinal, GlobalOrdinal, Node>>
130 const Teuchos::ArrayView<const GlobalOrdinal>& elementList,
131 GlobalOrdinal indexBase,
132 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm)
136 #ifdef HAVE_XPETRA_TPETRA 147 template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
148 Teuchos::RCP<Map<LocalOrdinal, GlobalOrdinal, Node>>
151 const LocalOrdinal numDofPerNode,
const GlobalOrdinal gidOffset)
155 RCP<const BlockedMap<LocalOrdinal,GlobalOrdinal,Node>> bmap =
161 "Xpetra::MapFactory::Build: When provided a BlockedMap numDofPerNode must set to be one. It is set to " 162 << numDofPerNode <<
".");
166 #ifdef HAVE_XPETRA_TPETRA 167 LocalOrdinal numLocalElements = nodeMap->getNodeNumElements();
168 Teuchos::ArrayView<const GlobalOrdinal> oldElements = nodeMap->getNodeElementList();
169 Teuchos::Array<GlobalOrdinal> newElements(nodeMap->getNodeNumElements() * numDofPerNode);
170 for (LocalOrdinal i = 0; i < numLocalElements; i++)
172 for (LocalOrdinal j = 0; j < numDofPerNode; j++)
174 newElements[i * numDofPerNode + j] = oldElements[i] * numDofPerNode + j + gidOffset;
179 return rcp(
new TpetraMap<LocalOrdinal, GlobalOrdinal, Node>
180 (nodeMap->getGlobalNumElements() * numDofPerNode, newElements, nodeMap->getIndexBase(), nodeMap->getComm()));
190 #ifdef HAVE_XPETRA_KOKKOS_REFACTOR 191 #ifdef HAVE_XPETRA_TPETRA 192 template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
193 Teuchos::RCP<Map<LocalOrdinal, GlobalOrdinal, Node>>
197 const Kokkos::View<const GlobalOrdinal*, typename Node::device_type>& indexList,
198 GlobalOrdinal indexBase,
199 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm)
203 return rcp(
new TpetraMap<LocalOrdinal, GlobalOrdinal, Node>(numGlobalElements, indexList, indexBase, comm));
207 #endif // HAVE_XPETRA_TPETRA 208 #endif // HAVE_XPETRA_KOKKOS_REFACTOR 212 template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
213 Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>
217 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm)
221 #ifdef HAVE_XPETRA_TPETRA 232 #endif // HAVE_XPETRA_TPETRA 242 template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
243 Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>
247 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm)
251 #ifdef HAVE_XPETRA_TPETRA 256 #endif // HAVE_XPETRA_TPETRA 267 template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
268 Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>
272 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm)
276 #ifdef HAVE_XPETRA_TPETRA 279 Tpetra::createUniformContigMapWithNode<LocalOrdinal, GlobalOrdinal, Node>(numElements, comm)));
280 #endif // HAVE_XPETRA_TPETRA 288 template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
289 Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>
293 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm)
297 #ifdef HAVE_XPETRA_TPETRA 300 Tpetra::createUniformContigMapWithNode<LocalOrdinal, GlobalOrdinal, Node>(numElements, comm)));
301 #endif // HAVE_XPETRA_TPETRA 308 template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
309 Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>
313 size_t localNumElements,
314 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm)
318 #ifdef HAVE_XPETRA_TPETRA 321 Tpetra::createContigMapWithNode<LocalOrdinal, GlobalOrdinal, Node>(numElements, localNumElements, comm)));
322 #endif // HAVE_XPETRA_TPETRA 333 template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
334 Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>
338 size_t localNumElements,
339 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm)
343 #ifdef HAVE_XPETRA_TPETRA 347 Tpetra::createContigMapWithNode<LocalOrdinal, GlobalOrdinal, Node>(numElements, localNumElements, comm)));
349 #endif // HAVE_XPETRA_TPETRA 359 #endif // XPETRA_MAPFACTORY_DEF_HPP static Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > createLocalMap(UnderlyingLib lib, size_t numElements, const Teuchos::RCP< const Teuchos::Comm< int >> &comm)
Create a locally replicated Map with the default node.
static Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > createContigMap(UnderlyingLib lib, global_size_t numElements, size_t localNumElements, const Teuchos::RCP< const Teuchos::Comm< int >> &comm)
Create a (potentially) non-uniform, contiguous Map with the default node.
Exception throws to report errors in the internal logical of the program.
#define XPETRA_FACTORY_ERROR_IF_EPETRA(lib)
MapFactory()
Private constructor. This is a static class.
static Teuchos::RCP< Map< LocalOrdinal, GlobalOrdinal, Node > > Build(UnderlyingLib lib, global_size_t numGlobalElements, GlobalOrdinal indexBase, const Teuchos::RCP< const Teuchos::Comm< int >> &comm, LocalGlobal lg=Xpetra::GloballyDistributed)
Map constructor with Xpetra-defined contiguous uniform distribution.
static Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > createContigMapWithNode(UnderlyingLib lib, global_size_t numElements, size_t localNumElements, const Teuchos::RCP< const Teuchos::Comm< int >> &comm)
Create a (potentially) non-uniform, contiguous Map with a user-specified node.
#define XPETRA_FACTORY_END
size_t global_size_t
Global size_t object.
static Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > createUniformContigMapWithNode(UnderlyingLib lib, global_size_t numElements, const Teuchos::RCP< const Teuchos::Comm< int >> &comm)
Create a uniform, contiguous Map with a user-specified node.
static Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > createLocalMapWithNode(UnderlyingLib lib, size_t numElements, const Teuchos::RCP< const Teuchos::Comm< int >> &comm)
Create a locally replicated Map with a specified node.
#define XPETRA_MONITOR(funcName)
static Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > createUniformContigMap(UnderlyingLib lib, global_size_t numElements, const Teuchos::RCP< const Teuchos::Comm< int >> &comm)
Create a uniform, contiguous Map with the default node.