00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef _Isorropia_EpetraZoltanLib_hpp_
00031 #define _Isorropia_EpetraZoltanLib_hpp_
00032
00033 #include <Isorropia_ConfigDefs.hpp>
00034 #include <Teuchos_RCP.hpp>
00035 #include <Teuchos_ParameterList.hpp>
00036
00037 #include <Isorropia_EpetraCostDescriber.hpp>
00038 #include <Isorropia_EpetraLibrary.hpp>
00039
00040 #include <QueryObject.hpp>
00041 #include <zoltan_cpp.h>
00042
00043 #ifdef HAVE_EPETRA
00044 class Epetra_Map;
00045 class Epetra_BlockMap;
00046 class Epetra_Import;
00047 class Epetra_Vector;
00048 class Epetra_MultiVector;
00049 class Epetra_CrsGraph;
00050 class Epetra_CrsMatrix;
00051 class Epetra_RowMatrix;
00052 class Epetra_LinearProblem;
00053
00054 namespace Isorropia {
00055
00056 namespace Epetra {
00057 class CostDescriber;
00058
00059
00060 class ZoltanLibClass : public Library {
00061 public:
00062
00063 ZoltanLibClass(Teuchos::RCP<const Epetra_CrsGraph> input_graph, int inputType=unspecified_input_);
00064 ZoltanLibClass(Teuchos::RCP<const Epetra_CrsGraph> input_graph,
00065 Teuchos::RCP<CostDescriber> costs, int inputType=unspecified_input_);
00066 ZoltanLibClass(Teuchos::RCP<const Epetra_RowMatrix> input_matrix, int inputType=unspecified_input_);
00067 ZoltanLibClass(Teuchos::RCP<const Epetra_RowMatrix> input_matrix,
00068 Teuchos::RCP<CostDescriber> costs, int inputType=unspecified_input_);
00069 ZoltanLibClass(Teuchos::RCP<const Epetra_MultiVector> input_coords, int inputType=unspecified_input_);
00070 ZoltanLibClass(Teuchos::RCP<const Epetra_MultiVector> input_coords,
00071 Teuchos::RCP<const Epetra_MultiVector> weights, int inputType=unspecified_input_);
00072
00091 virtual int
00092 repartition(Teuchos::ParameterList& paramlist,
00093 std::vector<int>& newPartitions,
00094 int& exportsSize,
00095 std::vector<int>& imports);
00096
00104 virtual int
00105 color(Teuchos::ParameterList& paramlist,
00106 std::vector<int>& colorAssignment);
00107
00115 virtual int
00116 order(Teuchos::ParameterList& paramlist,
00117 std::vector<int>& orderAssignment);
00118
00119 protected:
00120 virtual int precompute();
00121 virtual int postcompute();
00122 void computeCost();
00123 void preCheckPartition();
00124
00125 void setParameterList(Teuchos::ParameterList& zoltanParamList);
00126
00127 private:
00128 Teuchos::ParameterList zoltanParamList_;
00129 std::string partMethod_;
00130 Zoltan *zz_;
00131 Teuchos::RCP<ZoltanLib::QueryObject> queryObject_;
00132 int num_obj_;
00133
00134 };
00135
00136 }
00137 }
00138
00139 #endif //HAVE_EPETRA
00140
00141 #endif
00142