43 #include "Ifpack_ConfigDefs.h" 44 #include "Ifpack_ReorderFilter.h" 45 #include "Ifpack_Reordering.h" 46 #include "Epetra_ConfigDefs.h" 47 #include "Epetra_RowMatrix.h" 48 #include "Epetra_Comm.h" 49 #include "Epetra_Map.h" 50 #include "Epetra_MultiVector.h" 51 #include "Epetra_Vector.h" 54 Ifpack_ReorderFilter::Ifpack_ReorderFilter(
const Teuchos::RefCountPtr<Epetra_RowMatrix>& Matrix_in,
55 const Teuchos::RefCountPtr<Ifpack_Reordering>& Reordering_in) :
57 Reordering_(Reordering_in),
58 NumMyRows_(Matrix_in->NumMyRows()),
59 MaxNumEntries_(Matrix_in->MaxNumEntries())
66 Reordering_(Reordering()),
68 MaxNumEntries_(RHS.MaxNumEntries())
70 strcpy(Label_,RHS.
Label());
86 strcpy(Label_,RHS.
Label());
91 int Ifpack_ReorderFilter::
92 ExtractMyRowCopy(
int MyRow,
int Length,
int & NumEntries,
93 double *Values,
int * Indices)
const 95 int MyReorderdRow = Reordering_->InvReorder(MyRow);
97 IFPACK_CHK_ERR(
Matrix()->ExtractMyRowCopy(MyReorderdRow,MaxNumEntries_,
98 NumEntries, Values,Indices));
102 for (
int i = 0 ; i < NumEntries ; ++i) {
103 Indices[i] = Reordering_->Reorder(Indices[i]);
113 Epetra_Vector DiagonalTilde(Diagonal.Map());
115 IFPACK_CHK_ERR((Reordering_->P(DiagonalTilde,Diagonal)));
122 Epetra_MultiVector& Y)
const 125 Epetra_MultiVector Xtilde(X.Map(),X.NumVectors());
126 Epetra_MultiVector Ytilde(Y.Map(),Y.NumVectors());
128 Reordering_->Pinv(X,Xtilde);
132 Reordering_->P(Ytilde,Y);
140 Solve(
bool Upper,
bool Trans,
bool UnitDiagonal,
141 const Epetra_MultiVector& X, Epetra_MultiVector& Y)
const 148 Apply(
const Epetra_MultiVector& X, Epetra_MultiVector& Y)
const virtual int Apply(const Epetra_MultiVector &X, Epetra_MultiVector &Y) const
Applies the reordered matrix to multi-vector X, returns the result in Y.
const char * Label() const
Returns the label of this object.
virtual int Solve(bool Upper, bool Trans, bool UnitDiagonal, const Epetra_MultiVector &X, Epetra_MultiVector &Y) const
Solve, not implemented.
Ifpack_ReorderFilter & operator=(const Ifpack_ReorderFilter &RHS)
Operator assignment.
virtual int ExtractDiagonalCopy(Epetra_Vector &Diagonal) const
Extracts a copy of the diagonal of the reordered matrix.
virtual int Multiply(bool TransA, const Epetra_MultiVector &X, Epetra_MultiVector &Y) const
Multiplies multi-vector X with the reordered matrix, returns result in Y.
Teuchos::RefCountPtr< Ifpack_Reordering > Reordering() const
Returns a reference-counted pointer to the internally stored pointer to Ifpack_Reordering..
virtual int MaxNumEntries() const
Returns maximum num entries.
virtual int NumMyRows() const
Returns the number of local rows.
bool UseTranspose() const
Returns true if the transpose of this matrix is used.
Teuchos::RefCountPtr< Epetra_RowMatrix > Matrix() const
Returns a reference-counted pointer to the internally stored pointer to Epetra_RowMatrix.
Ifpack_ReorderFilter: a class for light-weight reorder of local rows and columns of an Epetra_RowMatr...
virtual int NumMyRows() const
Returns the number of local rows.