19#ifndef MY_INCOMPLETE_CHOL_H
20#define MY_INCOMPLETE_CHOL_H
22#include "Epetra_ConfigDefs.h"
23#include "Epetra_BLAS.h"
24#include "Epetra_Comm.h"
25#include "Epetra_LAPACK.h"
26#include "Epetra_Map.h"
27#include "Epetra_MultiVector.h"
28#include "Epetra_Operator.h"
29#include "Epetra_RowMatrix.h"
31#include "Ifpack_ConfigDefs.h"
32#include "Ifpack_CrsIct.h"
34class MyIncompleteChol :
public virtual Epetra_Operator {
38 const Epetra_Comm &MyComm;
39 const Epetra_BLAS callBLAS;
40 const Epetra_LAPACK callLAPACK;
42 const Epetra_Operator *K;
48 const Epetra_MultiVector *Q;
55 MyIncompleteChol(
const MyIncompleteChol &ref);
56 MyIncompleteChol& operator=(
const MyIncompleteChol &ref);
60 MyIncompleteChol(
const Epetra_Comm& _Com,
const Epetra_Operator *KK,
61 double dropTol = Epetra_MinDouble,
int lFill = 0,
const Epetra_MultiVector *Z = 0);
63 int SetUseLeftProjection(
bool proj) { leftProjection = proj;
return 0; }
64 int SetUseRightProjection(
bool proj) { rightProjection = proj;
return 0; }
68 char * Label()
const {
return "Epetra_Operator for incomplete Cholesky preconditioner"; };
70 bool UseTranspose()
const {
return (
false); };
71 int SetUseTranspose(
bool UseTranspose) {
return 0; };
73 bool HasNormInf()
const {
return (
false); };
74 double NormInf()
const {
return (-1.0); };
76 int Apply(
const Epetra_MultiVector &X, Epetra_MultiVector &Y)
const;
77 int ApplyInverse(
const Epetra_MultiVector &X, Epetra_MultiVector &Y)
const;
79 const Epetra_Comm& Comm()
const {
return MyComm; };
81 const Epetra_Map& OperatorDomainMap()
const {
return K->OperatorDomainMap(); };
82 const Epetra_Map& OperatorRangeMap()
const {
return K->OperatorRangeMap(); };