|
IFPACK Development
|
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 // This library is free software; you can redistribute it and/or modify 00011 // it under the terms of the GNU Lesser General Public License as 00012 // published by the Free Software Foundation; either version 2.1 of the 00013 // License, or (at your option) any later version. 00014 // 00015 // This library is distributed in the hope that it will be useful, but 00016 // WITHOUT ANY WARRANTY; without even the implied warranty of 00017 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00018 // Lesser General Public License for more details. 00019 // 00020 // You should have received a copy of the GNU Lesser General Public 00021 // License along with this library; if not, write to the Free Software 00022 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 00023 // USA 00024 // Questions? Contact Michael A. Heroux (maherou@sandia.gov) 00025 // 00026 // *********************************************************************** 00027 //@HEADER 00028 */ 00029 00030 #ifndef _IFP_BRELAX_H_ 00031 #define _IFP_BRELAX_H_ 00032 00033 #include "Ifpack_config.h" 00034 00035 #include "ifp_GlobalPrecon.h" 00036 00037 class ifp_LocalMat; 00038 class ifp_BlockMat; 00039 00040 class IFPACK_DEPRECATED ifp_None : public ifp_GlobalPrecon 00041 { 00042 public: 00043 void setup(const ifp_BlockMat&) {}; 00044 void apply (int nr, int nc, const double *u, int ldu, double *v, int ldv); 00045 }; 00046 00047 class IFPACK_DEPRECATED ifp_BJacobi : public ifp_GlobalPrecon 00048 { 00049 private: 00050 const ifp_BlockMat *Ap; 00051 ifp_LocalMat **diag; // inverse or factors of diagonal blocks 00052 00053 public: 00054 ifp_BJacobi(); 00055 ~ifp_BJacobi(); 00056 00057 void setup(const ifp_BlockMat& A); 00058 void apply (int, int, const double *, int, double *, int); 00059 double condest(); 00060 }; 00061 00062 class IFPACK_DEPRECATED ifp_BSOR_Base : public ifp_GlobalPrecon 00063 { 00064 protected: 00065 const ifp_BlockMat *Ap; 00066 ifp_LocalMat **diag; // inverse or factors of diagonal blocks 00067 int *idiag; 00068 00069 double omega_; 00070 int iterations_; 00071 00072 public: 00073 ifp_BSOR_Base(); 00074 virtual ~ifp_BSOR_Base(); 00075 00076 double& omega() {return omega_;} 00077 int& iterations() {return iterations_;} 00078 00079 void setup(const ifp_BlockMat& A, double omega = 1.0, int iterations = 1); 00080 }; 00081 00082 class IFPACK_DEPRECATED ifp_BSOR : public ifp_BSOR_Base 00083 { 00084 public: 00085 ifp_BSOR() {}; 00086 ~ifp_BSOR() {}; 00087 void apply (int, int, const double *, int, double *, int); 00088 }; 00089 00090 class IFPACK_DEPRECATED ifp_BSSOR : public ifp_BSOR_Base 00091 { 00092 public: 00093 ifp_BSSOR() {}; 00094 ~ifp_BSSOR() {}; 00095 void apply (int, int, const double *, int, double *, int); 00096 }; 00097 00098 #endif // _IFP_BRELAX_H_
1.7.4