42 #ifndef TPETRA_IMPORT_UTIL_HPP 43 #define TPETRA_IMPORT_UTIL_HPP 51 #include "Tpetra_ConfigDefs.hpp" 52 #include "Tpetra_Import.hpp" 53 #include "Tpetra_HashTable.hpp" 54 #include "Tpetra_Map.hpp" 56 #include "Tpetra_Distributor.hpp" 57 #include <Teuchos_Array.hpp> 61 namespace Import_Util {
68 template <
typename LocalOrdinal,
typename GlobalOrdinal,
typename Node>
71 Teuchos::Array< std::pair<int,GlobalOrdinal> >& gpids,
72 bool use_minus_one_for_local);
75 template <
typename LocalOrdinal,
typename GlobalOrdinal,
typename Node>
78 Teuchos::Array<int>& pids,
79 bool use_minus_one_for_local);
83 template <
typename LocalOrdinal,
typename GlobalOrdinal,
typename Node>
86 Teuchos::Array<int>& RemotePIDs);
91 namespace Import_Util {
93 template <
typename LocalOrdinal,
typename GlobalOrdinal,
typename Node>
96 Teuchos::Array< std::pair<int,GlobalOrdinal> >& gpids,
97 bool use_minus_one_for_local)
106 int mypid = Importer.
getTargetMap()->getComm()->getRank();
107 size_t N = Importer.
getTargetMap()->getNodeNumElements();
110 Teuchos::ArrayView<const LocalOrdinal> RemoteLIDs = Importer.
getRemoteLIDs();
114 Teuchos::ArrayView<const int> ProcsFrom = D.
getProcsFrom();
115 Teuchos::ArrayView<const size_t> LengthsFrom = D.
getLengthsFrom();
121 LocalOrdinal lzero = Teuchos::ScalarTraits<LocalOrdinal>::zero();
122 if(use_minus_one_for_local)
123 for(ii=lzero; Teuchos::as<size_t>(ii)<N; ii++) gpids[ii]=std::make_pair(-1,Importer.
getTargetMap()->getGlobalElement(ii));
125 for(ii=lzero; Teuchos::as<size_t>(ii)<N; ii++) gpids[ii]=std::make_pair(mypid,Importer.
getTargetMap()->getGlobalElement(ii));
129 for(i=0,j=0; i<NumReceives; i++){
130 int pid=ProcsFrom[i];
131 for(k=0; k<LengthsFrom[i]; k++){
132 if(pid!=mypid) gpids[RemoteLIDs[j]].first=pid;
138 template <
typename LocalOrdinal,
typename GlobalOrdinal,
typename Node>
141 Teuchos::Array<int>& pids,
142 bool use_minus_one_for_local)
148 int mypid = Importer.
getTargetMap()->getComm()->getRank();
149 size_t N = Importer.
getTargetMap()->getNodeNumElements();
152 Teuchos::ArrayView<const LocalOrdinal> RemoteLIDs = Importer.
getRemoteLIDs();
156 Teuchos::ArrayView<const int> ProcsFrom = D.
getProcsFrom();
157 Teuchos::ArrayView<const size_t> LengthsFrom = D.
getLengthsFrom();
163 LocalOrdinal lzero = Teuchos::ScalarTraits<LocalOrdinal>::zero();
164 if(use_minus_one_for_local)
165 for(ii=lzero; Teuchos::as<size_t>(ii)<N; ii++) pids[ii]=-1;
167 for(ii=lzero; Teuchos::as<size_t>(ii)<N; ii++) pids[ii]=mypid;
171 for(i=0,j=0; i<NumReceives; i++){
172 int pid=ProcsFrom[i];
173 for(k=0; k<LengthsFrom[i]; k++){
174 if(pid!=mypid) pids[RemoteLIDs[j]]=pid;
180 template <
typename LocalOrdinal,
typename GlobalOrdinal,
typename Node>
183 Teuchos::Array<int>& RemotePIDs)
188 Teuchos::ArrayView<const LocalOrdinal> RemoteLIDs = Importer.
getRemoteLIDs();
192 Teuchos::ArrayView<const int> ProcsFrom = D.
getProcsFrom();
193 Teuchos::ArrayView<const size_t> LengthsFrom = D.
getLengthsFrom();
202 for (i = 0, j = 0; i < NumReceives; ++i) {
203 const int pid = ProcsFrom[i];
204 for (k = 0; k < LengthsFrom[i]; ++k) {
214 #endif // TPETRA_IMPORT_UTIL_HPP Communication plan for data redistribution from a uniquely-owned to a (possibly) multiply-owned distr...
Namespace Tpetra contains the class and methods constituting the Tpetra library.
Teuchos::ArrayView< const size_t > getLengthsFrom() const
Number of values this process will receive from each process.
size_t getNumReceives() const
The number of processes from which we will receive data.
void getRemotePIDs(const Tpetra::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 Tpetra::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.
Teuchos::ArrayView< const LocalOrdinal > getRemoteLIDs() const
List of entries in the target Map to receive from other processes.
Teuchos::ArrayView< const int > getProcsFrom() const
Ranks of the processes sending values to this process.
Teuchos::RCP< const map_type > getTargetMap() const
The Target Map used to construct this Import object.
Sets up and executes a communication plan for a Tpetra DistObject.
size_t getNumRemoteIDs() const
Number of entries not on the calling process.
Stand-alone utility functions and macros.
Distributor & getDistributor() const
The Distributor that this Import object uses to move data.
void getPids(const Tpetra::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.