All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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.hpp"
56 #include "Xpetra_Utils.hpp"
57 
58 #include "Xpetra_Exceptions.hpp"
59 
60 namespace 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,
68  class TpetraMap
69  : public virtual Map<LocalOrdinal,GlobalOrdinal,Node> {
70 
71  public:
72 
74 
75 
76 
78 #ifdef TPETRA_ENABLE_DEPRECATED_CODE
79  TPETRA_DEPRECATED
80  TpetraMap (global_size_t numGlobalElements,
81  GlobalOrdinal indexBase,
82  const Teuchos::RCP< const Teuchos::Comm< int > > &comm,
83  LocalGlobal lg,
84  const Teuchos::RCP< Node > & /* node */);
85 #endif // TPETRA_ENABLE_DEPRECATED_CODE
86 
87 
88  TpetraMap (global_size_t numGlobalElements,
89  GlobalOrdinal indexBase,
90  const Teuchos::RCP< const Teuchos::Comm< int > > &comm,
92 
93 
95 #ifdef TPETRA_ENABLE_DEPRECATED_CODE
96  TPETRA_DEPRECATED
97  TpetraMap (global_size_t numGlobalElements,
98  size_t numLocalElements,
99  GlobalOrdinal indexBase,
100  const Teuchos::RCP< const Teuchos::Comm< int > > &comm,
101  const Teuchos::RCP< Node > & /* node */);
102 #endif // TPETRA_ENABLE_DEPRECATED_CODE
103 
104 
105  TpetraMap (global_size_t numGlobalElements,
106  size_t numLocalElements,
107  GlobalOrdinal indexBase,
108  const Teuchos::RCP< const Teuchos::Comm< int > > &comm);
109 
110 
112 #ifdef TPETRA_ENABLE_DEPRECATED_CODE
113  TPETRA_DEPRECATED
114  TpetraMap (global_size_t numGlobalElements,
116  GlobalOrdinal indexBase,
117  const Teuchos::RCP< const Teuchos::Comm< int > > &comm,
118  const Teuchos::RCP< Node > & /* node */);
119 #endif // TPETRA_ENABLE_DEPRECATED_CODE
120 
121 
122  TpetraMap (global_size_t numGlobalElements,
124  GlobalOrdinal indexBase,
125  const Teuchos::RCP< const Teuchos::Comm< int > > &comm);
126 
127 
128 #ifdef HAVE_XPETRA_KOKKOS_REFACTOR
129 #ifdef HAVE_XPETRA_TPETRA
130  TpetraMap (global_size_t numGlobalElements,
132  const Kokkos::View<const GlobalOrdinal*, typename Node::device_type>& indexList,
133  GlobalOrdinal indexBase,
134  const Teuchos::RCP< const Teuchos::Comm< int > > &comm);
135 #endif
136 #endif
137 
139  ~TpetraMap();
140 
141 
143 
144 
147 
149  size_t getNodeNumElements() const;
150 
152  GlobalOrdinal getIndexBase() const;
153 
155  LocalOrdinal getMinLocalIndex() const;
156 
158  LocalOrdinal getMaxLocalIndex() const;
159 
161  GlobalOrdinal getMinGlobalIndex() const;
162 
164  GlobalOrdinal getMaxGlobalIndex() const;
165 
167  GlobalOrdinal getMinAllGlobalIndex() const;
168 
170  GlobalOrdinal getMaxAllGlobalIndex() const;
171 
173  LocalOrdinal getLocalElement(GlobalOrdinal globalIndex) const;
174 
176  GlobalOrdinal getGlobalElement(LocalOrdinal localIndex) const;
177 
180 
183 
186 
188 
190 
191 
193  bool isNodeLocalElement(LocalOrdinal localIndex) const;
194 
196  bool isNodeGlobalElement(GlobalOrdinal globalIndex) const;
197 
199  bool isContiguous() const;
200 
202  bool isDistributed() const;
203 
206 
208  bool isSameAs(const Map< LocalOrdinal, GlobalOrdinal, Node > &map) const;
209 
211 
213 
214 
217 
218 #ifdef TPETRA_ENABLE_DEPRECATED_CODE
219  Teuchos::RCP< Node > getNode() const;
221 #endif // TPETRA_ENABLE_DEPRECATED_CODE
222 
224 
226 
227 
229  std::string description() const;
230 
233 
236 
237 #ifdef XPETRA_ENABLE_DEPRECATED_CODE
238  template<class Node2>
239  RCP<Map<LocalOrdinal, GlobalOrdinal, Node2> > XPETRA_DEPRECATED clone(const RCP<Node2> &node2) const {
240  return toXpetraNonConst(map_->clone(node2));
241  }
242 #endif
243 
245 
247 
248 
250  TpetraMap(const Teuchos::RCP<const Tpetra::Map<LocalOrdinal, GlobalOrdinal, Node > > &map);
251 
253  UnderlyingLib lib() const;
254 
257 
258 #ifdef HAVE_XPETRA_KOKKOS_REFACTOR
259 #ifdef HAVE_XPETRA_TPETRA
260  using local_map_type = typename Map<LocalOrdinal, GlobalOrdinal, Node>::local_map_type;
262  local_map_type getLocalMap () const;
263 #endif
264 #endif
265 
267 
268  protected:
269 
271 
272  }; // TpetraMap class
273 
274 
275  template <class LocalOrdinal, class GlobalOrdinal, class Node>
276  const Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> & toTpetra(const Map<LocalOrdinal,GlobalOrdinal,Node> &map) {
277  // TODO: throw exception
278  const TpetraMap<LocalOrdinal,GlobalOrdinal,Node> & tpetraMap = dynamic_cast<const TpetraMap<LocalOrdinal,GlobalOrdinal,Node> &>(*map.getMap());
279  return *tpetraMap.getTpetra_Map();
280  }
281 
282  template <class LocalOrdinal, class GlobalOrdinal, class Node>
284  typedef TpetraMap<LocalOrdinal, GlobalOrdinal, Node> TpetraMapClass;
285  if (map != Teuchos::null) {
286  XPETRA_RCP_DYNAMIC_CAST(const TpetraMapClass, map->getMap(), tpetraMap, "toTpetra");
287  return tpetraMap->getTpetra_Map();
288  }
289  return Teuchos::null;
290  }
291 
292  // In some cases (for instance, in MueLu adapter to Tpetra operator), we need to return a reference. This is only possible if
293  // we assume that the map argument is nonzero
294  template <class LocalOrdinal, class GlobalOrdinal, class Node>
296  TEUCHOS_TEST_FOR_EXCEPTION(map.is_null(), std::invalid_argument, "map must be nonzero");
297  typedef TpetraMap<LocalOrdinal, GlobalOrdinal, Node> TpetraMapClass;
298  XPETRA_RCP_DYNAMIC_CAST(const TpetraMapClass, map->getMap(), tpetraMap, "toTpetra");
299  return tpetraMap->getTpetra_Map();
300  }
301 
302  template <class LocalOrdinal, class GlobalOrdinal, class Node>
303  const RCP<const Map<LocalOrdinal,GlobalOrdinal,Node> > toXpetra(const RCP<const Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> >& map) {
304  if (!map.is_null())
306 
307  return Teuchos::null;
308  }
309 
310  template <class LocalOrdinal, class GlobalOrdinal, class Node>
311  const RCP<Map<LocalOrdinal,GlobalOrdinal,Node> > toXpetraNonConst(const RCP<const Tpetra::Map<LocalOrdinal,GlobalOrdinal,Node> >& map) {
312  if (!map.is_null())
314 
315  return Teuchos::null;
316  }
317 
318 
319  namespace useTpetra {
320 
322 #ifdef TPETRA_ENABLE_DEPRECATED_CODE
323  template <class LocalOrdinal, class GlobalOrdinal, class Node>
324  TPETRA_DEPRECATED
326  createLocalMapWithNode(size_t numElements, const Teuchos::RCP< const Teuchos::Comm< int > > &comm, const Teuchos::RCP< Node > & /* node */)
327  {
328  return createLocalMapWithNode<LocalOrdinal,GlobalOrdinal,Node>
329  (numElements, comm);
330  }
331 #endif // TPETRA_ENABLE_DEPRECATED_CODE
332  template <class LocalOrdinal, class GlobalOrdinal, class Node>
334  createLocalMapWithNode(size_t numElements, const Teuchos::RCP< const Teuchos::Comm< int > > &comm)
335  {
336  XPETRA_MONITOR("useTpetra::createLocalMapWithNode");
337 
338  return rcp(new TpetraMap<LocalOrdinal,GlobalOrdinal,Node>(Tpetra::createLocalMapWithNode<LocalOrdinal,GlobalOrdinal,Node>(numElements, comm)));
339  }
340 
342  template <class LocalOrdinal, class GlobalOrdinal>
344  createContigMap(global_size_t numElements, size_t localNumElements, const Teuchos::RCP< const Teuchos::Comm< int > > &comm) {
345  XPETRA_MONITOR("useTpetra::createContigMap");
346 
347  return rcp(new TpetraMap<LocalOrdinal,GlobalOrdinal, typename Tpetra::Map<>::node_type>(Tpetra::createContigMap<LocalOrdinal,GlobalOrdinal, typename Tpetra::Map<>::node_type>(numElements, localNumElements, comm)));
348  }
349 
351 #ifdef TPETRA_ENABLE_DEPRECATED_CODE
352  template <class LocalOrdinal, class GlobalOrdinal, class Node>
353  TPETRA_DEPRECATED
355  createContigMapWithNode(global_size_t numElements, size_t localNumElements,
356  const Teuchos::RCP< const Teuchos::Comm< int > > &comm, const TPETRA_DEPRECATED Teuchos::RCP< Node > & /* node */ )
357  {
358  return createContigMapWithNode<LocalOrdinal,GlobalOrdinal,Node>
359  (numElements, localNumElements, comm);
360  }
361 #endif // TPETRA_ENABLE_DEPRECATED_CODE
362  template <class LocalOrdinal, class GlobalOrdinal, class Node>
364  createContigMapWithNode(global_size_t numElements, size_t localNumElements,
365  const Teuchos::RCP< const Teuchos::Comm< int > > &comm)
366  {
367  XPETRA_MONITOR("useTpetra::createContigMap");
368  return rcp(new TpetraMap<LocalOrdinal,GlobalOrdinal,Node>(Tpetra::createContigMapWithNode<LocalOrdinal,GlobalOrdinal,Node>(numElements, localNumElements, comm)));
369  }
370  } // useTpetra namespace
371 
372 #define XPETRA_TPETRAMAP_SHORT
373 } // Xpetra namespace
374 #endif // XPETRA_TPETRAMAP_DECL_HPP
375 
Teuchos::ArrayView< const GlobalOrdinal > getNodeElementList() const
Return a view of the global indices owned by this node.
RCP< Map< LocalOrdinal, GlobalOrdinal, Node2 > > clone(const Map< LocalOrdinal, GlobalOrdinal, Node1 > &map, const RCP< Node2 > &node2)
std::string description() const
Return a simple one-line description of this object.
const RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > toTpetraNonZero(const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &map)
bool isDistributed() const
Whether this Map is globally distributed or locally replicated.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
GlobalOrdinal getMaxAllGlobalIndex() const
The maximum global index over all processes in the communicator.
bool isNodeLocalElement(LocalOrdinal localIndex) const
True if the local index is valid for this Map on this node, else false.
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.
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.
virtual RCP< const Xpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > getMap() const
LocalOrdinal getMinLocalIndex() const
The minimum local index.
global_size_t getGlobalNumElements() const
The number of elements in this Map.
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.
bool isSameAs(const Map< LocalOrdinal, GlobalOrdinal, Node > &map) const
True if and only if map is identical to this Map.
Teuchos::RCP< const Teuchos::Comm< int > > getComm() const
Get this Map&#39;s Comm object.
bool isContiguous() const
True if this Map is distributed contiguously, else false.
RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > removeEmptyProcesses() const
Return a new Map with processes with zero elements removed.
size_t global_size_t
Global size_t object.
static const EVerbosityLevel verbLevel_default
GlobalOrdinal getIndexBase() const
The index base for this Map.
RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > getTpetra_Map() const
Get the underlying Tpetra map.
#define XPETRA_RCP_DYNAMIC_CAST(type, obj, newObj, exceptionMsg)
RCP< const Tpetra::CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > toTpetra(const RCP< const CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > &graph)
GlobalOrdinal getGlobalElement(LocalOrdinal localIndex) const
The global index corresponding to the given local index.
RCP< const CrsGraph< int, GlobalOrdinal, Node > > toXpetra(const Epetra_CrsGraph &g)
size_t getNodeNumElements() const
The number of elements belonging to the calling node.
GlobalOrdinal getMaxGlobalIndex() const
The maximum global index owned by the calling process.
LocalOrdinal getLocalElement(GlobalOrdinal globalIndex) const
The local index corresponding to the given global index.
UnderlyingLib lib() const
Get the library used by this object (Tpetra or Epetra?)
LocalOrdinal getMaxLocalIndex() const
The maximum local index on the calling process.
GlobalOrdinal getMinGlobalIndex() const
The minimum global index owned by the calling process.
RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > map_
bool isNodeGlobalElement(GlobalOrdinal globalIndex) const
True if the global index is found in this Map on this node, else false.
#define XPETRA_MONITOR(funcName)
bool isCompatible(const Map< LocalOrdinal, GlobalOrdinal, Node > &map) const
True if and only if map is compatible with this Map.
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...
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...
GlobalOrdinal getMinAllGlobalIndex() const
The minimum global index over all processes in the communicator.
RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > replaceCommWithSubset(const Teuchos::RCP< const Teuchos::Comm< int > > &newComm) const
Replace this Map&#39;s communicator with a subset communicator.
const RCP< Map< LocalOrdinal, GlobalOrdinal, Node > > toXpetraNonConst(const RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > &map)
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.