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_DIAG_PRECONDITIONER_H
00031 #define IFPACK_DIAG_PRECONDITIONER_H
00032
00033 #include "Ifpack_ConfigDefs.h"
00034 #include "Epetra_Operator.h"
00035 #include "Epetra_Vector.h"
00036 class Epetra_BlockMap;
00037 class Epetra_Map;
00038 class Epetra_MultiVector;
00039 class Epetra_Comm;
00040
00041 using namespace std;
00042
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056 class Ifpack_DiagPreconditioner : public Epetra_Operator
00057 {
00058 public:
00059
00061 Ifpack_DiagPreconditioner(const Epetra_Map& DomainMap,
00062 const Epetra_Map& RangeMap,
00063 const Epetra_Vector& diag);
00064
00066 ~Ifpack_DiagPreconditioner();
00067
00068 int SetUseTranspose(bool UseTranspose_in)
00069 {
00070 UseTranspose_ = UseTranspose_in;
00071 return(0);
00072 }
00073
00074 int Apply(const Epetra_MultiVector& X, Epetra_MultiVector& Y) const;
00075
00076 int ApplyInverse(const Epetra_MultiVector& X, Epetra_MultiVector& Y) const;
00077
00078 double NormInf() const
00079 {
00080 return(-1.0);
00081 }
00082
00083 const char* Label() const
00084 {
00085 return("Ifpack_DiagPreconditioner");
00086 }
00087
00088 bool UseTranspose() const
00089 {
00090 return(UseTranspose_);
00091 }
00092
00093 bool HasNormInf() const
00094 {
00095 return(false);
00096 }
00097
00098 const Epetra_Comm& Comm() const
00099 {
00100 return(diag_.Comm());
00101 }
00102
00103 const Epetra_Map& OperatorDomainMap() const
00104 {
00105 return(RangeMap_);
00106 }
00107
00108 const Epetra_Map& OperatorRangeMap() const
00109 {
00110 return(DomainMap_);
00111 }
00112
00113 const Epetra_BlockMap& Map() const
00114 {
00115 return(diag_.Map());
00116 }
00117
00118 private:
00119 bool UseTranspose_;
00120 const Epetra_Map& DomainMap_;
00121 const Epetra_Map& RangeMap_;
00122 const Epetra_Vector& diag_;
00123 };
00124
00125 #endif