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 IFPACK_METISREORDERING_H
00031 #define IFPACK_METISREORDERING_H
00032
00033 #include "Ifpack_ConfigDefs.h"
00034 #include "Ifpack_Reordering.h"
00035 #include "Epetra_RowMatrix.h"
00036 #include "Teuchos_ParameterList.hpp"
00037 #include "Teuchos_RefCountPtr.hpp"
00038
00039 class Epetra_Comm;
00040 class Ifpack_Graph;
00041 class Epetra_Map;
00042 class Epetra_BlockMap;
00043 class Epetra_Import;
00044
00046
00047 class Ifpack_METISReordering : public Ifpack_Reordering {
00048
00049 public:
00050
00052 Ifpack_METISReordering();
00053
00055 virtual ~Ifpack_METISReordering() {};
00056
00058 virtual int SetParameter(const string Name, const int Value)
00059 {
00060 if (Name == "partitioner: use symmetric graph")
00061 UseSymmetricGraph_ = (bool)Value;
00062 return(0);
00063 }
00064
00066 virtual int SetParameter(const string Name, const double Value)
00067 {
00068 return(0);
00069 };
00070
00072 virtual int SetParameters(Teuchos::ParameterList& List)
00073 {
00074 UseSymmetricGraph_ = List.get("partitioner: use symmetric graph",
00075 UseSymmetricGraph_);
00076
00077 return(0);
00078 }
00079
00081 virtual int Compute(const Ifpack_Graph& Graph);
00082
00084 virtual int Compute(const Epetra_RowMatrix& Matrix);
00085
00087 virtual bool IsComputed() const
00088 {
00089 return(IsComputed_);
00090 }
00091
00093 virtual int Reorder(const int i) const;
00094
00096 virtual int InvReorder(const int i) const;
00097
00099 virtual int P(const Epetra_MultiVector& Xorig,
00100 Epetra_MultiVector& X) const;
00101
00103 virtual int Pinv(const Epetra_MultiVector& Xorig,
00104 Epetra_MultiVector& X) const;
00105
00107 virtual ostream& Print(std::ostream& os) const;
00108
00109 private:
00111 bool UseSymmetricGraph_;
00113 int NumMyRows_;
00115 bool IsComputed_;
00117 std::vector<int> Reorder_;
00119 std::vector<int> InvReorder_;
00120
00121 };
00122
00123 #endif // IFPACK_METISREORDERING_H