43 #ifndef IFPACK_EUCLID_H 44 #define IFPACK_EUCLID_H 46 #include "Ifpack_ConfigDefs.h" 49 #include "Ifpack_Condest.h" 51 #include "Epetra_CompObject.h" 52 #include "Epetra_MultiVector.h" 53 #include "Epetra_Vector.h" 54 #include "Epetra_CrsGraph.h" 55 #include "Epetra_CrsMatrix.h" 56 #include "Epetra_BlockMap.h" 57 #include "Epetra_Map.h" 58 #include "Epetra_Object.h" 59 #include "Epetra_Comm.h" 60 #include "Epetra_CrsMatrix.h" 61 #include "Epetra_Time.h" 62 #include "Teuchos_RefCountPtr.hpp" 63 #include "Teuchos_ParameterList.hpp" 64 #include "Epetra_MpiComm.h" 68 #include "TimeLog_dh.h" 69 #include "Parser_dh.h" 70 #include "Euclid_dh.h" 84 class Ifpack_Euclid:
public Epetra_Object,
public Epetra_CompObject,
public virtual Epetra_Operator {
86 friend std::ostream& operator << (std::ostream& os,
const Ifpack_Euclid& A);
91 Ifpack_Euclid(Epetra_CrsMatrix* A);
94 ~Ifpack_Euclid(){ Destroy();}
103 bool IsInitialized()
const{
return(IsInitialized_);}
111 bool IsComputed()
const{
return(IsComputed_);}
127 int SetParameters(Teuchos::ParameterList& parameterlist);
136 int SetParameter(std::string name,
int Value);
145 int SetParameter(std::string name,
double Value);
148 int SetUseTranspose(
bool UseTranspose_in) {UseTranspose_ = UseTranspose_in;
return(0);};
153 int Apply(
const Epetra_MultiVector& X,
154 Epetra_MultiVector& Y)
const{
return(Multiply(
false,X,Y));}
167 int Multiply(
bool Trans,
const Epetra_MultiVector& X, Epetra_MultiVector& Y)
const{
return A_->Multiply(Trans, X, Y); }
183 int ApplyInverse(
const Epetra_MultiVector& X, Epetra_MultiVector& Y)
const;
186 double Condest(
const Ifpack_CondestType CT = Ifpack_Cheap,
const int MaxIters = 1550,
187 const double Tol = 1e-9, Epetra_RowMatrix* Matrix_in = 0);
190 double Condest()
const{
return(Condest_);}
196 const char* Label()
const {
return(Label_);}
199 void SetLabel(
const char* Label_in){ strcpy(Label_,Label_in);}
202 const Epetra_Map &OperatorDomainMap()
const{
return A_->DomainMap();}
205 const Epetra_Map &OperatorRangeMap()
const{
return A_->RangeMap();}
208 double NormInf()
const {
return(0.0);};
211 bool HasNormInf()
const {
return(
false);};
214 bool UseTranspose()
const {
return(UseTranspose_);};
217 const Epetra_Comm & Comm()
const{
return(A_->Comm());};
220 const Epetra_CrsMatrix& Matrix()
const{
return(*A_);}
223 virtual int NumInitialize()
const{
return(NumInitialize_);}
226 virtual int NumCompute()
const{
return(NumCompute_);}
229 virtual int NumApplyInverse()
const{
return(NumApplyInverse_);}
232 virtual double InitializeTime()
const{
return(InitializeTime_);}
235 virtual double ComputeTime()
const{
return(ComputeTime_);}
238 virtual double ApplyInverseTime()
const{
return(ApplyInverseTime_);}
241 virtual double InitializeFlops()
const{
return(0.0);}
244 virtual double ComputeFlops()
const{
return(ComputeFlops_);}
247 virtual double ApplyInverseFlops()
const{
return(ApplyInverseFlops_);}
255 Ifpack_Euclid(
const Ifpack_Euclid& RHS) : Time_(RHS.Comm()){}
258 Ifpack_Euclid& operator=(
const Ifpack_Euclid& RHS){
return(*
this);}
264 MPI_Comm GetMpiComm()
const{
return (dynamic_cast<const Epetra_MpiComm*>(&A_->Comm()))->GetMpiComm();}
267 int CallEuclid(
double *x,
double *y)
const;
280 int Solve(
bool Trans,
const Epetra_MultiVector& X, Epetra_MultiVector& Y)
const;
283 int NumGlobalRows()
const {
return(A_->NumGlobalRows());};
286 int NumGlobalCols()
const {
return(A_->NumGlobalCols());};
289 int NumMyRows()
const {
return(A_->NumMyRows());};
292 int NumMyCols()
const {
return(A_->NumMyCols());};
298 Teuchos::RefCountPtr<Epetra_CrsMatrix> A_;
300 Teuchos::ParameterList List_;
316 mutable int NumApplyInverse_;
318 double InitializeTime_;
322 mutable double ApplyInverseTime_;
324 double ComputeFlops_;
326 mutable double ApplyInverseFlops_;
328 mutable Epetra_Time Time_;
348 std::ostream& operator << (std::ostream& os,
const Ifpack_Euclid& A);
350 #endif // HAVE_EUCLID Ifpack_ScalingType enumerable type.