Isorropia: Partitioning, Load Balancing and more
Isorropia_EpetraRedistributor.hpp
Go to the documentation of this file.
00001 //@HEADER
00002 //************************************************************************
00003 //
00004 //              Isorropia: Partitioning and Load Balancing Package
00005 //                Copyright (2006) Sandia Corporation
00006 //
00007 //Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
00008 //license for use of this work by or on behalf of the U.S. Government.
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 //************************************************************************
00038 //@HEADER
00039 
00040 #ifndef _Isorropia_EpetraRedistributor_hpp_
00041 #define _Isorropia_EpetraRedistributor_hpp_
00042 
00043 #include <Isorropia_Redistributor.hpp>
00044 #include <Isorropia_ConfigDefs.hpp>
00045 #include <Teuchos_RCP.hpp>
00046 #include <Teuchos_ParameterList.hpp>
00047 
00048 #ifdef HAVE_EPETRA
00049 class Epetra_Map;
00050 class Epetra_BlockMap;
00051 class Epetra_Import;
00052 class Epetra_Vector;
00053 class Epetra_MultiVector;
00054 class Epetra_CrsGraph;
00055 class Epetra_CrsMatrix;
00056 class Epetra_RowMatrix;
00057 class Epetra_LinearProblem;
00058 class Epetra_SrcDistObject;
00059 class Epetra_DistObject;
00060 
00061 namespace Isorropia {
00062 
00063 namespace Epetra {
00064   class Partitioner;
00065 
00072 class Redistributor : public Isorropia::Redistributor {
00073 public:
00074 
00082   Redistributor(Teuchos::RCP<Isorropia::Epetra::Partitioner> partitioner);
00083 
00091   Redistributor(Teuchos::RCP<Epetra_Map> target_map);
00092 
00100   Redistributor(Isorropia::Epetra::Partitioner *partitioner);
00101 
00109   Redistributor(Epetra_Map *target_map);
00110 
00114   virtual ~Redistributor();
00115 
00121   void redistribute(const Epetra_SrcDistObject& src,
00122         Epetra_DistObject& target);
00123 
00140   Teuchos::RCP<Epetra_CrsGraph>
00141      redistribute(const Epetra_CrsGraph& input_graph, bool callFillComplete= true);
00142 
00160   void redistribute(const Epetra_CrsGraph& input_graph, Epetra_CrsGraph * &outputGraphPtr, bool callFillComplete= true);
00161 
00178   Teuchos::RCP<Epetra_CrsMatrix>
00179      redistribute(const Epetra_CrsMatrix& input_matrix, bool callFillComplete= true);
00180 
00198   void redistribute(const Epetra_CrsMatrix& inputMatrix, Epetra_CrsMatrix * &outputMatrix, bool callFillComplete= true);
00199 
00216   Teuchos::RCP<Epetra_CrsMatrix>
00217      redistribute(const Epetra_RowMatrix& input_matrix, bool callFillComplete= true);
00218 
00219 
00236      void 
00237      redistribute(const Epetra_RowMatrix& inputMatrix, Epetra_CrsMatrix * &outputMatrix, bool callFillComplete= true);
00238 
00249   Teuchos::RCP<Epetra_Vector>
00250      redistribute(const Epetra_Vector& input_vector);
00251 
00262   void
00263   redistribute(const Epetra_Vector& inputVector, Epetra_Vector * &outputVector);
00264 
00276   Teuchos::RCP<Epetra_MultiVector>  
00277      redistribute(const Epetra_MultiVector& input_vector);
00278 
00279 
00291   void 
00292   redistribute(const Epetra_MultiVector& inputVector, Epetra_MultiVector * &outputVector);
00293 
00303   void
00304      redistribute_reverse(const Epetra_Vector& input_vector, Epetra_Vector& output_vector);
00305 
00314   void
00315      redistribute_reverse(const Epetra_MultiVector& input_vector, Epetra_MultiVector& output_vector);
00316 
00317   Epetra_Import &get_importer() { return *importer_;}
00318 
00319 private:
00324   void create_importer(const Epetra_BlockMap& src_map);
00325 
00326   Teuchos::RCP<Isorropia::Epetra::Partitioner> partitioner_;
00327   Teuchos::RCP<Epetra_Import> importer_;
00328   Teuchos::RCP<Epetra_Map> target_map_;
00329 
00330 }; //class Redistributor
00331 
00332 }//namespace Epetra
00333 
00334 }//namespace Isorropia
00335 
00336 #endif //HAVE_EPETRA
00337 
00338 #endif
00339