43 #ifndef IFPACK_NODEFILTER_H 44 #define IFPACK_NODEFILTER_H 46 #ifdef IFPACK_NODE_AWARE_CODE 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" 60 class Epetra_MultiVector;
63 class Epetra_BlockMap;
100 class Ifpack_NodeFilter :
public virtual Epetra_RowMatrix {
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];
141 virtual int MaxNumEntries()
const 143 return(MaxNumEntries_);
161 virtual inline int ExtractMyRowCopy(
int MyRow,
int Length,
int & NumEntries,
double *Values,
int * Indices)
const;
170 virtual int ExtractDiagonalCopy(Epetra_Vector & Diagonal)
const;
186 virtual int Multiply(
bool TransA,
const Epetra_MultiVector& X, Epetra_MultiVector& Y)
const 188 if (TransA ==
true) {
197 virtual int Solve(
bool Upper,
bool Trans,
bool UnitDiagonal,
const Epetra_MultiVector& X,
198 Epetra_MultiVector& Y)
const 203 virtual int Apply(
const Epetra_MultiVector& X,
204 Epetra_MultiVector& Y)
const;
206 virtual int ApplyInverse(
const Epetra_MultiVector& X,
207 Epetra_MultiVector& Y)
const;
209 virtual int InvRowSums(Epetra_Vector& x)
const 215 virtual int LeftScale(
const Epetra_Vector& x)
221 virtual int InvColSums(Epetra_Vector& x)
const 228 virtual int RightScale(
const Epetra_Vector& x)
238 virtual bool Filled()
const 247 virtual double NormInf()
const 256 virtual double NormOne()
const 262 virtual int NumGlobalNonzeros()
const 264 return(NumGlobalNonzeros_);
268 virtual int NumGlobalRows()
const 270 return(NumGlobalRows_);
274 virtual int NumGlobalCols()
const 276 return(NumGlobalRows_);
280 virtual int NumGlobalDiagonals()
const 282 return(NumGlobalRows_);
286 virtual int NumMyNonzeros()
const 288 return(NumMyNonzeros_);
292 virtual int NumMyRows()
const 298 virtual int NumMyCols()
const 304 virtual int NumMyDiagonals()
const 310 virtual bool LowerTriangular()
const 312 return(Matrix_->LowerTriangular());
316 virtual bool UpperTriangular()
const 318 return(Matrix_->UpperTriangular());
322 virtual const Epetra_Map & RowMatrixRowMap()
const 328 virtual const Epetra_Map & RowMatrixColMap()
const 334 virtual const Epetra_Import * RowMatrixImporter()
const 340 virtual const Epetra_Import* Importer()
const {
return(&*Importer_);}
342 virtual const Epetra_Export* Exporter()
const {
return(&*Exporter_);}
347 int SetOwnership(
bool ownership)
353 int SetUseTranspose(
bool UseTranspose_in)
355 UseTranspose_ = UseTranspose_in;
360 bool UseTranspose()
const 362 return(UseTranspose_);
366 bool HasNormInf()
const 372 const Epetra_Comm & Comm()
const 378 const Epetra_Map & OperatorDomainMap()
const 384 const Epetra_Map & OperatorRangeMap()
const 390 const Epetra_BlockMap& Map()
const;
392 const char* Label()
const{
397 void UpdateImportVector(
int NumVectors)
const;
398 void UpdateExportVector(
int NumVectors)
const;
406 MPI_Comm nodeMPIComm_;
424 int NumGlobalNonzeros_;
430 std::vector<int> NumEntries_;
432 mutable std::vector<int> Indices_;
434 mutable std::vector<double> Values_;
450 const Epetra_CrsMatrix* Acrs_;
454 double *tempX_,*tempY_;
459 mutable Epetra_MultiVector* ExportVector_;
460 mutable Epetra_MultiVector* ImportVector_;
465 #endif //ifdef IFPACK_NODE_AWARE_CODE
Ifpack_OverlappingRowMatrix: matrix with ghost rows, based on Epetra_RowMatrix.
#define IFPACK_RETURN(ifpack_err)
int NumMyRowEntries(void *A, int Row, int *numEntries)
int Solve(int, TYPE *, TYPE *, TYPE *)
#define IFPACK_CHK_ERR(ifpack_err)