00001 #ifndef IFPACK_DROPFILTER_H
00002 #define IFPACK_DROPFILTER_H
00003
00004 #include "Ifpack_ConfigDefs.h"
00005 #include "Epetra_RowMatrix.h"
00006 class Epetra_Comm;
00007 class Epetra_Map;
00008 class Epetra_MultiVector;
00009 class Epetra_Import;
00010 class Epetra_BlockMap;
00011
00013
00037 class Ifpack_DropFilter : public virtual Epetra_RowMatrix {
00038
00039 public:
00041 Ifpack_DropFilter(Epetra_RowMatrix* Matrix,
00042 double DropTop);
00043
00045 virtual ~Ifpack_DropFilter();
00046
00048 virtual inline int NumMyRowEntries(int MyRow, int & NumEntries) const
00049 {
00050 NumEntries = NumEntries_[MyRow];
00051 return(0);
00052 }
00053
00055 virtual int MaxNumEntries() const
00056 {
00057 return(MaxNumEntries_);
00058 }
00059
00060 virtual int ExtractMyRowCopy(int MyRow, int Length, int & NumEntries, double *Values, int * Indices) const;
00061
00062 virtual int ExtractDiagonalCopy(Epetra_Vector & Diagonal) const;
00063
00064 virtual int Multiply(bool TransA, const Epetra_MultiVector& X,
00065 Epetra_MultiVector& Y) const;
00066
00067 virtual int Solve(bool Upper, bool Trans, bool UnitDiagonal,
00068 const Epetra_MultiVector& X,
00069 Epetra_MultiVector& Y) const;
00070
00071 virtual int Apply(const Epetra_MultiVector& X,
00072 Epetra_MultiVector& Y) const;
00073
00074 virtual int ApplyInverse(const Epetra_MultiVector& X,
00075 Epetra_MultiVector& Y) const;
00076
00077 virtual int InvRowSums(Epetra_Vector& x) const;
00078
00079 virtual int LeftScale(const Epetra_Vector& x)
00080 {
00081 return(A_.LeftScale(x));
00082 }
00083
00084 virtual int InvColSums(Epetra_Vector& x) const;
00085
00086 virtual int RightScale(const Epetra_Vector& x)
00087 {
00088 return(A_.RightScale(x));
00089 }
00090
00091 virtual bool Filled() const
00092 {
00093 return(A_.Filled());
00094 }
00095
00096 virtual double NormInf() const
00097 {
00098 return(-1.0);
00099 }
00100
00101 virtual double NormOne() const
00102 {
00103 return(-1.0);
00104 }
00105
00106 virtual int NumGlobalNonzeros() const
00107 {
00108 return(NumNonzeros_);
00109 }
00110
00111 virtual int NumGlobalRows() const
00112 {
00113 return(NumRows_);
00114 }
00115
00116 virtual int NumGlobalCols() const
00117 {
00118 return(NumRows_);
00119 }
00120
00121 virtual int NumGlobalDiagonals() const
00122 {
00123 return(NumRows_);
00124 }
00125
00126 virtual int NumMyNonzeros() const
00127 {
00128 return(NumNonzeros_);
00129 }
00130
00131 virtual int NumMyRows() const
00132 {
00133 return(NumRows_);
00134 }
00135
00136 virtual int NumMyCols() const
00137 {
00138 return(NumRows_);
00139 }
00140
00141 virtual int NumMyDiagonals() const
00142 {
00143 return(NumRows_);
00144 }
00145
00146 virtual bool LowerTriangular() const
00147 {
00148 return(false);
00149 }
00150
00151 virtual bool UpperTriangular() const
00152 {
00153 return(false);
00154 }
00155
00156 virtual const Epetra_Map & RowMatrixRowMap() const
00157 {
00158 return(A_.RowMatrixRowMap());
00159 }
00160
00161 virtual const Epetra_Map & RowMatrixColMap() const
00162 {
00163 return(A_.RowMatrixColMap());
00164 }
00165
00166 virtual const Epetra_Import * RowMatrixImporter() const
00167 {
00168 return(A_.RowMatrixImporter());
00169 }
00170
00171 int SetUseTranspose(bool UseTranspose)
00172 {
00173 return(A_.SetUseTranspose(UseTranspose));
00174 }
00175
00176 bool UseTranspose() const
00177 {
00178 return(A_.UseTranspose());
00179 }
00180
00181 bool HasNormInf() const
00182 {
00183 return(false);
00184 }
00185
00186 const Epetra_Comm & Comm() const
00187 {
00188 return(A_.Comm());
00189 }
00190
00191 const Epetra_Map & OperatorDomainMap() const
00192 {
00193 return(A_.OperatorDomainMap());
00194 }
00195
00196 const Epetra_Map & OperatorRangeMap() const
00197 {
00198 return(A_.OperatorRangeMap());
00199 }
00200
00201 const Epetra_BlockMap& Map() const
00202 {
00203 return(A_.Map());
00204 }
00205
00206 const char* Label() const{
00207 return(Label_);
00208 }
00209
00210 private:
00211
00213 Epetra_RowMatrix& A_;
00215 double DropTol_;
00217 int MaxNumEntries_;
00218 int MaxNumEntriesA_;
00219 int NumRows_;
00220
00222 int NumNonzeros_;
00223
00225 mutable vector<int> Indices_;
00227 mutable vector<double> Values_;
00229 char Label_[80];
00230 vector<int> NumEntries_;
00231
00232 };
00233
00234
00235 #endif