43#ifndef IFPACK_SINGLETONFILTER_H
44#define IFPACK_SINGLETONFILTER_H
46#if defined(Ifpack_SHOW_DEPRECATED_WARNINGS)
48#warning "The Ifpack package is deprecated"
52#include "Ifpack_ConfigDefs.h"
53#include "Epetra_RowMatrix.h"
54#include "Teuchos_RefCountPtr.hpp"
76 return(NumEntries_[MyRow]);
82 return(MaxNumEntries_);
85 virtual int ExtractMyRowCopy(
int MyRow,
int Length,
int & NumEntries,
double *Values,
int * Indices)
const;
87 virtual int ExtractDiagonalCopy(
Epetra_Vector & Diagonal)
const;
92 virtual int Solve(
bool Upper,
bool Trans,
bool UnitDiagonal,
107 virtual int LeftScale(
const Epetra_Vector& )
112 virtual int InvColSums(Epetra_Vector& )
const
117 virtual int RightScale(
const Epetra_Vector& )
122 virtual bool Filled()
const
124 return(A_->Filled());
137#ifndef EPETRA_NO_32BIT_GLOBAL_INDICES
140 return(NumNonzeros_);
159 virtual long long NumGlobalNonzeros64()
const
161 return(NumNonzeros_);
164 virtual long long NumGlobalRows64()
const
169 virtual long long NumGlobalCols64()
const
174 virtual long long NumGlobalDiagonals64()
const
181 return(NumNonzeros_);
221 return(A_->RowMatrixImporter());
224 int SetUseTranspose(
bool UseTranspose_in)
226 return(A_->SetUseTranspose(UseTranspose_in));
231 return(A_->UseTranspose());
239 const Epetra_Comm &
Comm()
const
254 const Epetra_BlockMap&
Map()
const
256 return(*(
const Epetra_BlockMap*)(&*Map_));
259 const char*
Label()
const{
263 int SolveSingletons(
const Epetra_MultiVector& RHS,
264 Epetra_MultiVector& LHS);
266 int CreateReducedRHS(
const Epetra_MultiVector& LHS,
267 const Epetra_MultiVector& RHS,
268 Epetra_MultiVector& ReducedRHS);
270 int UpdateLHS(
const Epetra_MultiVector& ReducedLHS,
271 Epetra_MultiVector& LHS);
276 Teuchos::RefCountPtr<Epetra_RowMatrix> A_;
279 mutable std::vector<int> Indices_;
281 mutable std::vector<double> Values_;
286 std::vector<int> SingletonIndex_;
288 std::vector<int> Reorder_;
289 std::vector<int> InvReorder_;
291 std::vector<int> NumEntries_;
298 Teuchos::RefCountPtr<Epetra_Map> Map_;
300 Teuchos::RefCountPtr<Epetra_Vector> Diagonal_;
virtual const Epetra_Comm & Comm() const=0
virtual const char * Label() const=0
virtual const Epetra_Map & OperatorDomainMap() const=0
virtual bool HasNormInf() const=0
virtual const Epetra_Map & OperatorRangeMap() const=0
virtual bool UseTranspose() const=0
virtual int NumMyRows() const=0
virtual int NumMyCols() const=0
virtual int NumGlobalCols() const=0
virtual int NumGlobalNonzeros() const=0
virtual const Epetra_Map & RowMatrixColMap() const=0
virtual const Epetra_Map & RowMatrixRowMap() const=0
virtual int NumMyNonzeros() const=0
virtual int NumMyDiagonals() const=0
virtual int NumGlobalRows() const=0
virtual bool LowerTriangular() const=0
virtual int NumGlobalDiagonals() const=0
virtual const Epetra_Import * RowMatrixImporter() const=0
virtual bool UpperTriangular() const=0
virtual double NormOne() const=0
virtual double NormInf() const=0
virtual bool Filled() const=0
virtual const Epetra_BlockMap & Map() const=0
virtual int MaxNumEntries() const
Returns the maximum number of entries.
Ifpack_SingletonFilter(const Teuchos::RefCountPtr< Epetra_RowMatrix > &Matrix)
Constructor.
virtual ~Ifpack_SingletonFilter()
Destructor.
virtual int NumMyRowEntries(int MyRow, int &) const
Returns the number of entries in MyRow.