Xpetra Version of the Day
Xpetra_TpetraMap_decl.hpp
Go to the documentation of this file.
1// @HEADER
2//
3// ***********************************************************************
4//
5// Xpetra: A linear algebra interface package
6// Copyright 2012 Sandia Corporation
7//
8// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9// the U.S. Government retains certain rights in this software.
10//
11// Redistribution and use in source and binary forms, with or without
12// modification, are permitted provided that the following conditions are
13// met:
14//
15// 1. Redistributions of source code must retain the above copyright
16// notice, this list of conditions and the following disclaimer.
17//
18// 2. Redistributions in binary form must reproduce the above copyright
19// notice, this list of conditions and the following disclaimer in the
20// documentation and/or other materials provided with the distribution.
21//
22// 3. Neither the name of the Corporation nor the names of the
23// contributors may be used to endorse or promote products derived from
24// this software without specific prior written permission.
25//
26// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37//
38// Questions? Contact
39// Jonathan Hu (jhu@sandia.gov)
40// Andrey Prokopenko (aprokop@sandia.gov)
41// Ray Tuminaro (rstumin@sandia.gov)
42//
43// ***********************************************************************
44//
45// @HEADER
46#ifndef XPETRA_TPETRAMAP_DECL_HPP
47#define XPETRA_TPETRAMAP_DECL_HPP
48
49/* this file is automatically generated - do not edit (see script/tpetra.py) */
50
52
53#include <Tpetra_Map.hpp>
54
55#include "Xpetra_Map_decl.hpp"
56#include "Xpetra_Utils.hpp"
57
58#include "Xpetra_Exceptions.hpp"
59
60namespace Xpetra {
61
62 template <class LocalOrdinal, class GlobalOrdinal, class Node>
63 const RCP<Map<LocalOrdinal,GlobalOrdinal,Node> > toXpetraNonConst(const RCP<const Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> >& map);
64
65 template <class LocalOrdinal,
66 class GlobalOrdinal,
69 : public virtual Map<LocalOrdinal,GlobalOrdinal,Node> {
70
71 public:
72
74
75
76
78
79
80 TpetraMap (global_size_t numGlobalElements,
81 GlobalOrdinal indexBase,
82 const Teuchos::RCP< const Teuchos::Comm< int > > &comm,
84
85
87
88
89 TpetraMap (global_size_t numGlobalElements,
90 size_t numLocalElements,
91 GlobalOrdinal indexBase,
92 const Teuchos::RCP< const Teuchos::Comm< int > > &comm);
93
94
96
97
98 TpetraMap (global_size_t numGlobalElements,
100 GlobalOrdinal indexBase,
101 const Teuchos::RCP< const Teuchos::Comm< int > > &comm);
102
103
104#ifdef HAVE_XPETRA_KOKKOS_REFACTOR
105#ifdef HAVE_XPETRA_TPETRA
107 TpetraMap (global_size_t numGlobalElements,
108 const Kokkos::View<const GlobalOrdinal*, typename Node::device_type>& indexList,
109 GlobalOrdinal indexBase,
110 const Teuchos::RCP< const Teuchos::Comm< int > > &comm);
111#endif
112#endif
113
115 ~TpetraMap();
116
117
119
120
123
125 size_t getNodeNumElements() const;
126
128 GlobalOrdinal getIndexBase() const;
129
131 LocalOrdinal getMinLocalIndex() const;
132
134 LocalOrdinal getMaxLocalIndex() const;
135
137 GlobalOrdinal getMinGlobalIndex() const;
138
140 GlobalOrdinal getMaxGlobalIndex() const;
141
143 GlobalOrdinal getMinAllGlobalIndex() const;
144
146 GlobalOrdinal getMaxAllGlobalIndex() const;
147
149 LocalOrdinal getLocalElement(GlobalOrdinal globalIndex) const;
150
152 GlobalOrdinal getGlobalElement(LocalOrdinal localIndex) const;
153
156
159
162
164
166
167
169 bool isNodeLocalElement(LocalOrdinal localIndex) const;
170
172 bool isNodeGlobalElement(GlobalOrdinal globalIndex) const;
173
175 bool isContiguous() const;
176
178 bool isDistributed() const;
179
182
185
187
189
190
193
194
196
198
199
201 std::string description() const;
202
205
208
210
212
213
215 TpetraMap(const Teuchos::RCP<const Tpetra::Map<LocalOrdinal, GlobalOrdinal, Node > > &map);
216
218 UnderlyingLib lib() const;
219
222
223#ifdef HAVE_XPETRA_KOKKOS_REFACTOR
224#ifdef HAVE_XPETRA_TPETRA
225 using local_map_type = typename Map<LocalOrdinal, GlobalOrdinal, Node>::local_map_type;
227 local_map_type getLocalMap () const;
228#endif
229#endif
230
232
233 protected:
234
236
237 }; // TpetraMap class
238
239
240 template <class LocalOrdinal, class GlobalOrdinal, class Node>
241 const Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> & toTpetra(const Map<LocalOrdinal,GlobalOrdinal,Node> &map) {
242 // TODO: throw exception
244 return *tpetraMap.getTpetra_Map();
245 }
246
247 template <class LocalOrdinal, class GlobalOrdinal, class Node>
250 if (map != Teuchos::null) {
251 XPETRA_RCP_DYNAMIC_CAST(const TpetraMapClass, map->getMap(), tpetraMap, "toTpetra");
252 return tpetraMap->getTpetra_Map();
253 }
254 return Teuchos::null;
255 }
256
257 // In some cases (for instance, in MueLu adapter to Tpetra operator), we need to return a reference. This is only possible if
258 // we assume that the map argument is nonzero
259 template <class LocalOrdinal, class GlobalOrdinal, class Node>
261 TEUCHOS_TEST_FOR_EXCEPTION(map.is_null(), std::invalid_argument, "map must be nonzero");
263 XPETRA_RCP_DYNAMIC_CAST(const TpetraMapClass, map->getMap(), tpetraMap, "toTpetra");
264 return tpetraMap->getTpetra_Map();
265 }
266
267 template <class LocalOrdinal, class GlobalOrdinal, class Node>
268 const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > toXpetra(const RCP<const Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> >& map) {
269 if (!map.is_null())
271
272 return Teuchos::null;
273 }
274
275 template <class LocalOrdinal, class GlobalOrdinal, class Node>
276 const RCP<Map<LocalOrdinal,GlobalOrdinal,Node> > toXpetraNonConst(const RCP<const Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> >& map) {
277 if (!map.is_null())
279
280 return Teuchos::null;
281 }
282
283
284 namespace useTpetra {
285
287 template <class LocalOrdinal, class GlobalOrdinal, class Node>
289 createLocalMapWithNode(size_t numElements, const Teuchos::RCP< const Teuchos::Comm< int > > &comm)
290 {
291 XPETRA_MONITOR("useTpetra::createLocalMapWithNode");
292
293 return rcp(new TpetraMap<LocalOrdinal,GlobalOrdinal,Node>(Tpetra::createLocalMapWithNode<LocalOrdinal,GlobalOrdinal,Node>(numElements, comm)));
294 }
295
297 template <class LocalOrdinal, class GlobalOrdinal>
299 createContigMap(global_size_t numElements, size_t localNumElements, const Teuchos::RCP< const Teuchos::Comm< int > > &comm) {
300 XPETRA_MONITOR("useTpetra::createContigMap");
301
302 return rcp(new TpetraMap<LocalOrdinal,GlobalOrdinal, typename Tpetra::Map<>::node_type>(Tpetra::createContigMap<LocalOrdinal,GlobalOrdinal, typename Tpetra::Map<>::node_type>(numElements, localNumElements, comm)));
303 }
304
306 template <class LocalOrdinal, class GlobalOrdinal, class Node>
308 createContigMapWithNode(global_size_t numElements, size_t localNumElements,
309 const Teuchos::RCP< const Teuchos::Comm< int > > &comm)
310 {
311 XPETRA_MONITOR("useTpetra::createContigMap");
312 return rcp(new TpetraMap<LocalOrdinal,GlobalOrdinal,Node>(Tpetra::createContigMapWithNode<LocalOrdinal,GlobalOrdinal,Node>(numElements, localNumElements, comm)));
313 }
314 } // useTpetra namespace
315
316#define XPETRA_TPETRAMAP_SHORT
317} // Xpetra namespace
318#endif // XPETRA_TPETRAMAP_DECL_HPP
319
#define XPETRA_MONITOR(funcName)
#define XPETRA_RCP_DYNAMIC_CAST(type, obj, newObj, exceptionMsg)
static const EVerbosityLevel verbLevel_default
virtual RCP< const Xpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > getMap() const
bool isDistributed() const
Whether this Map is globally distributed or locally replicated.
Teuchos::ArrayView< const GlobalOrdinal > getNodeElementList() const
Return a view of the global indices owned by this node.
UnderlyingLib lib() const
Get the library used by this object (Tpetra or Epetra?)
LocalOrdinal getLocalElement(GlobalOrdinal globalIndex) const
The local index corresponding to the given global index.
LookupStatus getRemoteIndexList(const Teuchos::ArrayView< const GlobalOrdinal > &GIDList, const Teuchos::ArrayView< int > &nodeIDList, const Teuchos::ArrayView< LocalOrdinal > &LIDList) const
Return the process IDs and corresponding local IDs for the given global IDs.
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel=Teuchos::Describable::verbLevel_default) const
Print this object with the given verbosity level to the given FancyOStream.
GlobalOrdinal getMaxAllGlobalIndex() const
The maximum global index over all processes in the communicator.
std::string description() const
Return a simple one-line description of this object.
global_size_t getGlobalNumElements() const
The number of elements in this Map.
bool isContiguous() const
True if this Map is distributed contiguously, else false.
TpetraMap(global_size_t numGlobalElements, GlobalOrdinal indexBase, const Teuchos::RCP< const Teuchos::Comm< int > > &comm, LocalGlobal lg=GloballyDistributed)
Constructor with Tpetra-defined contiguous uniform distribution.
bool isSameAs(const Map< LocalOrdinal, GlobalOrdinal, Node > &map) const
True if and only if map is identical to this Map.
RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > getTpetra_Map() const
Get the underlying Tpetra map.
RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > removeEmptyProcesses() const
Return a new Map with processes with zero elements removed.
RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > map_
GlobalOrdinal getIndexBase() const
The index base for this Map.
GlobalOrdinal getMinGlobalIndex() const
The minimum global index owned by the calling process.
GlobalOrdinal getMinAllGlobalIndex() const
The minimum global index over all processes in the communicator.
size_t getNodeNumElements() const
The number of elements belonging to the calling node.
bool isNodeLocalElement(LocalOrdinal localIndex) const
True if the local index is valid for this Map on this node, else false.
LocalOrdinal getMaxLocalIndex() const
The maximum local index on the calling process.
RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > replaceCommWithSubset(const Teuchos::RCP< const Teuchos::Comm< int > > &newComm) const
Replace this Map's communicator with a subset communicator.
bool isCompatible(const Map< LocalOrdinal, GlobalOrdinal, Node > &map) const
True if and only if map is compatible with this Map.
Teuchos::RCP< const Teuchos::Comm< int > > getComm() const
Get this Map's Comm object.
GlobalOrdinal getGlobalElement(LocalOrdinal localIndex) const
The global index corresponding to the given local index.
GlobalOrdinal getMaxGlobalIndex() const
The maximum global index owned by the calling process.
LocalOrdinal getMinLocalIndex() const
The minimum local index.
bool isNodeGlobalElement(GlobalOrdinal globalIndex) const
True if the global index is found in this Map on this node, else false.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Teuchos::RCP< const TpetraMap< LocalOrdinal, GlobalOrdinal, Node > > createLocalMapWithNode(size_t numElements, const Teuchos::RCP< const Teuchos::Comm< int > > &comm)
Non-member function to create a locally replicated Map with a specified node.
Teuchos::RCP< const TpetraMap< LocalOrdinal, GlobalOrdinal, Node > > createContigMapWithNode(global_size_t numElements, size_t localNumElements, const Teuchos::RCP< const Teuchos::Comm< int > > &comm)
Non-member function to create a (potentially) non-uniform, contiguous Map with a user-specified node.
Teuchos::RCP< const TpetraMap< LocalOrdinal, GlobalOrdinal, typename Tpetra::Map<>::node_type > > createContigMap(global_size_t numElements, size_t localNumElements, const Teuchos::RCP< const Teuchos::Comm< int > > &comm)
Non-member function to create a (potentially) non-uniform, contiguous Map with the default node.
Xpetra namespace
const RCP< Map< LocalOrdinal, GlobalOrdinal, Node > > toXpetraNonConst(const RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > &map)
size_t global_size_t
Global size_t object.
RCP< const CrsGraph< int, GlobalOrdinal, Node > > toXpetra(const Epetra_CrsGraph &g)
const RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > toTpetraNonZero(const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &map)
RCP< const Tpetra::CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > toTpetra(const RCP< const CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > &graph)