NGSolve
4.9
|
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