Xpetra  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros 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_decl.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 
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,
99  const Teuchos::ArrayView< const GlobalOrdinal > &elementList,
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
106  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 
155  LookupStatus getRemoteIndexList(const Teuchos::ArrayView< const GlobalOrdinal > &GIDList, const Teuchos::ArrayView< int > &nodeIDList, const Teuchos::ArrayView< LocalOrdinal > &LIDList) const;
156 
158  LookupStatus getRemoteIndexList(const Teuchos::ArrayView< const GlobalOrdinal > &GIDList, const Teuchos::ArrayView< int > &nodeIDList) const;
159 
161  Teuchos::ArrayView< const GlobalOrdinal > getNodeElementList() const;
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 
184  bool isSameAs(const Map< LocalOrdinal, GlobalOrdinal, Node > &map) const;
185 
187 
189 
190 
192  Teuchos::RCP< const Teuchos::Comm< int > > getComm() const;
193 
194 
196 
198 
199 
201  std::string description() const;
202 
204  void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel=Teuchos::Describable::verbLevel_default) const;
205 
206  RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> > removeEmptyProcesses () const;
207  RCP<const Map<LocalOrdinal, GlobalOrdinal, Node> > replaceCommWithSubset (const Teuchos::RCP<const Teuchos::Comm<int> >& newComm) const;
208 
210 
212 
213 
215  TpetraMap(const Teuchos::RCP<const Tpetra::Map<LocalOrdinal, GlobalOrdinal, Node > > &map);
216 
218  UnderlyingLib lib() const;
219 
221  RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > getTpetra_Map() const;
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 
235  RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > map_;
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
243  const TpetraMap<LocalOrdinal,GlobalOrdinal,Node> & tpetraMap = dynamic_cast<const TpetraMap<LocalOrdinal,GlobalOrdinal,Node> &>(*map.getMap());
244  return *tpetraMap.getTpetra_Map();
245  }
246 
247  template <class LocalOrdinal, class GlobalOrdinal, class Node>
248  const RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > toTpetra(const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &map) {
249  typedef TpetraMap<LocalOrdinal, GlobalOrdinal, Node> TpetraMapClass;
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>
260  const RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > toTpetraNonZero(const RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &map) {
261  TEUCHOS_TEST_FOR_EXCEPTION(map.is_null(), std::invalid_argument, "map must be nonzero");
262  typedef TpetraMap<LocalOrdinal, GlobalOrdinal, Node> TpetraMapClass;
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())
278  return rcp(new TpetraMap<LocalOrdinal,GlobalOrdinal,Node>(map));
279 
280  return Teuchos::null;
281  }
282 
283 
284  namespace useTpetra {
285 
287  template <class LocalOrdinal, class GlobalOrdinal, class Node>
288  Teuchos::RCP< const TpetraMap<LocalOrdinal,GlobalOrdinal,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>
298  Teuchos::RCP< const TpetraMap<LocalOrdinal,GlobalOrdinal, typename Tpetra::Map<>::node_type> >
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>
307  Teuchos::RCP< const TpetraMap<LocalOrdinal,GlobalOrdinal,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 
Teuchos::ArrayView< const GlobalOrdinal > getNodeElementList() const
Return a view of the global indices owned by this node.
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.
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::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.
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.