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()),
67 NumMyRows_(RHS.NumMyRows()),
68 MaxNumEntries_(RHS.MaxNumEntries())
70 strcpy(Label_,RHS.
Label());
86 strcpy(Label_,RHS.
Label());
91 int Ifpack_ReorderFilter::
92 ExtractMyRowCopy(
int MyRow,
int ,
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]);
115 IFPACK_CHK_ERR((Reordering_->P(DiagonalTilde,Diagonal)));
128 Reordering_->Pinv(X,Xtilde);
132 Reordering_->P(Ytilde,Y);
bool UseTranspose() const
Returns true if the transpose of this matrix is used.
virtual int Apply(const Epetra_MultiVector &X, Epetra_MultiVector &Y) const
Applies the reordered matrix to multi-vector X, returns the result in Y.
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.
virtual int MaxNumEntries() const
Returns maximum num entries.
Ifpack_ReorderFilter & operator=(const Ifpack_ReorderFilter &RHS)
Operator assignment.
const char * Label() const
Returns the label of this object.
virtual int NumMyRows() const
Returns the number of local rows.
virtual int Solve(bool Upper, bool Trans, bool UnitDiagonal, const Epetra_MultiVector &X, Epetra_MultiVector &Y) const
Solve, not implemented.
Teuchos::RefCountPtr< Epetra_RowMatrix > Matrix() const
Returns a reference-counted pointer to the internally stored pointer to Epetra_RowMatrix.
Teuchos::RefCountPtr< Ifpack_Reordering > Reordering() const
Returns a reference-counted pointer to the internally stored pointer to Ifpack_Reordering..
Ifpack_ReorderFilter: a class for light-weight reorder of local rows and columns of an Epetra_RowMatr...
virtual int ExtractDiagonalCopy(Epetra_Vector &Diagonal) const
Extracts a copy of the diagonal of the reordered matrix.