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"
64template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
69 GlobalOrdinal indexBase,
75#ifdef HAVE_XPETRA_TPETRA
89template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
94 size_t numLocalElements,
95 GlobalOrdinal indexBase,
100#ifdef HAVE_XPETRA_TPETRA
114template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
120 GlobalOrdinal indexBase,
125#ifdef HAVE_XPETRA_TPETRA
136template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
140 const LocalOrdinal numDofPerNode,
const GlobalOrdinal gidOffset)
145 Teuchos::rcp_dynamic_cast<const BlockedMap<LocalOrdinal,GlobalOrdinal,Node>>(nodeMap);
150 "Xpetra::MapFactory::Build: When provided a BlockedMap numDofPerNode must set to be one. It is set to "
151 << numDofPerNode <<
".");
155#ifdef HAVE_XPETRA_TPETRA
156 LocalOrdinal numLocalElements = nodeMap->getLocalNumElements();
159 for (LocalOrdinal i = 0; i < numLocalElements; i++)
161 for (LocalOrdinal j = 0; j < numDofPerNode; j++)
163 newElements[i * numDofPerNode + j] = oldElements[i] * numDofPerNode + j + gidOffset;
169 (nodeMap->getGlobalNumElements() * numDofPerNode, newElements, nodeMap->getIndexBase(), nodeMap->getComm()));
179#ifdef HAVE_XPETRA_TPETRA
180template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
185 const Kokkos::View<const GlobalOrdinal*, typename Node::device_type>& indexList,
186 GlobalOrdinal indexBase,
199template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
208#ifdef HAVE_XPETRA_TPETRA
229template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
238#ifdef HAVE_XPETRA_TPETRA
241 return rcp(
new TpetraMap<LocalOrdinal,GlobalOrdinal,Node>(Tpetra::createLocalMapWithNode<LocalOrdinal,GlobalOrdinal,Node>(numElements, comm)));
254template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
263#ifdef HAVE_XPETRA_TPETRA
265 return rcp(
new TpetraMap<LocalOrdinal, GlobalOrdinal, Node>(
266 Tpetra::createUniformContigMapWithNode<LocalOrdinal, GlobalOrdinal, Node>(numElements, comm)));
275template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
284#ifdef HAVE_XPETRA_TPETRA
287 Tpetra::createUniformContigMapWithNode<LocalOrdinal, GlobalOrdinal, Node>(numElements, comm)));
295template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
300 size_t localNumElements,
305#ifdef HAVE_XPETRA_TPETRA
308 Tpetra::createContigMapWithNode<LocalOrdinal, GlobalOrdinal, Node>(numElements, localNumElements, comm)));
320template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
325 size_t localNumElements,
330#ifdef HAVE_XPETRA_TPETRA
333 return rcp(
new TpetraMap<LocalOrdinal, GlobalOrdinal, Node>(
334 Tpetra::createContigMapWithNode<LocalOrdinal, GlobalOrdinal, Node>(numElements, localNumElements, comm)));
344template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
353 size_t Nlocal = oldmap->getLocalNumElements();
358 std::logic_error,
"MapFactory::copyMapWithNewComm needs the comm to match the map.");
361 RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> > newMap;
362 if(!newComm.is_null()) {
363 if(oldmap->isContiguous()) {
364 newMap = XMF::Build(oldmap->lib(),INVALID,Nlocal,oldmap->getIndexBase(),newComm);
367 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)
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
size_t global_size_t
Global size_t object.