Ifpack_SparsityFilter.h

00001 #ifndef IFPACK_SPARSITYFILTER_H
00002 #define IFPACK_SPARSITYFILTER_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 
00014 class Ifpack_SparsityFilter : public virtual Epetra_RowMatrix {
00015 
00016 public:
00017   Ifpack_SparsityFilter(Epetra_RowMatrix* Matrix,
00018             int AllowedNumEntries,
00019             int AllowedBandwidth = -1);
00020 
00021   virtual ~Ifpack_SparsityFilter();
00022 
00023   virtual inline int NumMyRowEntries(int MyRow, int & NumEntries) const
00024   {
00025     NumEntries = NumEntries_[MyRow];
00026     return(0);
00027   }
00028 
00029   virtual int MaxNumEntries() const
00030   {
00031     return(MaxNumEntries_);
00032   }
00033 
00034   virtual int ExtractMyRowCopy(int MyRow, int Length, int & NumEntries, double *Values, int * Indices) const;
00035 
00036   virtual int ExtractDiagonalCopy(Epetra_Vector & Diagonal) const;
00037 
00038   virtual int Multiply(bool TransA, const Epetra_MultiVector& X, 
00039                Epetra_MultiVector& Y) const;
00040 
00041   virtual int Solve(bool Upper, bool Trans, bool UnitDiagonal, 
00042             const Epetra_MultiVector& X,
00043             Epetra_MultiVector& Y) const;
00044 
00045   virtual int Apply(const Epetra_MultiVector& X,
00046             Epetra_MultiVector& Y) const;
00047 
00048   virtual int ApplyInverse(const Epetra_MultiVector& X,
00049                Epetra_MultiVector& Y) const;
00050 
00051   virtual int InvRowSums(Epetra_Vector& x) const
00052   {
00053     return(-98);
00054   }
00055 
00056   virtual int LeftScale(const Epetra_Vector& x)
00057   {
00058     return(-98);
00059   }
00060 
00061   virtual int InvColSums(Epetra_Vector& x) const
00062   {
00063     return(-98);
00064   }
00065 
00066   virtual int RightScale(const Epetra_Vector& x) 
00067   {
00068     return(A_.RightScale(x));
00069   }
00070 
00071   virtual bool Filled() const
00072   {
00073     return(A_.Filled());
00074   }
00075 
00076   virtual double NormInf() const
00077   {
00078     return(-1.0);
00079   }
00080 
00081   virtual double NormOne() const
00082   {
00083     return(-1.0);
00084   }
00085 
00086   virtual int NumGlobalNonzeros() const
00087   {
00088     return(NumNonzeros_);
00089   }
00090 
00091   virtual int NumGlobalRows() const
00092   {
00093     return(NumRows_);
00094   }
00095 
00096   virtual int NumGlobalCols() const
00097   {
00098     return(NumRows_);
00099   }
00100 
00101   virtual int NumGlobalDiagonals() const
00102   {
00103     return(NumRows_);
00104   }
00105 
00106   virtual int NumMyNonzeros() const
00107   {
00108     return(NumNonzeros_);
00109   }
00110 
00111   virtual int NumMyRows() const
00112   {
00113     return(NumRows_);
00114   }
00115 
00116   virtual int NumMyCols() const
00117   {
00118     return(NumRows_);
00119   }
00120 
00121   virtual int NumMyDiagonals() const
00122   {
00123     return(NumRows_);
00124   }
00125 
00126   virtual bool LowerTriangular() const
00127   {
00128     return(false);
00129   }
00130 
00131   virtual bool UpperTriangular() const
00132   {
00133     return(false);
00134   }
00135 
00136   virtual const Epetra_Map & RowMatrixRowMap() const
00137   {
00138     return(A_.RowMatrixRowMap());
00139   }
00140 
00141   virtual const Epetra_Map & RowMatrixColMap() const
00142   {
00143     return(A_.RowMatrixColMap());
00144   }
00145 
00146   virtual const Epetra_Import * RowMatrixImporter() const
00147   {
00148     return(A_.RowMatrixImporter());
00149   }
00150 
00151   int SetUseTranspose(bool UseTranspose)
00152   {
00153     return(A_.SetUseTranspose(UseTranspose));
00154   }
00155 
00156   bool UseTranspose() const 
00157   {
00158     return(A_.UseTranspose());
00159   }
00160 
00161   bool HasNormInf() const
00162   {
00163     return(false);
00164   }
00165 
00166   const Epetra_Comm & Comm() const
00167   {
00168     return(A_.Comm());
00169   }
00170 
00171   const Epetra_Map & OperatorDomainMap() const 
00172   {
00173     return(A_.OperatorDomainMap());
00174   }
00175 
00176   const Epetra_Map & OperatorRangeMap() const 
00177   {
00178     return(A_.OperatorRangeMap());
00179   }
00180 
00181   const Epetra_BlockMap& Map() const 
00182   {
00183     return(A_.Map());
00184   }
00185 
00186   const char* Label() const{
00187     return(Label_);
00188   }
00189 
00190 private:
00191 
00193   Epetra_RowMatrix& A_;
00195   int MaxNumEntries_;
00196   int MaxNumEntriesA_;
00197 
00199   int AllowedBandwidth_;
00201   int AllowedEntries_;
00202   
00204   int NumNonzeros_;
00205 
00207   mutable vector<int> Indices_;
00209   mutable vector<double> Values_;
00211   char Label_[80];
00212 
00213   int NumRows_;
00214   vector<int> NumEntries_;
00215 
00216 };
00217 
00218 
00219 #endif /* IFPACK_SPARSITYFILTER_H */

Generated on Thu Sep 18 12:37:08 2008 for IFPACK by doxygen 1.3.9.1