43 #ifndef IFPACK_NODEFILTER_H
44 #define IFPACK_NODEFILTER_H
46 #ifdef IFPACK_NODE_AWARE_CODE
48 #include "Ifpack_ConfigDefs.h"
50 #include "Epetra_MpiComm.h"
52 #include "Epetra_SerialComm.h"
54 #include "Epetra_RowMatrix.h"
55 #include "Epetra_CrsMatrix.h"
56 #include "Epetra_IntVector.h"
57 #include "Teuchos_RCP.hpp"
58 #include "Ifpack_OverlappingRowMatrix.h"
104 Ifpack_NodeFilter(
const Teuchos::RCP<const Epetra_RowMatrix>& Matrix,
int nodeID);
110 ~Ifpack_NodeFilter(){
112 if(Ac_LIDMap_)
delete [] Ac_LIDMap_;
113 if(Bc_LIDMap_)
delete [] Bc_LIDMap_;
114 if(Ar_LIDMap_)
delete [] Ar_LIDMap_;
115 if(Br_LIDMap_)
delete [] Br_LIDMap_;
116 if(tempX_)
delete [] tempX_;
117 if(tempY_)
delete [] tempY_;
118 if(ImportVector_)
delete ImportVector_;
136 NumEntries = NumEntries_[MyRow];
143 return(MaxNumEntries_);
161 virtual inline int ExtractMyRowCopy(
int MyRow,
int Length,
int & NumEntries,
double *Values,
int * Indices)
const;
188 if (TransA ==
true) {
192 IFPACK_CHK_ERR(
Apply(X,Y));
238 virtual bool Filled()
const
264 return(NumGlobalNonzeros_);
270 return(NumGlobalRows_);
276 return(NumGlobalRows_);
282 return(NumGlobalRows_);
288 return(NumMyNonzeros_);
312 return(Matrix_->LowerTriangular());
318 return(Matrix_->UpperTriangular());
340 virtual const Epetra_Import* Importer()
const {
return(&*Importer_);}
342 virtual const Epetra_Export* Exporter()
const {
return(&*Exporter_);}
347 int SetOwnership(
bool ownership)
355 UseTranspose_ = UseTranspose_in;
362 return(UseTranspose_);
392 const char*
Label()
const{
397 void UpdateImportVector(
int NumVectors)
const;
398 void UpdateExportVector(
int NumVectors)
const;
401 Teuchos::RCP<const Epetra_RowMatrix> Matrix_;
404 Teuchos::RCP<Epetra_MpiComm> SubComm_;
406 MPI_Comm nodeMPIComm_;
408 Teuchos::RCP<Epetra_SerialComm> SubComm_;
411 Teuchos::RCP<Epetra_Map> Map_;
414 Teuchos::RCP<Epetra_Map> colMap_;
424 int NumGlobalNonzeros_;
430 std::vector<int> NumEntries_;
432 mutable std::vector<int> Indices_;
434 mutable std::vector<double> Values_;
439 Teuchos::RCP<Epetra_Vector> Diagonal_;
454 double *tempX_,*tempY_;
461 Teuchos::RCP<Epetra_Import> Importer_;
462 Teuchos::RCP<Epetra_Export> Exporter_;
465 #endif //ifdef IFPACK_NODE_AWARE_CODE
virtual int RightScale(const Epetra_Vector &x)=0
virtual const Epetra_Map & RowMatrixRowMap() const =0
virtual int SetUseTranspose(bool UseTranspose)=0
virtual double NormOne() const =0
virtual int ApplyInverse(const Epetra_MultiVector &X, Epetra_MultiVector &Y) const =0
virtual const Epetra_Map & OperatorDomainMap() const =0
virtual int ExtractDiagonalCopy(Epetra_Vector &Diagonal) const =0
virtual const char * Label() const =0
virtual int LeftScale(const Epetra_Vector &x)=0
virtual int InvRowSums(Epetra_Vector &x) const =0
virtual int NumGlobalNonzeros() const =0
virtual bool LowerTriangular() const =0
virtual int NumMyCols() const =0
virtual int NumMyRowEntries(int MyRow, int &NumEntries) const =0
virtual int Apply(const Epetra_MultiVector &X, Epetra_MultiVector &Y) const =0
virtual int MaxNumEntries() const =0
virtual const Epetra_Map & OperatorRangeMap() const =0
virtual const Epetra_Comm & Comm() const =0
virtual const Epetra_Import * RowMatrixImporter() const =0
virtual bool UseTranspose() const =0
virtual const Epetra_BlockMap & Map() const =0
virtual double NormInf() const =0
virtual int NumMyRows() const =0
virtual bool Filled() const =0
Ifpack_OverlappingRowMatrix: matrix with ghost rows, based on Epetra_RowMatrix.
virtual int NumGlobalDiagonals() const =0
virtual int NumGlobalCols() const =0
virtual int Multiply(bool TransA, const Epetra_MultiVector &X, Epetra_MultiVector &Y) const =0
virtual int NumMyDiagonals() const =0
virtual bool HasNormInf() const =0
virtual bool UpperTriangular() const =0
virtual int ExtractMyRowCopy(int MyRow, int Length, int &NumEntries, double *Values, int *Indices) const =0
virtual const Epetra_Map & RowMatrixColMap() const =0
virtual int InvColSums(Epetra_Vector &x) 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 int NumMyNonzeros() const =0