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_AMDREORDERING_H
00031 #define IFPACK_AMDREORDERING_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_AMDReordering : public Ifpack_Reordering {
00046
00047 public:
00048
00050 Ifpack_AMDReordering();
00051
00053 Ifpack_AMDReordering(const Ifpack_AMDReordering& RHS);
00054
00056 Ifpack_AMDReordering& operator=(const Ifpack_AMDReordering& RHS);
00057
00059 virtual ~Ifpack_AMDReordering() {};
00060
00062 int SetParameter(const string Name, const int Value);
00063
00065 int SetParameter(const string Name, const double Value);
00066
00068 int SetParameters(Teuchos::ParameterList& List);
00069
00071 int Compute(const Ifpack_Graph& Graph);
00072
00074 int Compute(const Epetra_RowMatrix& Matrix);
00075
00077 bool IsComputed() const
00078 {
00079 return(IsComputed_);
00080 }
00081
00083 inline int Reorder(const int i) const;
00084
00086 inline int InvReorder(const int i) const;
00087
00089 int P(const Epetra_MultiVector& Xorig,
00090 Epetra_MultiVector& Xreord) const;
00091
00093 int Pinv(const Epetra_MultiVector& Xorig,
00094 Epetra_MultiVector& Xinvreord) const;
00095
00096
00098 ostream& Print(std::ostream& os) const;
00099
00101 int NumMyRows() const
00102 {
00103 return(NumMyRows_);
00104 }
00105
00106 private:
00108 int NumMyRows_;
00110 bool IsComputed_;
00112 std::vector<int> Reorder_;
00114 std::vector<int> InvReorder_;
00115 };
00116
00117 #endif