41#ifndef EPETRAEXT_MIGRATE_H 
   42#define EPETRAEXT_MIGRATE_H 
   44#if defined(EpetraExt_SHOW_DEPRECATED_WARNINGS) 
   46#warning "The EpetraExt package is deprecated" 
   56#include <Teuchos_RCP.hpp> 
   61 #include <Epetra_MpiComm.h> 
   62 #include <Epetra_MpiDistributor.h> 
   70template <
typename KT, 
typename DT>
 
   75  typedef typename std::map< KT, Teuchos::RCP<DT> >         
DataMap;
 
   88  typedef typename std::vector<char> 
Buffer;
 
  106  bool operator==( 
Migrate const & right ) 
const;
 
  107  bool operator!=( 
Migrate const & right ) 
const;
 
  111  void operator()( std::vector<int> 
const & pList,
 
  112                   std::vector<KT> 
const & iKeys,
 
  113                   std::vector<KT> & oKeys );
 
  115  void operator()( std::vector<int> 
const & pList,
 
  116                   std::map< KT, Teuchos::RCP<DT> > 
const & iData,
 
  117                   std::multimap< KT, Teuchos::RCP<DT> > & oData );
 
  119  void rvs( std::vector<int> 
const & pList,
 
  120            std::vector<KT> 
const & keys,
 
  121            std::map< KT, Teuchos::RCP<DT> > & iData,
 
  122            std::map< KT, Teuchos::RCP<DT> > & oData );
 
 
  135template <
typename DT>
 
  148  typedef typename std::vector<char>  
Buffer;
 
  166  bool operator==( 
Migrate1 const & right ) 
const;
 
  167  bool operator!=( 
Migrate1 const & right ) 
const;
 
  171  void operator()( std::vector<int> 
const & pList,
 
  172                   std::vector< Teuchos::RCP<DT> > 
const & iData,
 
  173                   std::vector< Teuchos::RCP<DT> > & oData );
 
  175  void rvs( std::vector<int> 
const & pList,
 
  176            std::vector< Teuchos::RCP<DT> > 
const & iData,
 
  177            std::vector< Teuchos::RCP<DT> > & oData );
 
 
  190template <
typename KT, 
typename DT>
 
  194            std::vector<KT> 
const & iKeys,
 
  195            std::vector<KT> & oKeys )
 
  200  int exportCnt = pList.size();
 
  205  for( ; citKL != cendKL; ++citKL )
 
  209  distributor.
CreateFromSends( exportCnt, &(pList[0]), 
true, importCnt );
 
  212  comm_.MaxAll( &max_size, &max_all, 1 );
 
  214  exports_.resize( max_all * exportCnt );
 
  216  if( importSize_ < (max_all*importCnt) )
 
  218    if( importSize_ ) 
delete [] imports_;
 
  219    importSize_ = (max_all*importCnt);
 
  220    imports_ = 
new char[importSize_];
 
  224  citKL = iKeys.begin();
 
  225  for( 
int i = 0; citKL != cendKL; ++citKL, ++i )
 
  231  distributor.
Do( &(exports_[0]), max_all, importSize_, imports_ );
 
  233  oKeys.resize( importCnt );
 
  234  for( 
int i = 0; i < importCnt; ++i )
 
 
  245template <
typename KT, 
typename DT>
 
  249            std::map< KT, Teuchos::RCP<DT> > 
const & iData,
 
  250            std::multimap< KT, Teuchos::RCP<DT> > & oData )
 
  255  int exportCnt = pList.size();
 
  260  for( ; citDM != cendDM; ++citDM )
 
  265  distributor.
CreateFromSends( exportCnt, &(pList[0]), 
true, importCnt );
 
  268  comm_.MaxAll( &max_size, &max_all, 1 );
 
  270  exports_.resize( max_all * exportCnt );
 
  272  if( importSize_ < (max_all*importCnt) )
 
  274    if( importSize_ ) 
delete [] imports_;
 
  275    importSize_ = (max_all*importCnt);
 
  276    imports_ = 
new char[importSize_];
 
  280  citDM = iData.begin();
 
  281  for( 
int i = 0; citDM != cendDM; ++citDM, ++i )
 
  288  distributor.
Do( &(exports_[0]), max_all, importSize_, imports_ );
 
  292  for( 
int i = 0; i < importCnt; ++i )
 
  296    Teuchos::RCP<DT> data = rcp( 
new DT );
 
  298    oData.insert( 
DataPair( key, data ) );
 
  304  for( ; citDM != cendDM; ++citDM )
 
  305    oData.insert( *citDM );
 
 
  309template <
typename KT, 
typename DT>
 
  312rvs( std::vector<int> 
const & pList,
 
  313     std::vector<KT> 
const & keys,
 
  314     std::map< KT, Teuchos::RCP<DT> > & iData,
 
  315     std::map< KT, Teuchos::RCP<DT> > & oData )
 
  320  int importCnt = pList.size();
 
  323  distributor.
CreateFromSends( importCnt, &(pList[0]), 
true, exportCnt );
 
  325  if( exportCnt != keys.size() )
 
  326    N_ERH_ErrorMgr::report( N_ERH_ErrorMgr::DEV_FATAL,
 
  327     "Xyce::Parallel::Migrate::rvs Failed Size Match!\n" );
 
  332  for( ; citKL != cendKL; ++citKL )
 
  337  comm_.MaxAll( &max_size, &max_all, 1 );
 
  339  exports_.resize( max_all * exportCnt );
 
  341  if( importSize_ < (max_all*importCnt) )
 
  343    if( importSize_ ) 
