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"
63template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
75template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
80 GlobalOrdinal indexBase,
86#ifdef HAVE_XPETRA_TPETRA
100template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
105 size_t numLocalElements,
106 GlobalOrdinal indexBase,
111#ifdef HAVE_XPETRA_TPETRA
125template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
131 GlobalOrdinal indexBase,
136#ifdef HAVE_XPETRA_TPETRA
147template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
151 const LocalOrdinal numDofPerNode,
const GlobalOrdinal gidOffset)
156 Teuchos::rcp_dynamic_cast<const BlockedMap<LocalOrdinal,GlobalOrdinal,Node>>(nodeMap);
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();
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;
180 (nodeMap->getGlobalNumElements() * numDofPerNode, newElements, nodeMap->getIndexBase(), nodeMap->getComm()));
190#ifdef HAVE_XPETRA_KOKKOS_REFACTOR
191#ifdef HAVE_XPETRA_TPETRA
192template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
197 const Kokkos::View<const GlobalOrdinal*, typename Node::device_type>& indexList,
198 GlobalOrdinal indexBase,
212template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
221#ifdef HAVE_XPETRA_TPETRA
230 return rcp(
new TpetraMap<LocalOrdinal,GlobalOrdinal,Node>(Tpetra::createLocalMapWithNode<LocalOrdinal,GlobalOrdinal,Node>(numElements, comm)));
242template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
251#ifdef HAVE_XPETRA_TPETRA
254 return rcp(
new TpetraMap<LocalOrdinal,GlobalOrdinal,Node>(Tpetra::createLocalMapWithNode<LocalOrdinal,GlobalOrdinal,Node>(numElements, comm)));
267template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
276#ifdef HAVE_XPETRA_TPETRA
278 return rcp(
new TpetraMap<LocalOrdinal, GlobalOrdinal, Node>(
279 Tpetra::createUniformContigMapWithNode<LocalOrdinal, GlobalOrdinal, Node>(numElements, comm)));
288template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
297#ifdef HAVE_XPETRA_TPETRA
300 Tpetra::createUniformContigMapWithNode<LocalOrdinal, GlobalOrdinal, Node>(numElements, comm)));
308template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
313 size_t localNumElements,
318#ifdef HAVE_XPETRA_TPETRA
321 Tpetra::createContigMapWithNode<LocalOrdinal, GlobalOrdinal, Node>(numElements, localNumElements, comm)));
333template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
338 size_t localNumElements,
343#ifdef HAVE_XPETRA_TPETRA
346 return rcp(
new TpetraMap<LocalOrdinal, GlobalOrdinal, Node>(
347 Tpetra::createContigMapWithNode<LocalOrdinal, GlobalOrdinal, Node>(numElements, localNumElements, comm)));
#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.
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< 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.
MapFactory()
Private constructor. This is a static class.
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.