Xpetra Version of the Day
Loading...
Searching...
No Matches
Xpetra_Map_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_MAP_DECL_HPP
47#define XPETRA_MAP_DECL_HPP
48
49#include "Xpetra_ConfigDefs.hpp"
50
51#include <KokkosCompat_DefaultNode.hpp>
52#include <Teuchos_Describable.hpp>
53
54#ifdef HAVE_XPETRA_EPETRA
55 #include "Epetra_config.h"
56#endif
57
58 #ifdef HAVE_XPETRA_TPETRA
59 #include <Tpetra_Map.hpp>
60 #endif
61
62namespace Xpetra {
63
64 // TODO move this typedef to another place
65 // Node which is used for Epetra. This can be either the
66 // Serial node or OpenMP node (but not both)
67#ifdef HAVE_XPETRA_EPETRA
68# ifdef EPETRA_HAVE_OMP
70# else
72# endif
73#endif
74
75
82
83
84 template <class LocalOrdinal,
85 class GlobalOrdinal,
87 class Map
89 {
90 public:
91 typedef LocalOrdinal local_ordinal_type;
92 typedef GlobalOrdinal global_ordinal_type;
93 typedef Node node_type;
94
96
97
99 virtual ~Map();
100
102
104
105
108
110 virtual size_t getLocalNumElements() const = 0;
111
113 virtual GlobalOrdinal getIndexBase() const = 0;
114
116 virtual LocalOrdinal getMinLocalIndex() const = 0;
117
119 virtual LocalOrdinal getMaxLocalIndex() const = 0;
120
122 virtual GlobalOrdinal getMinGlobalIndex() const = 0;
123
125 virtual GlobalOrdinal getMaxGlobalIndex() const = 0;
126
128 virtual GlobalOrdinal getMinAllGlobalIndex() const = 0;
129
131 virtual GlobalOrdinal getMaxAllGlobalIndex() const = 0;
132
134 virtual LocalOrdinal getLocalElement(GlobalOrdinal globalIndex) const = 0;
135
137 virtual GlobalOrdinal getGlobalElement(LocalOrdinal localIndex) const = 0;
138
141 const Teuchos::ArrayView< int > &nodeIDList,
142 const Teuchos::ArrayView< LocalOrdinal > &LIDList) const = 0;
143
146 const Teuchos::ArrayView< int > &nodeIDList) const = 0;
147
150
152
154
155
157 virtual bool isNodeLocalElement(LocalOrdinal localIndex) const = 0;
158
160 virtual bool isNodeGlobalElement(GlobalOrdinal globalIndex) const = 0;
161
163 virtual bool isContiguous() const = 0;
164
166 virtual bool isDistributed() const = 0;
167
169 virtual bool isCompatible(const Map< LocalOrdinal, GlobalOrdinal, Node > &map) const = 0;
170
172 virtual bool isSameAs(const Map< LocalOrdinal, GlobalOrdinal, Node > &map) const = 0;
173
175
177
178
181
182
184
186
187
189 virtual std::string description() const = 0;
190
194
196
198
199
202
205 replaceCommWithSubset(const Teuchos::RCP< const Teuchos::Comm< int > > &newComm) const = 0;
206
208
210
211
213 virtual UnderlyingLib lib() const = 0;
214
215 // TODO: find a better solution for this hack
216 // The problem is that EpetraMap, TpetraMap and StridedMap all inherit Map. To have proper toEpetra() we
217 // need to understand the type of underlying matrix. But in src/Map we have no knowledge of StridedMaps, so
218 // we cannot check for it by casting. This function allows us to avoid the restriction, as StridedMap redefines
219 // it to return the base map.
221
222#ifdef HAVE_XPETRA_TPETRA
223 typedef typename Tpetra::Map<LocalOrdinal, GlobalOrdinal, Node>::local_map_type local_map_type;
224
226 virtual local_map_type getLocalMap () const = 0;
227#endif
228
230
231 }; // Map class
232
233} // Xpetra namespace
234
235#define XPETRA_MAP_SHORT
236#endif // XPETRA_MAP_DECL_HPP
237
238
static const EVerbosityLevel verbLevel_default
virtual GlobalOrdinal getMaxGlobalIndex() const =0
The maximum global index owned by the calling process.
virtual LocalOrdinal getMinLocalIndex() const =0
The minimum local index.
GlobalOrdinal global_ordinal_type
virtual GlobalOrdinal getIndexBase() const =0
The index base for this Map.
virtual bool isDistributed() const =0
Whether this Map is globally distributed or locally replicated.
virtual local_map_type getLocalMap() const =0
Get the local Map for Kokkos kernels.
virtual UnderlyingLib lib() const =0
Get the library used by this object (Tpetra or Epetra?)
virtual RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > removeEmptyProcesses() const =0
Return a new Map with processes with zero elements removed.
virtual bool isNodeGlobalElement(GlobalOrdinal globalIndex) const =0
Whether the given global index is valid for this Map on this process.
Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node >::local_map_type local_map_type
virtual global_size_t getGlobalNumElements() const =0
The number of elements in this Map.
virtual bool isContiguous() const =0
True if this Map is distributed contiguously, else false.
virtual GlobalOrdinal getMinAllGlobalIndex() const =0
The minimum global index over all processes in the communicator.
virtual RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > replaceCommWithSubset(const Teuchos::RCP< const Teuchos::Comm< int > > &newComm) const =0
Replace this Map's communicator with a subset communicator.
virtual GlobalOrdinal getGlobalElement(LocalOrdinal localIndex) const =0
The global index corresponding to the given local index.
virtual RCP< const Xpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > getMap() const
virtual LocalOrdinal getLocalElement(GlobalOrdinal globalIndex) const =0
The local index corresponding to the given global index.
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel=Teuchos::Describable::verbLevel_default) const =0
Print this object with the given verbosity level to the given Teuchos::FancyOStream.
virtual LookupStatus getRemoteIndexList(const Teuchos::ArrayView< const GlobalOrdinal > &GIDList, const Teuchos::ArrayView< int > &nodeIDList) const =0
Return the process ranks for the given global indices.
virtual LocalOrdinal getMaxLocalIndex() const =0
The maximum local index on the calling process.
virtual ~Map()
Destructor.
virtual GlobalOrdinal getMaxAllGlobalIndex() const =0
The maximum global index over all processes in the communicator.
virtual std::string description() const =0
Return a simple one-line description of this object.
LocalOrdinal local_ordinal_type
virtual size_t getLocalNumElements() const =0
The number of elements belonging to the calling process.
virtual bool isCompatible(const Map< LocalOrdinal, GlobalOrdinal, Node > &map) const =0
True if and only if map is compatible with this Map.
virtual bool isSameAs(const Map< LocalOrdinal, GlobalOrdinal, Node > &map) const =0
True if and only if map is identical to this Map.
virtual GlobalOrdinal getMinGlobalIndex() const =0
The minimum global index owned by the calling process.
virtual bool isNodeLocalElement(LocalOrdinal localIndex) const =0
Whether the given local index is valid for this Map on this process.
virtual Teuchos::ArrayView< const GlobalOrdinal > getLocalElementList() const =0
Return a view of the global indices owned by this process.
virtual Teuchos::RCP< const Teuchos::Comm< int > > getComm() const =0
Get this Map's Comm object.
virtual LookupStatus getRemoteIndexList(const Teuchos::ArrayView< const GlobalOrdinal > &GIDList, const Teuchos::ArrayView< int > &nodeIDList, const Teuchos::ArrayView< LocalOrdinal > &LIDList) const =0
Return the process ranks and corresponding local indices for the given global indices.
Xpetra namespace
size_t global_size_t
Global size_t object.
Kokkos::Compat::KokkosSerialWrapperNode EpetraNode