47 #ifndef PACKAGES_XPETRA_IMPORT_UTILS_HPP_
48 #define PACKAGES_XPETRA_IMPORT_UTILS_HPP_
52 #include "Xpetra_Map.hpp"
54 #include "Teuchos_Array.hpp"
55 #include "Teuchos_ArrayView.hpp"
59 #ifdef HAVE_XPETRA_EPETRA
60 #include "Epetra_Util.h"
64 #ifdef HAVE_XPETRA_TPETRA
65 #include "Xpetra_TpetraImport.hpp"
66 #include "Tpetra_Import_Util.hpp"
78 template <
class LocalOrdinal,
80 class Node = Tpetra::KokkosClassic::DefaultNode::DefaultNodeType>
82 #undef XPETRA_IMPORTUTILS_SHORT
93 Teuchos::Array<std::pair<int, GlobalOrdinal> >& gpids,
94 bool use_minus_one_for_local) {
97 #if defined(HAVE_XPETRA_EPETRA)
98 throw(
Xpetra::Exceptions::RuntimeError(
"Xpetra::ImportUtils only available for GO=int or GO=long long with EpetraNode (Serial or OpenMP depending on configuration)"));
99 #endif // HAVE_XPETRA_EPETRA
101 #ifdef HAVE_XPETRA_TPETRA
102 Tpetra::Import_Util::getPidGidPairs(
Xpetra::toTpetra(Importer), gpids, use_minus_one_for_local);
103 #endif // HAVE_XPETRA_TPETRA
110 Teuchos::Array<int>& pids,
111 bool use_minus_one_for_local) {
114 #if defined(HAVE_XPETRA_EPETRA)
115 throw(
Xpetra::Exceptions::RuntimeError(
"Xpetra::ImportUtils only available for GO=int or GO=long long with EpetraNode (Serial or OpenMP depending on configuration)"));
116 #endif // HAVE_XPETRA_EPETRA
118 #ifdef HAVE_XPETRA_TPETRA
119 Tpetra::Import_Util::getPids(
Xpetra::toTpetra(Importer), pids, use_minus_one_for_local);
120 #endif // HAVE_XPETRA_TPETRA
128 Teuchos::ArrayView<int>& pids,
129 bool use_minus_one_for_local) {
132 #if defined(HAVE_XPETRA_EPETRA)
133 throw(
Xpetra::Exceptions::RuntimeError(
"Xpetra::ImportUtils only available for GO=int or GO=long long with EpetraNode (Serial or OpenMP depending on configuration)"));
134 #endif // HAVE_XPETRA_EPETRA
136 #ifdef HAVE_XPETRA_TPETRA
137 Tpetra::Import_Util::getPids(
Xpetra::toTpetra(Importer), pids, use_minus_one_for_local);
138 #endif // HAVE_XPETRA_TPETRA
146 Teuchos::Array<int>& RemotePIDs) {
149 #if defined(HAVE_XPETRA_EPETRA)
150 throw(
Xpetra::Exceptions::RuntimeError(
"Xpetra::ImportUtils only available for GO=int or GO=long long with EpetraNode (Serial or OpenMP depending on configuration)"));
151 #endif // HAVE_XPETRA_EPETRA
153 #ifdef HAVE_XPETRA_TPETRA
155 #endif // HAVE_XPETRA_TPETRA
161 #ifdef HAVE_XPETRA_EPETRA
168 #undef XPETRA_IMPORTUTILS_SHORT
173 Teuchos::Array<std::pair<int, GlobalOrdinal> >& gpids,
174 bool use_minus_one_for_local) {
178 std::vector<std::pair<int, GlobalOrdinal> > gpids_v(gpids.size());
179 Epetra_Util::GetPidGidPairs(*e_Importer, gpids_v, use_minus_one_for_local);
180 std::copy(gpids_v.begin(), gpids_v.end(), gpids.begin());
182 #ifdef HAVE_XPETRA_TPETRA
183 Tpetra::Import_Util::getPidGidPairs(
Xpetra::toTpetra(Importer), gpids, use_minus_one_for_local);
184 #endif // HAVE_XPETRA_TPETRA
191 Teuchos::Array<int>& pids,
192 bool use_minus_one_for_local) {
196 std::vector<int> pids_v(pids.size());
197 Epetra_Util::GetPids(*e_Importer, pids_v, use_minus_one_for_local);
198 std::copy(pids_v.begin(), pids_v.end(), pids.begin());
200 #ifdef HAVE_XPETRA_TPETRA
201 Tpetra::Import_Util::getPids(
Xpetra::toTpetra(Importer), pids, use_minus_one_for_local);
202 #endif // HAVE_XPETRA_TPETRA
210 Teuchos::ArrayView<int>& pids,
211 bool use_minus_one_for_local) {
215 std::vector<int> pids_v(pids.begin(), pids.end());
216 Epetra_Util::GetPids(*e_Importer, pids_v, use_minus_one_for_local);
218 #ifdef HAVE_XPETRA_TPETRA
219 Tpetra::Import_Util::getPids(
Xpetra::toTpetra(Importer), pids, use_minus_one_for_local);
220 #endif // HAVE_XPETRA_TPETRA
228 Teuchos::Array<int>& RemotePIDs) {
232 std::vector<int> pids_v(RemotePIDs.size());
233 Epetra_Util::GetRemotePIDs(*e_Importer, pids_v);
234 std::copy(pids_v.begin(), pids_v.end(), RemotePIDs.begin());
236 #ifdef HAVE_XPETRA_TPETRA
238 #endif // HAVE_XPETRA_TPETRA
250 #undef XPETRA_IMPORTUTILS_SHORT
255 Teuchos::Array<std::pair<int, GlobalOrdinal> >& gpids,
256 bool use_minus_one_for_local) {
260 std::vector<std::pair<int, GlobalOrdinal> > gpids_v(gpids.size());
261 Epetra_Util::GetPidGidPairs(*e_Importer, gpids_v, use_minus_one_for_local);
262 std::copy(gpids_v.begin(), gpids_v.end(), gpids.begin());
265 #ifdef HAVE_XPETRA_TPETRA
266 Tpetra::Import_Util::getPidGidPairs(
Xpetra::toTpetra(Importer), gpids, use_minus_one_for_local);
267 #endif // HAVE_XPETRA_TPETRA
274 Teuchos::Array<int>& pids,
275 bool use_minus_one_for_local) {
279 std::vector<int> pids_v(pids.size());
280 Epetra_Util::GetPids(*e_Importer, pids_v, use_minus_one_for_local);
281 std::copy(pids_v.begin(), pids_v.end(), pids.begin());
283 #ifdef HAVE_XPETRA_TPETRA
284 Tpetra::Import_Util::getPids(
Xpetra::toTpetra(Importer), pids, use_minus_one_for_local);
285 #endif // HAVE_XPETRA_TPETRA
293 Teuchos::ArrayView<int>& pids,
294 bool use_minus_one_for_local) {
298 std::vector<int> pids_v(pids.size());
299 Epetra_Util::GetPids(*e_Importer, pids_v, use_minus_one_for_local);
300 std::copy(pids_v.begin(), pids_v.end(), pids.begin());
302 #ifdef HAVE_XPETRA_TPETRA
303 Tpetra::Import_Util::getPids(
Xpetra::toTpetra(Importer), pids, use_minus_one_for_local);
304 #endif // HAVE_XPETRA_TPETRA
312 Teuchos::Array<int>& RemotePIDs) {
316 std::vector<int> pids_v(RemotePIDs.size());
317 Epetra_Util::GetRemotePIDs(*e_Importer, pids_v);
318 std::copy(pids_v.begin(), pids_v.end(), RemotePIDs.begin());
320 #ifdef HAVE_XPETRA_TPETRA
322 #endif // HAVE_XPETRA_TPETRA
327 #endif // HAVE_XPETRA_EPETRA for Epetra scpecialization
331 #define XPETRA_IMPORTUTILS_SHORT
333 #endif // PACKAGES_XPETRA_IMPORT_UTILS_HPP_
void getPidGidPairs(const Import< LocalOrdinal, GlobalOrdinal, Node > &Importer, Teuchos::Array< std::pair< int, GlobalOrdinal > > &gpids, bool use_minus_one_for_local)
For each GID in the TargetMap, find who owns the GID in the SourceMap.
void getPidGidPairs(const Import< LocalOrdinal, GlobalOrdinal, Node > &Importer, Teuchos::Array< std::pair< int, GlobalOrdinal > > &gpids, bool use_minus_one_for_local)
void getRemotePIDs(const Import< LocalOrdinal, GlobalOrdinal, Node > &Importer, Teuchos::Array< int > &RemotePIDs)
Get a list of remote PIDs from an importer in the order corresponding to the remote LIDs...
void getPids(const Import< LocalOrdinal, GlobalOrdinal, Node > &Importer, Teuchos::Array< int > &pids, bool use_minus_one_for_local)
Like getPidGidPairs, but just gets the PIDs, ordered by the column Map.
Exception throws to report errors in the internal logical of the program.
void getPids(const Import< LocalOrdinal, GlobalOrdinal, Node > &Importer, Teuchos::ArrayView< int > &pids, bool use_minus_one_for_local)
Like getPidGidPairs, but just gets the PIDs, ordered by the column Map.
void getPids(const Import< LocalOrdinal, GlobalOrdinal, Node > &Importer, Teuchos::ArrayView< int > &pids, bool use_minus_one_for_local)
Like getPidGidPairs, but just gets the PIDs, ordered by the column Map.
void getRemotePIDs(const Import< LocalOrdinal, GlobalOrdinal, Node > &Importer, Teuchos::Array< int > &RemotePIDs)
Get a list of remote PIDs from an importer in the order corresponding to the remote LIDs...
void getPids(const Import< LocalOrdinal, GlobalOrdinal, Node > &Importer, Teuchos::Array< int > &pids, bool use_minus_one_for_local)
Like getPidGidPairs, but just gets the PIDs, ordered by the column Map.
RCP< const Tpetra::CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > toTpetra(const RCP< const CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > &graph)
void getPids(const Import< LocalOrdinal, GlobalOrdinal, Node > &Importer, Teuchos::ArrayView< int > &pids, bool use_minus_one_for_local)
Like getPidGidPairs, but just gets the PIDs, ordered by the column Map.
Tpetra::KokkosCompat::KokkosSerialWrapperNode EpetraNode
void getRemotePIDs(const Import< LocalOrdinal, GlobalOrdinal, Node > &Importer, Teuchos::Array< int > &RemotePIDs)
Get a list of remote PIDs from an importer in the order corresponding to the remote LIDs...
virtual Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > getSourceMap() const =0
The Source Map used to construct this Import object.
Xpetra utility class for Import-related routines.
void getPids(const Import< LocalOrdinal, GlobalOrdinal, Node > &Importer, Teuchos::Array< int > &pids, bool use_minus_one_for_local)
Like getPidGidPairs, but just gets the PIDs, ordered by the column Map.
void getPidGidPairs(const Import< LocalOrdinal, GlobalOrdinal, Node > &Importer, Teuchos::Array< std::pair< int, GlobalOrdinal > > &gpids, bool use_minus_one_for_local)