00001 //************************************************************************************// 00002 // Module : ilaplacian.hpp 00003 // Date : 2/26/03 (DLR) 00004 // Copyright : 2003-2006 Copyright University Corporation for Atmospheric 00005 // Research 00006 // Description : Encapsulates the methods and data associated with 00007 // the inverse of the weak Laplacian operator. 00008 // Derived From : LinOp. 00009 // Modifications: 00010 //************************************************************************************// 00011 #if !defined(ILAPLACIANOP_HPP) 00012 #define ILAPLACIANOP_HPP 00013 #include "linop.hpp" 00014 #include "helmholtzop.hpp" 00015 #include "defquad2d.hpp" 00016 #include "rectquad2d.hpp" 00017 #include "diagop.hpp" 00018 00019 class iLaplacianOp: public LinOp 00020 { 00021 public: 00022 iLaplacianOp(); 00023 iLaplacianOp(LinOp *A); 00024 iLaplacianOp(Elem2D *e); 00025 // iLaplacianOp(const iLaplacianOp &); 00026 ~iLaplacianOp(); 00027 00028 GVector operator*(GVector) ; // Multiply precond by right-vector 00029 void OpVec_prod(GVector &q, GVector &ret); 00030 void SetConst(GDOUBLE clc); 00031 void SetConst(GDOUBLE clc1, GDOUBLE clc2); 00032 void SetElem(Elem2D *e); 00033 00034 00035 private: 00036 GBOOL DefmQuadH(); 00037 GBOOL RectQuadH(); 00038 GBOOL TriangleH(); 00039 GBOOL ComputeOp(); 00040 00041 GINT N1; // 1-size 00042 GINT N2; // 2-size 00043 GINT NN; // 1 X 2 - size 00044 GDOUBLE lc1; // Laplacian-multiplicative constant 00045 GDOUBLE lc2; // Laplacian-multiplicative constant 00046 Elem2D *elem; 00047 GMatrix *L; 00048 GMatrix *iL; 00049 00050 00051 }; 00052 00053 #endif