38 #ifndef IFPACK_SUBDOMAINFILTER_H 39 #define IFPACK_SUBDOMAINFILTER_H 43 #ifdef HAVE_IFPACK_PARALLEL_SUBDOMAIN_SOLVERS 46 #include "Epetra_MpiComm.h" 48 #include "Epetra_SerialComm.h" 50 #include "Epetra_RowMatrix.h" 51 #include "Epetra_CrsMatrix.h" 52 #include "Epetra_IntVector.h" 53 #include "Teuchos_RCP.hpp" 57 class Epetra_MultiVector;
60 class Epetra_BlockMap;
78 class Ifpack_SubdomainFilter :
public virtual Epetra_RowMatrix {
82 Ifpack_SubdomainFilter(
const Teuchos::RCP<const Epetra_RowMatrix>& Matrix,
int subdomainId);
87 ~Ifpack_SubdomainFilter();
104 NumEntries = NumEntries_[MyRow];
109 virtual int MaxNumEntries()
const 111 return(MaxNumEntries_);
129 virtual inline int ExtractMyRowCopy(
int MyRow,
int Length,
int & NumEntries,
double *Values,
int * Indices)
const;
138 virtual int ExtractDiagonalCopy(Epetra_Vector & Diagonal)
const;
154 virtual int Multiply(
bool TransA,
const Epetra_MultiVector& X, Epetra_MultiVector& Y)
const 156 if (TransA ==
true) {
165 virtual int Solve(
bool Upper,
bool Trans,
bool UnitDiagonal,
const Epetra_MultiVector& X,
166 Epetra_MultiVector& Y)
const 171 virtual int Apply(
const Epetra_MultiVector& X,
172 Epetra_MultiVector& Y)
const;
174 virtual int ApplyInverse(
const Epetra_MultiVector& X,
175 Epetra_MultiVector& Y)
const;
177 virtual int InvRowSums(Epetra_Vector& x)
const 183 virtual int LeftScale(
const Epetra_Vector& x)
189 virtual int InvColSums(Epetra_Vector& x)
const 196 virtual int RightScale(
const Epetra_Vector& x)
206 virtual bool Filled()
const 215 virtual double NormInf()
const 224 virtual double NormOne()
const 229 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES 230 virtual int NumGlobalNonzeros()
const 233 return(NumGlobalNonzeros_);
237 virtual int NumGlobalRows()
const 240 return(NumGlobalRows_);
244 virtual int NumGlobalCols()
const 246 return(NumGlobalCols_);
250 virtual int NumGlobalDiagonals()
const 252 return(NumGlobalRows_);
257 virtual long long NumGlobalNonzeros64()
const 259 return(NumGlobalNonzeros_);
263 virtual long long NumGlobalRows64()
const 265 return(NumGlobalRows_);
269 virtual long long NumGlobalCols64()
const 271 return(NumGlobalRows_);
275 virtual long long NumGlobalDiagonals64()
const 277 return(NumGlobalRows_);
281 virtual int NumMyNonzeros()
const 283 return(NumMyNonzeros_);
287 virtual int NumMyRows()
const 293 virtual int NumMyCols()
const 299 virtual int NumMyDiagonals()
const 305 virtual bool LowerTriangular()
const 307 return(Matrix_->LowerTriangular());
311 virtual bool UpperTriangular()
const 313 return(Matrix_->UpperTriangular());
317 virtual const Epetra_Map & RowMatrixRowMap()
const 323 virtual const Epetra_Map & RowMatrixColMap()
const 329 virtual const Epetra_Import * RowMatrixImporter()
const 335 virtual const Epetra_Import* Importer()
const {
return(&*Importer_);}
337 virtual const Epetra_Export* Exporter()
const {
return(&*Exporter_);}
342 int SetOwnership(
bool ownership)
348 int SetUseTranspose(
bool UseTranspose_in)
350 UseTranspose_ = UseTranspose_in;
355 bool UseTranspose()
const 357 return(UseTranspose_);
361 bool HasNormInf()
const 367 const Epetra_Comm & Comm()
const 373 const Epetra_Map & OperatorDomainMap()
const 379 const Epetra_Map & OperatorRangeMap()
const 385 const Epetra_BlockMap& Map()
const;
387 const char* Label()
const{
392 void UpdateImportVector(
int NumVectors)
const;
393 void UpdateExportVector(
int NumVectors)
const;
396 Teuchos::RCP<const Epetra_RowMatrix> Matrix_;
399 Teuchos::RCP<Epetra_MpiComm> SubComm_;
401 MPI_Comm subdomainMPIComm_;
403 Teuchos::RCP<Epetra_SerialComm> SubComm_;
406 Teuchos::RCP<Epetra_Map> Map_;
409 Teuchos::RCP<Epetra_Map> colMap_;
421 int NumGlobalNonzeros_;
427 std::vector<int> NumEntries_;
429 mutable std::vector<int> Indices_;
431 mutable std::vector<double> Values_;
436 Teuchos::RCP<Epetra_Vector> Diagonal_;
447 const Epetra_CrsMatrix* Acrs_;
455 mutable Epetra_MultiVector* ExportVector_;
456 mutable Epetra_MultiVector* ImportVector_;
457 Teuchos::RCP<Epetra_Import> Importer_;
458 Teuchos::RCP<Epetra_Export> Exporter_;
461 #endif //ifdef HAVE_IFPACK_PARALLEL_SUBDOMAIN_SOLVERS
Ifpack_OverlappingRowMatrix: matrix with ghost rows, based on Epetra_RowMatrix.
#define IFPACK_RETURN(ifpack_err)
int NumMyRowEntries(void *A, int Row, int *numEntries)
#define IFPACK_CHK_ERR(ifpack_err)