10#ifndef XPETRA_MAPFACTORY_DEF_HPP
11#define XPETRA_MAPFACTORY_DEF_HPP
13#include "Teuchos_CompilerCodeTweakMacros.hpp"
14#include "Teuchos_ENull.hpp"
17#ifdef HAVE_XPETRA_TPETRA
18#include "Xpetra_TpetraMap.hpp"
20#ifdef HAVE_XPETRA_EPETRA
24#include "Xpetra_BlockedMap.hpp"
28template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
33 GlobalOrdinal indexBase,
38#ifdef HAVE_XPETRA_TPETRA
47template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
52 size_t numLocalElements,
53 GlobalOrdinal indexBase,
57#ifdef HAVE_XPETRA_TPETRA
66template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
72 GlobalOrdinal indexBase,
76#ifdef HAVE_XPETRA_TPETRA
85template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
89 const LocalOrdinal numDofPerNode,
const GlobalOrdinal gidOffset) {
93 Teuchos::rcp_dynamic_cast<const BlockedMap<LocalOrdinal, GlobalOrdinal, Node>>(nodeMap);
97 "Xpetra::MapFactory::Build: When provided a BlockedMap numDofPerNode must set to be one. It is set to "
98 << numDofPerNode <<
".");
102#ifdef HAVE_XPETRA_TPETRA
103 LocalOrdinal numLocalElements = nodeMap->getLocalNumElements();
106 for (LocalOrdinal i = 0; i < numLocalElements; i++) {
107 for (LocalOrdinal j = 0; j < numDofPerNode; j++) {
108 newElements[i * numDofPerNode + j] = oldElements[i] * numDofPerNode + j + gidOffset;
121#ifdef HAVE_XPETRA_TPETRA
122template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
127 const Kokkos::View<const GlobalOrdinal*, typename Node::device_type>& indexList,
128 GlobalOrdinal indexBase,
138template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
146#ifdef HAVE_XPETRA_TPETRA
162template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
170#ifdef HAVE_XPETRA_TPETRA
172 return rcp(
new TpetraMap<LocalOrdinal, GlobalOrdinal, Node>(Tpetra::createLocalMapWithNode<LocalOrdinal, GlobalOrdinal, Node>(numElements, comm)));
180template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
188#ifdef HAVE_XPETRA_TPETRA
190 return rcp(
new TpetraMap<LocalOrdinal, GlobalOrdinal, Node>(
191 Tpetra::createUniformContigMapWithNode<LocalOrdinal, GlobalOrdinal, Node>(numElements, comm)));
198template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
206#ifdef HAVE_XPETRA_TPETRA
209 Tpetra::createUniformContigMapWithNode<LocalOrdinal, GlobalOrdinal, Node>(numElements, comm)));
216template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
221 size_t localNumElements,
225#ifdef HAVE_XPETRA_TPETRA
228 Tpetra::createContigMapWithNode<LocalOrdinal, GlobalOrdinal, Node>(numElements, localNumElements, comm)));
235template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
240 size_t localNumElements,
244#ifdef HAVE_XPETRA_TPETRA
246 return rcp(
new TpetraMap<LocalOrdinal, GlobalOrdinal, Node>(
247 Tpetra::createContigMapWithNode<LocalOrdinal, GlobalOrdinal, Node>(numElements, localNumElements, comm)));
255template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
264 size_t Nlocal = oldmap->getLocalNumElements();
269 std::logic_error,
"MapFactory::copyMapWithNewComm needs the comm to match the map.");
272 RCP<const Map<LocalOrdinal, GlobalOrdinal, Node>> newMap;
273 if (!newComm.is_null()) {
274 if (oldmap->isContiguous()) {
275 newMap = XMF::Build(oldmap->lib(), INVALID, Nlocal, oldmap->getIndexBase(), newComm);
277 newMap = XMF::Build(oldmap->lib(), Nglobal, oldmap->getLocalElementList(), oldmap->getIndexBase(), newComm);
#define XPETRA_MONITOR(funcName)
#define XPETRA_FACTORY_ERROR_IF_EPETRA(lib)
#define XPETRA_FACTORY_END
Exception throws to report errors in the internal logical of the program.
Create an Xpetra::Map instance.
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.
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 > > 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.
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.
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 > > 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< 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 > > createUniformContigMap(UnderlyingLib lib, global_size_t numElements, const Teuchos::RCP< const Teuchos::Comm< int > > &comm)
Create a uniform, contiguous Map with the default node.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
#define TEUCHOS_UNREACHABLE_RETURN(dummyReturnVal)
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
size_t global_size_t
Global size_t object.