IFPACK Development
Ifpack_Utils.h
Go to the documentation of this file.
00001 /*@HEADER
00002 // ***********************************************************************
00003 //
00004 //       Ifpack: Object-Oriented Algebraic Preconditioner Package
00005 //                 Copyright (2002) Sandia Corporation
00006 //
00007 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
00008 // license for use of this work by or on behalf of the U.S. Government.
00009 //
00010 // Redistribution and use in source and binary forms, with or without
00011 // modification, are permitted provided that the following conditions are
00012 // met:
00013 //
00014 // 1. Redistributions of source code must retain the above copyright
00015 // notice, this list of conditions and the following disclaimer.
00016 //
00017 // 2. Redistributions in binary form must reproduce the above copyright
00018 // notice, this list of conditions and the following disclaimer in the
00019 // documentation and/or other materials provided with the distribution.
00020 //
00021 // 3. Neither the name of the Corporation nor the names of the
00022 // contributors may be used to endorse or promote products derived from
00023 // this software without specific prior written permission.
00024 //
00025 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
00026 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00027 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00028 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
00029 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00030 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00031 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00032 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00033 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00034 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00035 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00036 //
00037 // Questions? Contact Michael A. Heroux (maherou@sandia.gov)
00038 //
00039 // ***********************************************************************
00040 //@HEADER
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" // Not a standard header file!
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Friends