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
00031
00032 #ifndef _Isorropia_EpetraPartitioner_hpp_
00033 #define _Isorropia_EpetraPartitioner_hpp_
00034
00035 #include <Isorropia_configdefs.hpp>
00036 #include <Teuchos_RefCountPtr.hpp>
00037 #include <Teuchos_ParameterList.hpp>
00038
00039 #include <Isorropia_Partitioner.hpp>
00040
00041 #ifdef HAVE_EPETRA
00042 class Epetra_Map;
00043 class Epetra_BlockMap;
00044 class Epetra_Import;
00045 class Epetra_Vector;
00046 class Epetra_MultiVector;
00047 class Epetra_CrsGraph;
00048 class Epetra_CrsMatrix;
00049 class Epetra_RowMatrix;
00050 class Epetra_LinearProblem;
00051
00055 namespace Isorropia {
00056 class CostDescriber;
00057
00061 namespace Epetra {
00062
00065 class Partitioner : public Isorropia::Partitioner {
00066 public:
00090 Partitioner(Teuchos::RefCountPtr<const Epetra_CrsGraph> input_graph,
00091 const Teuchos::ParameterList& paramlist,
00092 bool compute_partitioning_now=true);
00093
00120 Partitioner(Teuchos::RefCountPtr<const Epetra_CrsGraph> input_graph,
00121 Teuchos::RefCountPtr<const Isorropia::CostDescriber> costs,
00122 const Teuchos::ParameterList& paramlist,
00123 bool compute_partitioning_now=true);
00124
00148 Partitioner(Teuchos::RefCountPtr<const Epetra_RowMatrix> input_matrix,
00149 const Teuchos::ParameterList& paramlist,
00150 bool compute_partitioning_now=true);
00151
00179 Partitioner(Teuchos::RefCountPtr<const Epetra_RowMatrix> input_matrix,
00180 Teuchos::RefCountPtr<const Isorropia::CostDescriber> costs,
00181 const Teuchos::ParameterList& paramlist,
00182 bool compute_partitioning_now=true);
00183
00185 virtual ~Partitioner();
00186
00200 void setParameters(const Teuchos::ParameterList& paramlist);
00201
00212 void compute_partitioning(bool force_repartitioning=false);
00213
00217 bool partitioning_already_computed() const;
00218
00222 int newPartitionNumber(int myElem) const;
00223
00227 int numElemsInPartition(int partition) const;
00228
00233 void elemsInPartition(int partition, int* elementList, int len) const;
00234
00235 private:
00236
00237 Teuchos::RefCountPtr<const Epetra_BlockMap> input_map_;
00238 Teuchos::RefCountPtr<const Epetra_CrsGraph> input_graph_;
00239 Teuchos::RefCountPtr<const Epetra_RowMatrix> input_matrix_;
00240 Teuchos::RefCountPtr<const Isorropia::CostDescriber> costs_;
00241 Teuchos::ParameterList paramlist_;
00242 Teuchos::RefCountPtr<Epetra_Vector> weights_;
00243
00244 std::map<int,int> exports_, imports_;
00245 std::vector<int> myNewElements_;
00246
00247 bool partitioning_already_computed_;
00248
00249 };
00250
00251 }
00252 }
00253
00254 #endif //HAVE_EPETRA
00255
00256 #endif
00257