43 #ifndef IFPACK_SINGLETONFILTER_H 44 #define IFPACK_SINGLETONFILTER_H 46 #include "Ifpack_ConfigDefs.h" 47 #include "Epetra_RowMatrix.h" 48 #include "Teuchos_RefCountPtr.hpp" 52 class Epetra_MultiVector;
54 class Epetra_BlockMap;
70 return(NumEntries_[MyRow]);
76 return(MaxNumEntries_);
79 virtual int ExtractMyRowCopy(
int MyRow,
int Length,
int & NumEntries,
double *Values,
int * Indices)
const;
81 virtual int ExtractDiagonalCopy(Epetra_Vector & Diagonal)
const;
83 virtual int Multiply(
bool TransA,
const Epetra_MultiVector& X,
84 Epetra_MultiVector& Y)
const;
86 virtual int Solve(
bool Upper,
bool Trans,
bool UnitDiagonal,
87 const Epetra_MultiVector& X,
88 Epetra_MultiVector& Y)
const;
90 virtual int Apply(
const Epetra_MultiVector& X,
91 Epetra_MultiVector& Y)
const;
93 virtual int ApplyInverse(
const Epetra_MultiVector& X,
94 Epetra_MultiVector& Y)
const;
96 virtual int InvRowSums(Epetra_Vector& x)
const 101 virtual int LeftScale(
const Epetra_Vector& x)
106 virtual int InvColSums(Epetra_Vector& x)
const 111 virtual int RightScale(
const Epetra_Vector& x)
116 virtual bool Filled()
const 118 return(A_->Filled());
121 virtual double NormInf()
const 126 virtual double NormOne()
const 131 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES 132 virtual int NumGlobalNonzeros()
const 134 return(NumNonzeros_);
137 virtual int NumGlobalRows()
const 142 virtual int NumGlobalCols()
const 147 virtual int NumGlobalDiagonals()
const 153 virtual long long NumGlobalNonzeros64()
const 155 return(NumNonzeros_);
158 virtual long long NumGlobalRows64()
const 163 virtual long long NumGlobalCols64()
const 168 virtual long long NumGlobalDiagonals64()
const 173 virtual int NumMyNonzeros()
const 175 return(NumNonzeros_);
178 virtual int NumMyRows()
const 183 virtual int NumMyCols()
const 188 virtual int NumMyDiagonals()
const 193 virtual bool LowerTriangular()
const 198 virtual bool UpperTriangular()
const 203 virtual const Epetra_Map & RowMatrixRowMap()
const 208 virtual const Epetra_Map & RowMatrixColMap()
const 213 virtual const Epetra_Import * RowMatrixImporter()
const 215 return(A_->RowMatrixImporter());
218 int SetUseTranspose(
bool UseTranspose_in)
220 return(A_->SetUseTranspose(UseTranspose_in));
223 bool UseTranspose()
const 225 return(A_->UseTranspose());
228 bool HasNormInf()
const 233 const Epetra_Comm & Comm()
const 238 const Epetra_Map & OperatorDomainMap()
const 243 const Epetra_Map & OperatorRangeMap()
const 248 const Epetra_BlockMap& Map()
const 250 return(*(
const Epetra_BlockMap*)(&*Map_));
253 const char* Label()
const{
257 int SolveSingletons(
const Epetra_MultiVector& RHS,
258 Epetra_MultiVector& LHS);
260 int CreateReducedRHS(
const Epetra_MultiVector& LHS,
261 const Epetra_MultiVector& RHS,
262 Epetra_MultiVector& ReducedRHS);
264 int UpdateLHS(
const Epetra_MultiVector& ReducedLHS,
265 Epetra_MultiVector& LHS);
270 Teuchos::RefCountPtr<Epetra_RowMatrix> A_;
273 mutable std::vector<int> Indices_;
275 mutable std::vector<double> Values_;
280 std::vector<int> SingletonIndex_;
282 std::vector<int> Reorder_;
283 std::vector<int> InvReorder_;
285 std::vector<int> NumEntries_;
292 Teuchos::RefCountPtr<Epetra_Map> Map_;
294 Teuchos::RefCountPtr<Epetra_Vector> Diagonal_;
Ifpack_SingletonFilter(const Teuchos::RefCountPtr< Epetra_RowMatrix > &Matrix)
Constructor.
virtual int MaxNumEntries() const
Returns the maximum number of entries.
virtual ~Ifpack_SingletonFilter()
Destructor.
Ifpack_SingletonFilter: Filter based on matrix entries.
virtual int NumMyRowEntries(int MyRow, int &NumEntries) const
Returns the number of entries in MyRow.