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"
54Ifpack_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())
64Ifpack_ReorderFilter::Ifpack_ReorderFilter(
const Ifpack_ReorderFilter& RHS) :
70 strcpy(Label_,RHS.Label());
82 Reordering_ = RHS.Reordering();
83 MaxNumEntries_ = RHS.MaxNumEntries();
84 NumMyRows_ = RHS.NumMyRows();
86 strcpy(Label_,RHS.Label());
91int Ifpack_ReorderFilter::
92ExtractMyRowCopy(
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);
140Solve(
bool ,
bool ,
bool ,
const Epetra_BlockMap & Map() const
Ifpack_ReorderFilter: a class for light-weight reorder of local rows and columns of an Epetra_RowMatr...
bool UseTranspose() const
Returns true if the transpose of this matrix is used.
virtual int MaxNumEntries() const
Returns maximum num entries.
virtual int NumMyRows() const
Returns the number of local rows.
Teuchos::RefCountPtr< Epetra_RowMatrix > Matrix() const
Returns a reference-counted pointer to the internally stored pointer to Epetra_RowMatrix.
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 ExtractDiagonalCopy(Epetra_Vector &Diagonal) const
Extracts a copy of the diagonal of the reordered matrix.
virtual int Apply(const Epetra_MultiVector &X, Epetra_MultiVector &Y) const
Applies the reordered matrix to multi-vector X, returns the result in Y.
Ifpack_ReorderFilter & operator=(const Ifpack_ReorderFilter &RHS)
Operator assignment.
Teuchos::RefCountPtr< Ifpack_Reordering > Reordering() const
Returns a reference-counted pointer to the internally stored pointer to Ifpack_Reordering....
virtual int Solve(bool Upper, bool Trans, bool UnitDiagonal, const Epetra_MultiVector &X, Epetra_MultiVector &Y) const
Solve, not implemented.