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"
62 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
63 Teuchos::RCP<Map<LocalOrdinal, GlobalOrdinal, Node>>
67 GlobalOrdinal indexBase,
68 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm,
72 #ifdef HAVE_XPETRA_TPETRA
81 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
82 Teuchos::RCP<Map<LocalOrdinal, GlobalOrdinal, Node>>
86 size_t numLocalElements,
87 GlobalOrdinal indexBase,
88 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm) {
91 #ifdef HAVE_XPETRA_TPETRA
100 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
101 Teuchos::RCP<Map<LocalOrdinal, GlobalOrdinal, Node>>
105 const Teuchos::ArrayView<const GlobalOrdinal>& elementList,
106 GlobalOrdinal indexBase,
107 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm) {
110 #ifdef HAVE_XPETRA_TPETRA
119 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
120 Teuchos::RCP<Map<LocalOrdinal, GlobalOrdinal, Node>>
123 const LocalOrdinal numDofPerNode,
const GlobalOrdinal gidOffset) {
126 RCP<const BlockedMap<LocalOrdinal, GlobalOrdinal, Node>> bmap =
129 if (!bmap.is_null()) {
131 "Xpetra::MapFactory::Build: When provided a BlockedMap numDofPerNode must set to be one. It is set to "
132 << numDofPerNode <<
".");
136 #ifdef HAVE_XPETRA_TPETRA
137 LocalOrdinal numLocalElements = nodeMap->getLocalNumElements();
138 Teuchos::ArrayView<const GlobalOrdinal> oldElements = nodeMap->getLocalElementList();
139 Teuchos::Array<GlobalOrdinal> newElements(nodeMap->getLocalNumElements() * numDofPerNode);
140 for (LocalOrdinal i = 0; i < numLocalElements; i++) {
141 for (LocalOrdinal j = 0; j < numDofPerNode; j++) {
142 newElements[i * numDofPerNode + j] = oldElements[i] * numDofPerNode + j + gidOffset;
146 return rcp(
new TpetraMap<LocalOrdinal, GlobalOrdinal, Node>(nodeMap->getGlobalNumElements() * numDofPerNode, newElements, nodeMap->getIndexBase(), nodeMap->getComm()));
154 #ifdef HAVE_XPETRA_TPETRA
155 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
156 Teuchos::RCP<Map<LocalOrdinal, GlobalOrdinal, Node>>
160 const Kokkos::View<const GlobalOrdinal*, typename Node::device_type>& indexList,
161 GlobalOrdinal indexBase,
162 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm) {
169 #endif // HAVE_XPETRA_TPETRA
171 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
172 Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>
176 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm) {
179 #ifdef HAVE_XPETRA_TPETRA
189 #endif // HAVE_XPETRA_TPETRA
195 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
196 Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>
200 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm) {
203 #ifdef HAVE_XPETRA_TPETRA
207 #endif // HAVE_XPETRA_TPETRA
213 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
214 Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>
218 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm) {
221 #ifdef HAVE_XPETRA_TPETRA
224 Tpetra::createUniformContigMapWithNode<LocalOrdinal, GlobalOrdinal, Node>(numElements, comm)));
225 #endif // HAVE_XPETRA_TPETRA
231 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
232 Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>
236 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm) {
239 #ifdef HAVE_XPETRA_TPETRA
242 Tpetra::createUniformContigMapWithNode<LocalOrdinal, GlobalOrdinal, Node>(numElements, comm)));
243 #endif // HAVE_XPETRA_TPETRA
249 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
250 Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>
254 size_t localNumElements,
255 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm) {
258 #ifdef HAVE_XPETRA_TPETRA
261 Tpetra::createContigMapWithNode<LocalOrdinal, GlobalOrdinal, Node>(numElements, localNumElements, comm)));
262 #endif // HAVE_XPETRA_TPETRA
268 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
269 Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>
273 size_t localNumElements,
274 const Teuchos::RCP<
const Teuchos::Comm<int>>& comm) {
277 #ifdef HAVE_XPETRA_TPETRA
280 Tpetra::createContigMapWithNode<LocalOrdinal, GlobalOrdinal, Node>(numElements, localNumElements, comm)));
282 #endif // HAVE_XPETRA_TPETRA
288 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
289 Teuchos::RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>>
292 const Teuchos::RCP<
const Teuchos::Comm<int>>& newComm) {
295 global_size_t INVALID = Teuchos::OrdinalTraits<global_size_t>::invalid();
297 size_t Nlocal = oldmap->getLocalNumElements();
301 TEUCHOS_TEST_FOR_EXCEPTION(Nlocal && newComm.is_null(),
302 std::logic_error,
"MapFactory::copyMapWithNewComm needs the comm to match the map.");
305 RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>> newMap;
306 if (!newComm.is_null()) {
307 if (oldmap->isContiguous()) {
308 newMap = XMF::Build(oldmap->lib(), INVALID, Nlocal, oldmap->getIndexBase(), newComm);
310 newMap = XMF::Build(oldmap->lib(), Nglobal, oldmap->getLocalElementList(), oldmap->getIndexBase(), newComm);
320 #endif // XPETRA_MAPFACTORY_DEF_HPP
static Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > copyMapWithNewComm(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node >> &oldmap, const Teuchos::RCP< const Teuchos::Comm< int >> &newComm)
Create a copy of the map, only using the new Comm object if the Comm would be valid.
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)
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.
Create an Xpetra::Map instance.
#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.