NGSolve  4.9
linalg/commutingAMG.hpp
00001 #ifndef FILE_COMMUTING_AMG
00002 #define FILE_COMMUTING_AMG
00003 
00004 /* *************************************************************************/
00005 /* File:   commuting_amg.hoo                                               */
00006 /* Author: Joachim Schoeberl                                               */
00007 /* Date:   15. Aug. 2002                                                   */
00008 /* *************************************************************************/
00009 
00010 namespace ngla
00011 {
00012 
00013   class CommutingAMG : public BaseMatrix
00014   {
00015   protected:
00016     const BaseSparseMatrix * pmat;
00017     CommutingAMG * recAMG;
00018 
00019     SparseMatrixTM<double> * prol;
00020   
00021     BaseSparseMatrix * coarsemat;
00022     BaseJacobiPrecond * jacobi;
00023     BaseBlockJacobiPrecond * bjacobi;
00024     BaseMatrix * inv;
00025 
00026   public:
00027     CommutingAMG ()
00028     { ; }
00029     virtual ~CommutingAMG () 
00030     { ; }
00031 
00032     virtual void ComputeMatrices (const BaseSparseMatrix & mat) = 0;
00033     virtual void Mult (const BaseVector & x, BaseVector & y) const = 0;
00034 
00035 
00036     virtual int VHeight() const { return pmat->Height(); }
00037     virtual int VWidth() const { return pmat->Width(); }
00038 
00039     virtual int NZE() const = 0;
00040     virtual BaseVector * CreateVector () const
00041     {
00042       return pmat->CreateVector();
00043     }
00044   };
00045 
00046 
00047   class AMG_H1 : public CommutingAMG
00048   {
00049   public:
00050 
00051     AMG_H1 (const BaseMatrix & sysmat,
00052             Array<ngstd::INT<2> > & e2v,
00053             Array<double> & weighte,
00054             int levels);
00055 
00056     virtual ~AMG_H1 ();
00057 
00058     virtual void ComputeMatrices (const BaseSparseMatrix & mat);
00059     virtual int NZE() const;
00060 
00061     virtual void Mult (const BaseVector & x, BaseVector & y) const;
00062   };
00063 
00064 
00065 
00066 
00067   class AMG_HCurl : public CommutingAMG
00068   {
00069     SparseMatrixTM<double> * grad;
00070 
00071     BaseSparseMatrix * h1mat;
00072     AMG_H1 * h1AMG;
00073 
00074   public:
00075 
00076     AMG_HCurl (const BaseMatrix & sysmat,
00077                const Array<Vec<3> > & vertices,
00078                Array<ngstd::INT<2> > & e2v,
00079                Array<ngstd::INT<4> > & f2v,
00080                Array<double> & weighte,
00081                Array<double> & weightf,
00082                int levels);
00083 
00084     virtual ~AMG_HCurl ();
00085 
00086     virtual void ComputeMatrices (const BaseSparseMatrix & mat);
00087     virtual int NZE() const;
00088 
00089     virtual void Mult (const BaseVector & x, BaseVector & y) const;
00090   };
00091 
00092 
00093 }
00094 
00095 
00096 #endif