Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members

schurlapop.hpp

Go to the documentation of this file.
00001 //************************************************************************************//
00002 // Module       : schurlapop.hpp
00003 // Date         : 7/16/02 (DLR)
00004 // Copyright    : 2002-2006 Copyright University Corporation for Atmospheric
00005 //                Research
00006 // Description  : Encapsulates the methods and data associated with
00007 //                the Laplacian operator derived from the Schur 
00008 //                complement decompoosition of the 
00009 //                discrete form of the Stokes equations
00010 //                where the pdV work term has a pressure residing 
00011 //                on a different grid than the velocity, within
00012 //                the same element. It is intended to act on the
00013 //                p-quantity in the p Div v term. Its form is
00014 //                  D1 M^-1 D1^T  + D2 M^-1 D2^T
00015 //                where M is the mass matrix, and Di are the 
00016 //                weak pdV derivative operators defined in StokesOp.
00017 //                velem and pelem are the elements where the 
00018 //                v-quantity  and p-quantity reside, respectively 
00019 //                
00020 // Derived From : LinOp.
00021 // Modifications:
00022 //************************************************************************************//
00023 #if !defined(SCHURLAPOP_HPP)
00024 #define SCHURLAPOP_HPP
00025 
00026 #include "linop.hpp"
00027 #include "elem2d.hpp"
00028 #include "massop.hpp"
00029 #include "stokesop.hpp"
00030 
00031 class SchurLapOp: public LinOp 
00032 {
00033 public:
00034                            SchurLapOp();
00035                            SchurLapOp(Elem2D *ve, Elem2D *pe);
00036 //                         SchurLapOp(const SchurLapOp &);
00037                           ~SchurLapOp();
00038 
00039          GVector           operator*(GVector) ; // Multiply operator on the RHS by vector
00040          GVector          *GetMassMatrix();
00041          void              OpVec_prod(GVector &x, GVector &ret);
00042          void              SetConst(GDOUBLE c);
00043          void              SetElem(Elem2D *ve, Elem2D *pe);
00044          void              SetVBdyData(GINT idir, GVector *vbdy);
00045          void              DoCentralOp(GBOOL bop);
00046          GVector           *GetiMass();
00047          Elem2D            *GetElem();
00048 #if 0
00049          Elem2D            *GetPElem();
00050 #endif
00051 
00052 //       friend ostream&   operator<<(ostream&, const SchurLapOp&);
00053 
00054 private:
00055          GBOOL             QuadOp(GVector *x, GVector *newx);
00056          GBOOL             TriangleOp(GVector *x, GVector *newx);
00057          void              DeleteDynamic();
00058          void              Reset();
00059          void              Init(Elem2D *ve, Elem2D *pe);
00060   
00061          GBOOL            bCentralOp_;
00062          GDOUBLE          mConst;
00063          Elem2D           *velem;
00064          Elem2D           *pelem;
00065          GVector          *vtmpp0;
00066          GVector          *vtmpv0;
00067          GVector          *vtmpv1;
00068          GVector          *v1bdy;
00069          GVector          *v2bdy;
00070          GVector          *M;
00071          GVector          *iM;
00072          StokesOp         *pD1;
00073          StokesOp         *pD2;
00074          StokesOp         *pDT1;
00075          StokesOp         *pDT2;
00076 
00077 };
00078 
00079 #endif

Generated on Wed Dec 21 16:00:48 2005 for Geophysics & Astrophysics Spectral Element Adaptive Refinement (GASpAR) 2D Code by  doxygen 1.4.4