Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 #ifndef IFPACK_UTILS_H
00044 #define IFPACK_UTILS_H
00045
00046 #include "Ifpack_ConfigDefs.h"
00047 #include "Epetra_Comm.h"
00048 #if !( defined(_WIN32) )
00049 # include "unistd.h"
00050 #endif
00051 class Epetra_RowMatrix;
00052 class Epetra_CrsMatrix;
00053 class Epetra_CrsGraph;
00054 class Epetra_RowMatrix;
00055 class Epetra_MultiVector;
00056 class Epetra_Vector;
00057
00061
00062 void Ifpack_PrintLine();
00063
00065 void Ifpack_BreakForDebugger(Epetra_Comm& Comm);
00066
00068 Epetra_CrsMatrix* Ifpack_CreateOverlappingCrsMatrix(const Epetra_RowMatrix* Matrix,
00069 const int OverlappingLevel);
00070
00072 Epetra_CrsGraph* Ifpack_CreateOverlappingCrsMatrix(const Epetra_CrsGraph* Graph,
00073 const int OverlappingLevel);
00074
00076 string Ifpack_toString(const int& x);
00077
00079 string Ifpack_toString(const double& x);
00080
00082 int Ifpack_PrintResidual(char* Label, const Epetra_RowMatrix& A,
00083 const Epetra_MultiVector& X, const Epetra_MultiVector&Y);
00084
00085 int Ifpack_PrintResidual(const int iter, const Epetra_RowMatrix& A,
00086 const Epetra_MultiVector& X, const Epetra_MultiVector&Y);
00087
00088 void Ifpack_PrintSparsity_Simple(const Epetra_RowMatrix& A);
00089
00091 int Ifpack_Analyze(const Epetra_RowMatrix& A, const bool Cheap = false,
00092 const int NumPDEEqns = 1);
00093
00095
00103 int Ifpack_AnalyzeMatrixElements(const Epetra_RowMatrix& A,
00104 const bool abs = false,
00105 const int steps = 10);
00106
00108
00116 int Ifpack_AnalyzeVectorElements(const Epetra_Vector& Diagonal,
00117 const bool abs = false,
00118 const int steps = 10);
00119
00121
00133 int Ifpack_PrintSparsity(const Epetra_RowMatrix& A, const char* FileName = 0,
00134 const int NumPDEEqns = 1);
00135
00136
00137 class Ifpack_Element {
00138
00139 public:
00140 Ifpack_Element() {};
00141
00142 Ifpack_Element(const Ifpack_Element& rhs) {
00143 i_ = rhs.Index();
00144 val_ = rhs.Value();
00145 aval_ = rhs.AbsValue();
00146 }
00147
00148 inline int Index() const {
00149 return(i_);
00150 }
00151
00152 inline double Value() const {
00153 return(val_);
00154 }
00155
00156 inline double AbsValue() const {
00157 return(aval_);
00158 }
00159
00160 inline void SetIndex(const int i)
00161 {
00162 i_ = i;
00163 }
00164
00165 inline void SetValue(const double val)
00166 {
00167 val_ = val;
00168 aval_ = IFPACK_ABS(val_);
00169 }
00170
00171 inline bool operator <(const Ifpack_Element& rhs) const
00172 {
00173 if (rhs.AbsValue() > AbsValue())
00174 return(false);
00175 else if (rhs.AbsValue() < AbsValue())
00176 return(true);
00177 else if (rhs.Index() < Index())
00178 return(true);
00179 return(false);
00180 }
00181
00182 private:
00183 int i_;
00184 double val_;
00185 double aval_;
00186
00187 };
00188
00189 #endif // IFPACK_UTILS_H