EpetraExt Development
EpetraExt_ZoltanMpiDistributor.h
Go to the documentation of this file.
00001 //@HEADER
00002 // ***********************************************************************
00003 //
00004 //     EpetraExt: Epetra Extended - Linear Algebra Services Package
00005 //                 Copyright (2011) Sandia Corporation
00006 //
00007 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
00008 // the U.S. Government retains certain rights in this software.
00009 //
00010 // Redistribution and use in source and binary forms, with or without
00011 // modification, are permitted provided that the following conditions are
00012 // met:
00013 //
00014 // 1. Redistributions of source code must retain the above copyright
00015 // notice, this list of conditions and the following disclaimer.
00016 //
00017 // 2. Redistributions in binary form must reproduce the above copyright
00018 // notice, this list of conditions and the following disclaimer in the
00019 // documentation and/or other materials provided with the distribution.
00020 //
00021 // 3. Neither the name of the Corporation nor the names of the
00022 // contributors may be used to endorse or promote products derived from
00023 // this software without specific prior written permission.
00024 //
00025 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
00026 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00027 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00028 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
00029 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00030 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00031 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00032 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00033 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00034 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00035 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00036 //
00037 // Questions? Contact Michael A. Heroux (maherou@sandia.gov)
00038 //
00039 // ***********************************************************************
00040 //@HEADER
00041 
00042 #ifndef _EPETRAEXT_ZOLTANMPIDISTRIBUTOR_H_
00043 #define _EPETRAEXT_ZOLTANMPIDISTRIBUTOR_H_
00044 
00045 #include "Epetra_Object.h"
00046 #include "Epetra_Distributor.h"
00047 
00048 #include "zoltan_comm.h"
00049 
00050 namespace EpetraExt {
00051 
00052 class ZoltanMpiComm;
00053 
00055 
00062 class EPETRAEXT_DEPRECATED ZoltanMpiDistributor: public Epetra_Object, public virtual Epetra_Distributor {
00063     
00064   public:
00065 
00067 
00069   ZoltanMpiDistributor(const ZoltanMpiComm &Comm);
00070 
00072   ZoltanMpiDistributor(const ZoltanMpiDistributor &Distributor);
00073 
00075   Epetra_Distributor *Clone() {
00076      return dynamic_cast<Epetra_Distributor*>(new ZoltanMpiDistributor(*this));
00077   };
00078 
00080   virtual ~ZoltanMpiDistributor();
00082 
00083   
00085 
00086 
00098   int CreateFromSends( const int &NumExportIDs,
00099                        const int *ExportPIDs,
00100                        bool Deterministic,
00101                        int &NumRemoteIDs );
00102 
00104 
00120   int CreateFromRecvs( const int &NumRemoteIDs,
00121                        const int *RemoteGIDs,
00122                        const int *RemotePIDs,
00123                        bool Deterministic,
00124            int &NumExportIDs,
00125                        int *&ExportGIDs,
00126            int *&ExportPIDs);
00128 
00130 
00132   int Do( char *export_objs,
00133           int obj_size,
00134           int & len_import_objs,
00135           char *& import_objs );
00136 
00138   int DoReverse( char * export_objs,
00139                  int obj_size,
00140                  int & len_import_objs,
00141                  char *& import_objs );
00142 
00144   int DoPosts( char * export_objs,
00145                int obj_size,
00146                int & len_import_objs,
00147                char *& import_objs );
00148   
00150   int DoWaits();
00151 
00153   int DoReversePosts( char * export_objs,
00154                       int obj_size,
00155                       int & len_import_objs,
00156                       char *& import_objs );
00157 
00159   int DoReverseWaits();
00160 
00162 
00164 
00166   int Do( char *export_objs,
00167           int obj_size,
00168           int *& sizes,
00169           int & len_import_objs,
00170           char *& import_objs );
00171   
00173   int DoReverse( char *export_objs,
00174                  int obj_size,
00175                  int *& sizes,
00176                  int & len_import_objs,
00177                  char *& import_objs );
00178   
00180   int DoPosts( char *export_objs,
00181                int obj_size,
00182                int *& sizes,
00183                int & len_import_objs,
00184                char *& import_objs );
00185   
00187   int DoReversePosts( char *export_objs,
00188                       int obj_size,
00189                       int *& sizes,
00190                       int & len_import_objs,
00191                       char *& import_objs );
00192   
00194   
00196   void Print(ostream &os) const;
00198  
00199   private:
00200 
00202     int Resize (int *sizes, int *sum_recv_sizes);
00203 
00204     Zoltan_Comm_Obj *plan_;
00205 
00206     int   tag_;
00207 
00208     const ZoltanMpiComm *epComm_;
00209     const MPI_Comm comm_;
00210 
00211 };
00212 
00213 } //namespace EpetraExt
00214 
00215 #endif /* _EPETRAEXT_ZOLTANMPIDISTRIBUTOR_H_ */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines