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,
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 111 Teuchos::Array<int>& pids,
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)"));
117 #endif // HAVE_XPETRA_EPETRA 119 #ifdef HAVE_XPETRA_TPETRA 120 Tpetra::Import_Util::getPids(
Xpetra::toTpetra(Importer),pids,use_minus_one_for_local);
121 #endif // HAVE_XPETRA_TPETRA 130 Teuchos::ArrayView<int>& pids,
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)"));
136 #endif // HAVE_XPETRA_EPETRA 138 #ifdef HAVE_XPETRA_TPETRA 139 Tpetra::Import_Util::getPids(
Xpetra::toTpetra(Importer),pids,use_minus_one_for_local);
140 #endif // HAVE_XPETRA_TPETRA 149 Teuchos::Array<int>& RemotePIDs) {
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)"));
154 #endif // HAVE_XPETRA_EPETRA 156 #ifdef HAVE_XPETRA_TPETRA 158 #endif // HAVE_XPETRA_TPETRA 165 #ifdef HAVE_XPETRA_EPETRA 172 #undef XPETRA_IMPORTUTILS_SHORT 177 Teuchos::Array< std::pair<int,GlobalOrdinal> >& gpids,
178 bool use_minus_one_for_local) {
183 std::vector< std::pair<int,GlobalOrdinal> > gpids_v(gpids.size());
184 Epetra_Util::GetPidGidPairs(*e_Importer,gpids_v,use_minus_one_for_local);
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);
189 #endif // HAVE_XPETRA_TPETRA 197 Teuchos::Array<int>& pids,
198 bool use_minus_one_for_local) {
202 std::vector<int > pids_v(pids.size());
203 Epetra_Util::GetPids(*e_Importer,pids_v,use_minus_one_for_local);
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);
208 #endif // HAVE_XPETRA_TPETRA 217 Teuchos::ArrayView<int>& pids,
218 bool use_minus_one_for_local) {
222 std::vector<int> pids_v(pids.begin(),pids.end());
223 Epetra_Util::GetPids(*e_Importer,pids_v,use_minus_one_for_local);
225 #ifdef HAVE_XPETRA_TPETRA 226 Tpetra::Import_Util::getPids(
Xpetra::toTpetra(Importer),pids,use_minus_one_for_local);
227 #endif // HAVE_XPETRA_TPETRA 236 Teuchos::Array<int>& RemotePIDs) {
240 std::vector<int> pids_v(RemotePIDs.size());
241 Epetra_Util::GetRemotePIDs(*e_Importer,pids_v);
242 std::copy(pids_v.begin(),pids_v.end(),RemotePIDs.begin());
244 #ifdef HAVE_XPETRA_TPETRA 246 #endif // HAVE_XPETRA_TPETRA 260 #undef XPETRA_IMPORTUTILS_SHORT 267 Teuchos::Array< std::pair<int,GlobalOrdinal> >& gpids,
268 bool use_minus_one_for_local) {
272 std::vector< std::pair<int,GlobalOrdinal> > gpids_v(gpids.size());
273 Epetra_Util::GetPidGidPairs(*e_Importer,gpids_v,use_minus_one_for_local);
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);
279 #endif // HAVE_XPETRA_TPETRA 287 Teuchos::Array<int>& pids,
288 bool use_minus_one_for_local) {
292 std::vector<int > pids_v(pids.size());
293 Epetra_Util::GetPids(*e_Importer,pids_v,use_minus_one_for_local);
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);
298 #endif // HAVE_XPETRA_TPETRA 307 Teuchos::ArrayView<int>& pids,
308 bool use_minus_one_for_local) {
312 std::vector<int > pids_v(pids.size());
313 Epetra_Util::GetPids(*e_Importer,pids_v,use_minus_one_for_local);
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);
318 #endif // HAVE_XPETRA_TPETRA 327 Teuchos::Array<int>& RemotePIDs) {
331 std::vector<int> pids_v(RemotePIDs.size());
332 Epetra_Util::GetRemotePIDs(*e_Importer,pids_v);
333 std::copy(pids_v.begin(),pids_v.end(),RemotePIDs.begin());
335 #ifdef HAVE_XPETRA_TPETRA 337 #endif // HAVE_XPETRA_TPETRA 342 #endif // HAVE_XPETRA_EPETRA for Epetra scpecialization 346 #define XPETRA_IMPORTUTILS_SHORT 348 #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.
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.
RCP< const Tpetra::CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > toTpetra(const RCP< const CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > &graph)
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...
Xpetra utility class for Import-related routines.
virtual Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > getSourceMap() const =0
The Source Map used to construct this Import object.
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)