delete [] imports_;
 
  344    importSize_ = (max_all*importCnt);
 
  345    imports_ = 
new char[importSize_];
 
  350  citKL  = keys.begin();
 
  351  for( ; citKL != cendKL; ++citKL, ++i )
 
  358  distributor.
DoReverse( &(exports_[0]), max_all, importSize_, imports_ );
 
  362  for( 
int i = 0; i < importCnt; ++i )
 
  366    Teuchos::RCP<DT> data = rcp( 
new DT );
 
 
  375template <
typename DT>
 
  379            std::vector< Teuchos::RCP<DT> > 
const & iData,
 
  380            std::vector< Teuchos::RCP<DT> > & oData )
 
  385  int exportCnt = pList.size();
 
  390  for( ; citDC != cendDC; ++citDC )
 
  394  distributor.
CreateFromSends( exportCnt, &(pList[0]), 
true, importCnt );
 
  397  comm_.MaxAll( &max_size, &max_all, 1 );
 
  399  exports_.resize( max_all * exportCnt );
 
  401  if( importSize_ < (max_all*importCnt) )
 
  403    if( importSize_ ) 
delete [] imports_;
 
  404    importSize_ = (max_all*importCnt);
 
  405    imports_ = 
new char[importSize_];
 
  409  citDC = iData.begin();
 
  410  for( 
int i = 0; citDC != cendDC; ++citDC, ++i )
 
  416  distributor.
Do( &(exports_[0]), max_all, importSize_, imports_ );
 
  419  for( 
int i = 0; i < importCnt; ++i )
 
  422    Teuchos::RCP<DT> data = rcp( 
new DT );
 
  424    oData.push_back( data );
 
 
  432template <
typename DT>
 
  435rvs( std::vector<int> 
const & pList,
 
  436     std::vector< Teuchos::RCP<DT> > 
const & iData,
 
  437     std::vector< Teuchos::RCP<DT> > & oData )
 
  442  int importCnt = pList.size();
 
  445  distributor.
CreateFromSends( importCnt, &(pList[0]), 
true, exportCnt );
 
  447  if( exportCnt != keys.size() )
 
  448    N_ERH_ErrorMgr::report( N_ERH_ErrorMgr::DEV_FATAL,
 
  449     "Xyce::Parallel::Migrate::rvs Failed Size Match!\n" );
 
  454  for( ; citDC != cendDC; ++citDC )
 
  458  comm_.MaxAll( &max_size, &max_all, 1 );
 
  460  exports_.resize( max_all * exportCnt );
 
  462  if( importSize_ < (max_all*importCnt) )
 
  464    if( importSize_ ) 
delete [] imports_;
 
  465    importSize_ = (max_all*importCnt);
 
  466    imports_ = 
new char[importSize_];
 
  471  citDC  = iData.begin();
 
  472  for( ; citDC != cendDC; ++citDC, ++i )
 
  478  distributor.
DoReverse( &(exports_[0]), max_all, importSize_, imports_ );
 
  481  for( 
int i = 0; i < importCnt; ++i )
 
  484    Teuchos::RCP<DT> data = rcp( 
new DT );
 
  486    oData.push_back( data );
 
 
std::vector< char > Buffer
 
std::vector< DataPtr > DataContainer
 
void rvs(std::vector< int > const &pList, std::vector< Teuchos::RCP< DT > > const &iData, std::vector< Teuchos::RCP< DT > > &oData)
 
ProcList::iterator ProcListIter
 
Migrate1(Epetra_Comm &comm)
 
std::vector< int > ProcList
 
void operator()(std::vector< int > const &pList, std::vector< Teuchos::RCP< DT > > const &iData, std::vector< Teuchos::RCP< DT > > &oData)
 
DataContainer::iterator DataContainerIter
 
Teuchos::RCP< DT > DataPtr
 
DataContainer::const_iterator DataContainerCIter
 
Data Migration Utility used by EpetraExt::Directory.
 
DataMap::const_iterator DataMapCIter
 
std::vector< int > ProcList
 
std::map< KT, Teuchos::RCP< DT > > DataMap
 
void operator()(std::vector< int > const &pList, std::vector< KT > const &iKeys, std::vector< KT > &oKeys)
 
KeyList::const_iterator KeyListCIter
 
Migrate(Epetra_Comm &comm)
 
ProcList::iterator ProcListIter
 
DataMap::iterator DataMapIter
 
KeyList::iterator KeyListIter
 
std::vector< char > Buffer
 
DataMap::value_type DataPair
 
std::vector< KT > KeyList
 
void rvs(std::vector< int > const &pList, std::vector< KT > const &keys, std::map< KT, Teuchos::RCP< DT > > &iData, std::map< KT, Teuchos::RCP< DT > > &oData)
 
int CreateFromSends(const int &NumExportIDs, const int *ExportPIDs, bool Deterministic, int &NumRemoteIDs)
 
int DoReverse(char *export_objs, int obj_size, int &len_import_objs, char *&import_objs)
 
int Do(char *export_objs, int obj_size, int &len_import_objs, char *&import_objs)
 
EpetraExt::BlockCrsMatrix: A class for constructing a distributed block matrix.
 
Traits for packing and unpacking of data into char buffers for communication.
 
static void unpack(T &object, char *buf, size_t size, int &pos)
Unpacks object from char buffer.
 
static void pack(T const &object, char *buf, size_t size, int &pos)
Packs object into char buffer.