43 #ifndef _IFPACK_CRSRILUK_H_ 44 #define _IFPACK_CRSRILUK_H_ 46 #include "Ifpack_ConfigDefs.h" 48 #include "Ifpack_IlukGraph.h" 49 #include "Epetra_ConfigDefs.h" 50 #include "Epetra_CompObject.h" 51 #include "Epetra_Operator.h" 52 #include "Epetra_CrsMatrix.h" 53 #include "Epetra_Object.h" 54 #include "Epetra_MultiVector.h" 55 #include "Epetra_Vector.h" 56 #include "Epetra_Map.h" 58 class Epetra_VbrMatrix;
59 class Epetra_RowMatrix;
61 #include "Teuchos_RefCountPtr.hpp" 210 class Ifpack_CrsRiluk:
public Epetra_Object,
public Epetra_CompObject,
public virtual Epetra_Operator {
214 friend std::ostream& operator << (std::ostream& os,
const Ifpack_CrsRiluk& A);
238 int InitValues(
const Epetra_CrsMatrix &A);
247 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES // FIXME LONG LONG 248 int InitValues(
const Epetra_VbrMatrix &A);
264 void SetOverlapMode( Epetra_CombineMode OverlapMode) {OverlapMode_ = OverlapMode;
return;}
274 int SetParameters(
const Teuchos::ParameterList& parameterlist,
275 bool cerr_warning_if_unused=
false);
306 int Solve(
bool Trans,
const Epetra_MultiVector& X, Epetra_MultiVector& Y)
const;
319 int Multiply(
bool Trans,
const Epetra_MultiVector& X, Epetra_MultiVector& Y)
const;
330 int Condest(
bool Trans,
double & ConditionNumberEstimate)
const;
346 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES 347 int NumGlobalRows()
const {
return(Graph().NumGlobalRows());};
360 long long NumGlobalRows64()
const {
return(Graph().NumGlobalRows64());};
361 long long NumGlobalCols64()
const {
return(Graph().NumGlobalCols64());};
362 long long NumGlobalNonzeros64()
const {
return(L().NumGlobalNonzeros64()+U().NumGlobalNonzeros64());};
363 virtual long long NumGlobalBlockDiagonals64()
const {
return(Graph().NumGlobalBlockDiagonals64());};
381 #ifndef EPETRA_NO_32BIT_GLOBAL_INDICES 384 long long IndexBase64()
const {
return(Graph().IndexBase64());};
390 const Epetra_CrsMatrix &
L()
const {
return(*L_);};
393 const Epetra_Vector &
D()
const {
return(*D_);};
396 const Epetra_CrsMatrix &
U()
const {
return(*U_);};
401 const char *
Label()
const {
return(Epetra_Object::Label());};
413 int SetUseTranspose(
bool UseTranspose_in) {UseTranspose_ = UseTranspose_in;
return(0);};
427 int Apply(
const Epetra_MultiVector& X, Epetra_MultiVector& Y)
const {
444 int ApplyInverse(
const Epetra_MultiVector& X, Epetra_MultiVector& Y)
const {
463 const Epetra_Comm &
Comm()
const{
return(Comm_);};
467 void SetFactored(
bool Flag) {Factored_ = Flag;};
468 void SetValuesInitialized(
bool Flag) {ValuesInitialized_ = Flag;};
469 bool Allocated()
const {
return(Allocated_);};
470 int SetAllocated(
bool Flag) {Allocated_ = Flag;
return(0);};
471 int BlockGraph2PointGraph(
const Epetra_CrsGraph & BG, Epetra_CrsGraph & PG,
bool Upper);
478 int InitAllValues(
const Epetra_RowMatrix & A,
int MaxNumEntries);
479 int BlockMap2PointMap(
const Epetra_BlockMap & BlockMap, Teuchos::RefCountPtr<Epetra_Map>* PointMap);
480 int GenerateXY(
bool Trans,
481 const Epetra_MultiVector& Xin,
const Epetra_MultiVector& Yin,
482 Teuchos::RefCountPtr<Epetra_MultiVector>* Xout,
483 Teuchos::RefCountPtr<Epetra_MultiVector>* Yout)
const;
484 bool UserMatrixIsVbr_;
485 bool UserMatrixIsCrs_;
488 Teuchos::RefCountPtr<Epetra_Map> IlukRowMap_;
489 Teuchos::RefCountPtr<Epetra_Map> IlukDomainMap_;
490 Teuchos::RefCountPtr<Epetra_Map> IlukRangeMap_;
491 Teuchos::RefCountPtr<const Epetra_Map> U_DomainMap_;
492 Teuchos::RefCountPtr<const Epetra_Map> L_RangeMap_;
493 const Epetra_Comm & Comm_;
494 Teuchos::RefCountPtr<Epetra_CrsMatrix> L_;
495 Teuchos::RefCountPtr<Epetra_CrsMatrix> U_;
496 Teuchos::RefCountPtr<Epetra_CrsGraph> L_Graph_;
497 Teuchos::RefCountPtr<Epetra_CrsGraph> U_Graph_;
498 Teuchos::RefCountPtr<Epetra_Vector> D_;
503 bool ValuesInitialized_;
508 mutable double Condest_;
510 mutable Teuchos::RefCountPtr<Epetra_MultiVector> OverlapX_;
511 mutable Teuchos::RefCountPtr<Epetra_MultiVector> OverlapY_;
512 mutable Teuchos::RefCountPtr<Epetra_MultiVector> VbrX_;
513 mutable Teuchos::RefCountPtr<Epetra_MultiVector> VbrY_;
514 Epetra_CombineMode OverlapMode_;
520 std::ostream& operator << (std::ostream& os,
const Ifpack_CrsRiluk& A);
double GetRelaxValue()
Get RILU(k) relaxation parameter.
int NumMyNonzeros() const
Returns the number of nonzero entries in the local graph.
Ifpack_CrsRiluk: A class for constructing and using an incomplete lower/upper (ILU) factorization of ...
Epetra_CombineMode GetOverlapMode()
Get overlap mode type.
double NormInf() const
Returns 0.0 because this class cannot compute Inf-norm.
const Epetra_CrsMatrix & L() const
Returns the address of the L factor associated with this factored matrix.
const char * Label() const
Returns a character string describing the operator.
const Epetra_Map & OperatorRangeMap() const
Returns the Epetra_Map object associated with the range of this operator.
void SetOverlapMode(Epetra_CombineMode OverlapMode)
Set overlap mode type.
Ifpack_IlukGraph: A class for constructing level filled graphs for use with ILU(k) class precondition...
int NumGlobalCols() const
Returns the number of global matrix columns.
void SetAbsoluteThreshold(double Athresh)
Set absolute threshold value.
const Epetra_Comm & Comm() const
Returns the Epetra_BlockMap object associated with the range of this matrix operator.
void SetRelativeThreshold(double Rthresh)
Set relative threshold value.
int ApplyInverse(const Epetra_MultiVector &X, Epetra_MultiVector &Y) const
Returns the result of a Epetra_Operator inverse applied to an Epetra_MultiVector X in Y...
Ifpack_ScalingType enumerable type.
const Epetra_Map & OperatorDomainMap() const
Returns the Epetra_Map object associated with the domain of this operator.
int NumMyCols() const
Returns the number of local matrix columns.
const Epetra_CrsMatrix & U() const
Returns the address of the L factor associated with this factored matrix.
double GetAbsoluteThreshold()
Get absolute threshold value.
virtual int NumGlobalBlockDiagonals() const
Returns the number of diagonal entries found in the global input graph.
int Apply(const Epetra_MultiVector &X, Epetra_MultiVector &Y) const
Returns the result of a Epetra_Operator applied to a Epetra_MultiVector X in Y.
int IndexBase() const
Returns the index base for row and column indices for this graph.
int NumGlobalNonzeros() const
Returns the number of nonzero entries in the global graph.
bool HasNormInf() const
Returns false because this class cannot compute an Inf-norm.
bool Factored() const
If factor is completed, this query returns true, otherwise it returns false.
int NumMyRows() const
Returns the number of local matrix rows.
bool ValuesInitialized() const
If values have been initialized, this query returns true, otherwise it returns false.
void SetRelaxValue(double RelaxValue)
Set RILU(k) relaxation parameter.
const Epetra_Vector & D() const
Returns the address of the D factor associated with this factored matrix.
bool UseTranspose() const
Returns the current UseTranspose setting.
double GetRelativeThreshold()
Get relative threshold value.
int SetUseTranspose(bool UseTranspose_in)
If set true, transpose of this operator will be applied.
virtual int NumMyBlockDiagonals() const
Returns the number of diagonal entries found in the local input graph.
virtual int NumMyDiagonals() const
Returns the number of nonzero diagonal values found in matrix.
const Ifpack_IlukGraph & Graph() const
returns the address of the Ifpack_IlukGraph associated with this factored matrix. ...