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_EpetraPartitioner_hpp_
00031 #define _Isorropia_EpetraPartitioner_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_EpetraOperator.hpp>
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
00052 namespace Isorropia {
00053
00054 namespace Epetra {
00055 class CostDescriber;
00056
00062 class Partitioner : virtual public Isorropia::Partitioner, virtual public Isorropia::Epetra::Operator {
00063 public:
00087 Partitioner(Teuchos::RCP<const Epetra_CrsGraph> input_graph,
00088 const Teuchos::ParameterList& paramlist,
00089 bool compute_partitioning_now=true);
00090
00117 Partitioner(Teuchos::RCP<const Epetra_CrsGraph> input_graph,
00118 Teuchos::RCP<CostDescriber> costs,
00119 const Teuchos::ParameterList& paramlist,
00120 bool compute_partitioning_now=true);
00121
00146 Partitioner(Teuchos::RCP<const Epetra_RowMatrix> input_matrix,
00147 const Teuchos::ParameterList& paramlist,
00148 bool compute_partitioning_now=true);
00149
00177 Partitioner(Teuchos::RCP<const Epetra_RowMatrix> input_matrix,
00178 Teuchos::RCP<CostDescriber> costs,
00179 const Teuchos::ParameterList& paramlist,
00180 bool compute_partitioning_now=true);
00181
00183 virtual ~Partitioner();
00184
00213 void partition(bool force_repartitioning=false);
00214
00215 virtual void compute(bool forceRecomputing=false);
00216
00217 bool partitioning_already_computed() const __deprecated;
00218
00219 __deprecated int newPartNumber(int myElem) const
00220 {
00221 return ((*this)[myElem]);
00222 }
00223
00224 int numElemsInPart(int part) const {
00225 return (numElemsWithProperty(part));
00226 }
00227
00228 void elemsInPart(int part, int* elementList, int len) const {
00229 elemsWithProperty(part, elementList, len);
00230 }
00231
00242 Teuchos::RCP<Epetra_Map> createNewMap();
00243
00244 };
00245
00246 }
00247 }
00248
00249 #endif //HAVE_EPETRA
00250
00251 #endif
00252