47#ifndef PACKAGES_XPETRA_IMPORT_UTILS_HPP_
48#define PACKAGES_XPETRA_IMPORT_UTILS_HPP_
52#include "Xpetra_Map.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,
82#undef XPETRA_IMPORTUTILS_SHORT
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)"));
101#ifdef HAVE_XPETRA_TPETRA
102 Tpetra::Import_Util::getPidGidPairs(
Xpetra::toTpetra(Importer),gpids,use_minus_one_for_local);
112 bool use_minus_one_for_local) {
115#if defined(HAVE_XPETRA_EPETRA)
116 throw(
Xpetra::Exceptions::RuntimeError(
"Xpetra::ImportUtils only available for GO=int or GO=long long with EpetraNode (Serial or OpenMP depending on configuration)"));
119#ifdef HAVE_XPETRA_TPETRA
120 Tpetra::Import_Util::getPids(
Xpetra::toTpetra(Importer),pids,use_minus_one_for_local);
131 bool use_minus_one_for_local) {
134#if defined(HAVE_XPETRA_EPETRA)
135 throw(
Xpetra::Exceptions::RuntimeError(
"Xpetra::ImportUtils only available for GO=int or GO=long long with EpetraNode (Serial or OpenMP depending on configuration)"));
138#ifdef HAVE_XPETRA_TPETRA
139 Tpetra::Import_Util::getPids(
Xpetra::toTpetra(Importer),pids,use_minus_one_for_local);
152#if defined(HAVE_XPETRA_EPETRA)
153 throw(
Xpetra::Exceptions::RuntimeError(
"Xpetra::ImportUtils only available for GO=int or GO=long long with EpetraNode (Serial or OpenMP depending on configuration)"));
156#ifdef HAVE_XPETRA_TPETRA
165#ifdef HAVE_XPETRA_EPETRA
172#undef XPETRA_IMPORTUTILS_SHORT
178 bool use_minus_one_for_local) {
183 std::vector< std::pair<int,GlobalOrdinal> > gpids_v(gpids.size());
185 std::copy(gpids_v.begin(),gpids_v.end(),gpids.begin());
187#ifdef HAVE_XPETRA_TPETRA
188 Tpetra::Import_Util::getPidGidPairs(
Xpetra::toTpetra(Importer),gpids,use_minus_one_for_local);
198 bool use_minus_one_for_local) {
202 std::vector<int > pids_v(pids.
size());
204 std::copy(pids_v.begin(),pids_v.end(),pids.
begin());
206#ifdef HAVE_XPETRA_TPETRA
207 Tpetra::Import_Util::getPids(
Xpetra::toTpetra(Importer),pids,use_minus_one_for_local);
218 bool use_minus_one_for_local) {
222 std::vector<int> pids_v(pids.
begin(),pids.
end());
225#ifdef HAVE_XPETRA_TPETRA
226 Tpetra::Import_Util::getPids(
Xpetra::toTpetra(Importer),pids,use_minus_one_for_local);
240 std::vector<int> pids_v(RemotePIDs.
size());
242 std::copy(pids_v.begin(),pids_v.end(),RemotePIDs.
begin());
244#ifdef HAVE_XPETRA_TPETRA
260#undef XPETRA_IMPORTUTILS_SHORT
268 bool use_minus_one_for_local) {
272 std::vector< std::pair<int,GlobalOrdinal> > gpids_v(gpids.size());
274 std::copy(gpids_v.begin(),gpids_v.end(),gpids.begin());
277#ifdef HAVE_XPETRA_TPETRA
278 Tpetra::Import_Util::getPidGidPairs(
Xpetra::toTpetra(Importer),gpids,use_minus_one_for_local);
288 bool use_minus_one_for_local) {
292 std::vector<int > pids_v(pids.
size());
294 std::copy(pids_v.begin(),pids_v.end(),pids.
begin());
296#ifdef HAVE_XPETRA_TPETRA
297 Tpetra::Import_Util::getPids(
Xpetra::toTpetra(Importer),pids,use_minus_one_for_local);
308 bool use_minus_one_for_local) {
312 std::vector<int > pids_v(pids.
size());
314 std::copy(pids_v.begin(),pids_v.end(),pids.
begin());
316#ifdef HAVE_XPETRA_TPETRA
317 Tpetra::Import_Util::getPids(
Xpetra::toTpetra(Importer),pids,use_minus_one_for_local);
331 std::vector<int> pids_v(RemotePIDs.
size());
333 std::copy(pids_v.begin(),pids_v.end(),RemotePIDs.
begin());
335#ifdef HAVE_XPETRA_TPETRA
346#define XPETRA_IMPORTUTILS_SHORT
static int GetRemotePIDs(const Epetra_Import &Importer, std::vector< int > &RemotePIDs)
static int GetPidGidPairs(const Epetra_Import &Importer, std::vector< std::pair< int, int > > &gpids, bool use_minus_one_for_local)
static int GetPids(const Epetra_Import &Importer, std::vector< int > &pids, bool use_minus_one_for_local)
Exception throws to report errors in the internal logical of the program.
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::ArrayView< 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)
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 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)
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::ArrayView< int > &pids, bool use_minus_one_for_local)
Like getPidGidPairs, but just gets the PIDs, ordered by the column Map.
Xpetra utility class for Import-related routines.
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 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 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.
virtual Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > getSourceMap() const =0
The Source Map used to construct this Import object.
RCP< const Tpetra::CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > toTpetra(const RCP< const CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > &graph)