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_RCMREORDERING_H
00031 #define IFPACK_RCMREORDERING_H
00032
00033 #include "Ifpack_ConfigDefs.h"
00034 #include "Ifpack_Reordering.h"
00035
00036 namespace Teuchos {
00037 class ParameterList;
00038 }
00039 class Ifpack_Graph;
00040 class Epetra_MultiVector;
00041 class Epetra_RowMatrix;
00042
00044
00045 class Ifpack_RCMReordering : public Ifpack_Reordering {
00046
00047 public:
00048
00050 Ifpack_RCMReordering();
00051
00053 Ifpack_RCMReordering(const Ifpack_RCMReordering& RHS);
00054
00056 Ifpack_RCMReordering& operator=(const Ifpack_RCMReordering& RHS);
00057
00059 virtual ~Ifpack_RCMReordering() {};
00060
00062 virtual int SetParameter(const string Name, const int Value);
00063
00065 virtual int SetParameter(const string Name, const double Value);
00066
00068 virtual int SetParameters(Teuchos::ParameterList& List);
00069
00071 virtual int Compute(const Ifpack_Graph& Graph);
00072
00074 virtual int Compute(const Epetra_RowMatrix& Matrix);
00075
00077 virtual bool IsComputed() const
00078 {
00079 return(IsComputed_);
00080 }
00081
00083 virtual inline int Reorder(const int i) const;
00084
00086 virtual inline int InvReorder(const int i) const;
00087
00089 virtual int P(const Epetra_MultiVector& Xorig,
00090 Epetra_MultiVector& Xreord) const;
00091
00093 virtual int Pinv(const Epetra_MultiVector& Xorig,
00094 Epetra_MultiVector& Xinvreord) const;
00095
00096
00098 virtual ostream& Print(std::ostream& os) const;
00099
00101 virtual int NumMyRows() const
00102 {
00103 return(NumMyRows_);
00104 }
00105
00107 virtual int RootNode() const
00108 {
00109 return(RootNode_);
00110 }
00111
00112 private:
00114 int RootNode_;
00116 int NumMyRows_;
00118 bool IsComputed_;
00120 std::vector<int> Reorder_;
00122 std::vector<int> InvReorder_;
00123 };
00124
00125 #endif