43#ifndef IFPACK_NODEFILTER_H
44#define IFPACK_NODEFILTER_H
46#if defined(Ifpack_SHOW_DEPRECATED_WARNINGS)
48#warning "The Ifpack package is deprecated"
52#ifdef IFPACK_NODE_AWARE_CODE
54#include "Ifpack_ConfigDefs.h"
56#include "Epetra_MpiComm.h"
58#include "Epetra_SerialComm.h"
60#include "Epetra_RowMatrix.h"
61#include "Epetra_CrsMatrix.h"
62#include "Epetra_IntVector.h"
63#include "Teuchos_RCP.hpp"
64#include "Ifpack_OverlappingRowMatrix.h"
111 Ifpack_NodeFilter(
const Teuchos::RCP<const Epetra_RowMatrix>& Matrix,
int nodeID);
117 ~Ifpack_NodeFilter(){
118 if(Ac_LIDMap_)
delete [] Ac_LIDMap_;
119 if(Bc_LIDMap_)
delete [] Bc_LIDMap_;
120 if(Ar_LIDMap_)
delete [] Ar_LIDMap_;
121 if(Br_LIDMap_)
delete [] Br_LIDMap_;
122 if(tempX_)
delete [] tempX_;
123 if(tempY_)
delete [] tempY_;
124 if(ImportVector_)
delete ImportVector_;
142 NumEntries = NumEntries_[MyRow];
149 return(MaxNumEntries_);
167 virtual inline int ExtractMyRowCopy(
int MyRow,
int Length,
int & NumEntries,
double *Values,
int * Indices)
const;
192 virtual int Multiply(
bool TransA,
const Epetra_MultiVector& X, Epetra_MultiVector& Y)
const
194 if (TransA ==
true) {
198 IFPACK_CHK_ERR(
Apply(X,Y));
203 virtual int Solve(
bool Upper,
bool Trans,
bool UnitDiagonal,
const Epetra_MultiVector& X,
204 Epetra_MultiVector& Y)
const
209 virtual int Apply(
const Epetra_MultiVector& X,
210 Epetra_MultiVector& Y)
const;
213 Epetra_MultiVector& Y)
const;
215 virtual int InvRowSums(Epetra_Vector& x)
const
221 virtual int LeftScale(
const Epetra_Vector& x)
227 virtual int InvColSums(Epetra_Vector& x)
const
234 virtual int RightScale(
const Epetra_Vector& x)
244 virtual bool Filled()
const
270 return(NumGlobalNonzeros_);
276 return(NumGlobalRows_);
282 return(NumGlobalRows_);
288 return(NumGlobalRows_);
294 return(NumMyNonzeros_);
318 return(Matrix_->LowerTriangular());
324 return(Matrix_->UpperTriangular());
346 virtual const Epetra_Import* Importer()
const {
return(&*Importer_);}
348 virtual const Epetra_Export* Exporter()
const {
return(&*Exporter_);}
353 int SetOwnership(
bool ownership)
361 UseTranspose_ = UseTranspose_in;
368 return(UseTranspose_);
378 const Epetra_Comm &
Comm()
const
396const Epetra_BlockMap&
Map()
const;
398const char*
Label()
const{
403 void UpdateImportVector(
int NumVectors)
const;
404 void UpdateExportVector(
int NumVectors)
const;
407 Teuchos::RCP<const Epetra_RowMatrix> Matrix_;
408 const Ifpack_OverlappingRowMatrix* ovA_;
411 Teuchos::RCP<Epetra_MpiComm> SubComm_;
412 MPI_Comm nodeMPIComm_;
415 Teuchos::RCP<Epetra_SerialComm> SubComm_;
418 Teuchos::RCP<Epetra_Map> Map_;
420 Teuchos::RCP<Epetra_Map> colMap_;
430 int NumGlobalNonzeros_;
436 std::vector<int> NumEntries_;
438 mutable std::vector<int> Indices_;
440 mutable std::vector<double> Values_;
445 Teuchos::RCP<Epetra_Vector> Diagonal_;
456 const Epetra_CrsMatrix* Acrs_;
460 double *tempX_,*tempY_;
465 mutable Epetra_MultiVector* ExportVector_;
466 mutable Epetra_MultiVector* ImportVector_;
467 Teuchos::RCP<Epetra_Import> Importer_;
468 Teuchos::RCP<Epetra_Export> Exporter_;
virtual int SetUseTranspose(bool UseTranspose)=0
virtual int Apply(const Epetra_MultiVector &X, Epetra_MultiVector &Y) const=0
virtual const Epetra_Comm & Comm() const=0
virtual const char * Label() const=0
virtual int ApplyInverse(const Epetra_MultiVector &X, Epetra_MultiVector &Y) 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 Multiply(bool TransA, const Epetra_MultiVector &X, Epetra_MultiVector &Y) const=0
virtual int ExtractDiagonalCopy(Epetra_Vector &Diagonal) 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 NumMyRowEntries(int MyRow, int &NumEntries) const=0
virtual int Solve(bool Upper, bool Trans, bool UnitDiagonal, const Epetra_MultiVector &X, Epetra_MultiVector &Y) const=0
virtual int NumGlobalRows() const=0
virtual bool LowerTriangular() const=0
virtual int NumGlobalDiagonals() const=0
virtual int MaxNumEntries() const=0
virtual int ExtractMyRowCopy(int MyRow, int Length, int &NumEntries, double *Values, int *Indices) const=0
virtual int InvRowSums(Epetra_Vector &x) const=0
virtual const Epetra_Import * RowMatrixImporter() const=0
virtual bool UpperTriangular() const=0
virtual int RightScale(const Epetra_Vector &x)=0
virtual double NormOne() const=0
virtual double NormInf() const=0
virtual bool Filled() const=0
virtual int InvColSums(Epetra_Vector &x) const=0
virtual int LeftScale(const Epetra_Vector &x)=0
virtual const Epetra_BlockMap & Map() const=0