IFPACK  Development
 All Classes Files Functions Variables Enumerations Friends
Ifpack.h
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_H
00044 #define IFPACK_H
00045 
00046 
00047 #include "Ifpack_ConfigDefs.h"
00048 #include "Ifpack_Preconditioner.h"
00049 #include "Teuchos_iostream_helpers.hpp"
00050 
00051 
00052 #ifdef HAVE_HYPRE
00053 #include "Ifpack_Hypre.h"
00054 #endif
00055 
00056 
00058 
00138 class Ifpack {
00139 public:
00140 
00142   enum EPrecType {
00143     POINT_RELAXATION
00144     ,POINT_RELAXATION_STAND_ALONE
00145     ,BLOCK_RELAXATION
00146     ,BLOCK_RELAXATION_STAND_ALONE
00147     ,BLOCK_RELAXATION_STAND_ALONE_ILU
00148     ,BLOCK_RELAXATION_STAND_ALONE_ILUT
00149     ,BLOCK_RELAXATION_STAND_ALONE_IC
00150 #ifdef HAVE_IFPACK_SUPERLU
00151     ,BLOCK_RELAXATION_STAND_ALONE_SILU
00152 #endif
00153 #ifdef HAVE_IFPACK_AMESOS
00154     ,BLOCK_RELAXATION_STAND_ALONE_AMESOS
00155     ,BLOCK_RELAXATION_AMESOS
00156     ,AMESOS
00157     ,AMESOS_STAND_ALONE
00158 #endif // HAVE_IFPACK_AMESOS
00159     ,IC
00160     ,IC_STAND_ALONE
00161     ,ICT
00162     ,ICT_STAND_ALONE
00163     ,ILU
00164     ,ILU_STAND_ALONE
00165     ,ILUT
00166     ,ILUT_STAND_ALONE
00167 #ifdef HAVE_IFPACK_SPARSKIT
00168     ,SPARSKIT
00169 #endif // HAVE_IFPACK_SPARSKIT
00170 #ifdef HAVE_IFPACK_HIPS
00171   ,HIPS
00172 #endif
00173 #ifdef HAVE_HYPRE
00174   ,HYPRE
00175 #endif
00176 #ifdef HAVE_IFPACK_SUPERLU
00177   ,SILU
00178 #endif
00179 #if defined (HAVE_IFPACK_SUPPORTGRAPH) && defined (HAVE_IFPACK_AMESOS)
00180     ,MSF_AMESOS
00181 #endif
00182 #ifdef HAVE_IFPACK_SUPPORTGRAPH
00183     ,MSF_IC
00184 #endif
00185     ,CHEBYSHEV
00186     ,POLYNOMIAL
00187     ,KRYLOV
00188     ,IHSS
00189     ,SORA
00190     ,TRIDI_RELAXATION
00191     ,TRIDI_RELAXATION_STAND_ALONE
00192   };
00193 
00195   static const int numPrecTypes =
00196     +7
00197 #ifdef HAVE_IFPACK_AMESOS
00198     +4
00199 #endif
00200     +8
00201 #ifdef HAVE_IFPACK_SPARSKIT
00202     +1
00203 #endif
00204 #ifdef HAVE_IFPACK_HIPS
00205     +1
00206 #endif    
00207 #ifdef HAVE_HYPRE
00208     +1
00209 #endif
00210 #ifdef HAVE_IFPACK_SUPERLU
00211     +2
00212 #endif
00213 #if defined (HAVE_IFPACK_SUPPORTGRAPH) && defined (HAVE_IFPACK_AMESOS)
00214     +1
00215 #endif
00216 #ifdef HAVE_IFPACK_SUPPORTGRAPH
00217     +1
00218 #endif
00219     +7
00220     ;
00221 
00223   static const EPrecType precTypeValues[numPrecTypes];
00224 
00226   static const char* precTypeNames[numPrecTypes];
00227 
00230   static const bool supportsUnsymmetric[numPrecTypes];
00231 
00234   static const char* toString(const EPrecType precType)
00235       { return precTypeNames[precType]; }
00236 
00246   static Ifpack_Preconditioner* Create(
00247     EPrecType PrecType, Epetra_RowMatrix* Matrix, const int overlap = 0, bool overrideSerialDefault = false
00248     );
00249 
00264   Ifpack_Preconditioner* Create(const string PrecType,
00265                 Epetra_RowMatrix* Matrix,
00266                 const int overlap = 0,
00267                                 bool overrideSerialDefault = false);
00268 
00276   int SetParameters(int argc, char* argv[],
00277                     Teuchos::ParameterList& List, string& PrecType,
00278                     int& Overlap);
00279 
00280 };
00281 
00282 
00283 TEUCHOS_ENUM_INPUT_STREAM_OPERATOR(Ifpack::EPrecType)
00284 
00285 
00286 #endif
 All Classes Files Functions Variables Enumerations Friends