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_DROPFILTER_H
00031 #define IFPACK_DROPFILTER_H
00032
00033 #include "Ifpack_ConfigDefs.h"
00034 #include "Epetra_RowMatrix.h"
00035 #include "Teuchos_RefCountPtr.hpp"
00036
00037 class Epetra_Comm;
00038 class Epetra_Map;
00039 class Epetra_MultiVector;
00040 class Epetra_Import;
00041 class Epetra_BlockMap;
00042
00044
00068 class Ifpack_DropFilter : public virtual Epetra_RowMatrix {
00069
00070 public:
00072 Ifpack_DropFilter(const Teuchos::RefCountPtr<Epetra_RowMatrix>& Matrix,
00073 double DropTol);
00074
00076 virtual ~Ifpack_DropFilter() {};
00077
00079 virtual inline int NumMyRowEntries(int MyRow, int & NumEntries) const
00080 {
00081 NumEntries = NumEntries_[MyRow];
00082 return(0);
00083 }
00084
00086 virtual int MaxNumEntries() const
00087 {
00088 return(MaxNumEntries_);
00089 }
00090
00091 virtual int ExtractMyRowCopy(int MyRow, int Length, int & NumEntries, double *Values, int * Indices) const;
00092
00093 virtual int ExtractDiagonalCopy(Epetra_Vector & Diagonal) const;
00094
00095 virtual int Multiply(bool TransA, const Epetra_MultiVector& X,
00096 Epetra_MultiVector& Y) const;
00097
00098 virtual int Solve(bool Upper, bool Trans, bool UnitDiagonal,
00099 const Epetra_MultiVector& X,
00100 Epetra_MultiVector& Y) const;
00101
00102 virtual int Apply(const Epetra_MultiVector& X,
00103 Epetra_MultiVector& Y) const;
00104
00105 virtual int ApplyInverse(const Epetra_MultiVector& X,
00106 Epetra_MultiVector& Y) const;
00107
00108 virtual int InvRowSums(Epetra_Vector& x) const;
00109
00110 virtual int LeftScale(const Epetra_Vector& x)
00111 {
00112 return(A_->LeftScale(x));
00113 }
00114
00115 virtual int InvColSums(Epetra_Vector& x) const;
00116
00117 virtual int RightScale(const Epetra_Vector& x)
00118 {
00119 return(A_->RightScale(x));
00120 }
00121
00122 virtual bool Filled() const
00123 {
00124 return(A_->Filled());
00125 }
00126
00127 virtual double NormInf() const
00128 {
00129 return(-1.0);
00130 }
00131
00132 virtual double NormOne() const
00133 {
00134 return(-1.0);
00135 }
00136
00137 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
00138 virtual int NumGlobalNonzeros() const
00139 {
00140 return(NumNonzeros_);
00141 }
00142
00143 virtual int NumGlobalRows() const
00144 {
00145 return(NumRows_);
00146 }
00147
00148 virtual int NumGlobalCols() const
00149 {
00150 return(NumRows_);
00151 }
00152
00153 virtual int NumGlobalDiagonals() const
00154 {
00155 return(NumRows_);
00156 }
00157 #endif
00158
00159 virtual long long NumGlobalNonzeros64() const
00160 {
00161 return(NumNonzeros_);
00162 }
00163
00164 virtual long long NumGlobalRows64() const
00165 {
00166 return(NumRows_);
00167 }
00168
00169 virtual long long NumGlobalCols64() const
00170 {
00171 return(NumRows_);
00172 }
00173
00174 virtual long long NumGlobalDiagonals64() const
00175 {
00176 return(NumRows_);
00177 }
00178
00179 virtual int NumMyNonzeros() const
00180 {
00181 return(NumNonzeros_);
00182 }
00183
00184 virtual int NumMyRows() const
00185 {
00186 return(NumRows_);
00187 }
00188
00189 virtual int NumMyCols() const
00190 {
00191 return(NumRows_);
00192 }
00193
00194 virtual int NumMyDiagonals() const
00195 {
00196 return(NumRows_);
00197 }
00198
00199 virtual bool LowerTriangular() const
00200 {
00201 return(false);
00202 }
00203
00204 virtual bool UpperTriangular() const
00205 {
00206 return(false);
00207 }
00208
00209 virtual const Epetra_Map & RowMatrixRowMap() const
00210 {
00211 return(A_->RowMatrixRowMap());
00212 }
00213
00214 virtual const Epetra_Map & RowMatrixColMap() const
00215 {
00216 return(A_->RowMatrixColMap());
00217 }
00218
00219 virtual const Epetra_Import * RowMatrixImporter() const
00220 {
00221 return(A_->RowMatrixImporter());
00222 }
00223
00224 int SetUseTranspose(bool UseTranspose)
00225 {
00226 return(A_->SetUseTranspose(UseTranspose));
00227 }
00228
00229 bool UseTranspose() const
00230 {
00231 return(A_->UseTranspose());
00232 }
00233
00234 bool HasNormInf() const
00235 {
00236 return(false);
00237 }
00238
00239 const Epetra_Comm & Comm() const
00240 {
00241 return(A_->Comm());
00242 }
00243
00244 const Epetra_Map & OperatorDomainMap() const
00245 {
00246 return(A_->OperatorDomainMap());
00247 }
00248
00249 const Epetra_Map & OperatorRangeMap() const
00250 {
00251 return(A_->OperatorRangeMap());
00252 }
00253
00254 const Epetra_BlockMap& Map() const
00255 {
00256 return(A_->Map());
00257 }
00258
00259 const char* Label() const{
00260 return(Label_);
00261 }
00262
00263 private:
00264
00266 Teuchos::RefCountPtr<Epetra_RowMatrix> A_;
00268 double DropTol_;
00270 int MaxNumEntries_;
00271 int MaxNumEntriesA_;
00272 int NumRows_;
00273
00275 int NumNonzeros_;
00276
00278 mutable std::vector<int> Indices_;
00280 mutable std::vector<double> Values_;
00282 char Label_[80];
00283 std::vector<int> NumEntries_;
00284
00285 };
00286
00287
00288 #endif