00001 //************************************************************************************// 00002 // Module : stokesop.hpp 00003 // Date : 7/4/02 (DLR) 00004 // Copyright : 2002-2006 Copyright University Corporation for Atmospheric 00005 // Research 00006 // Description : Encapsulates the methods and data associated with 00007 // the pdV work operator. This weak operator is associated with 00008 // the following: 00009 // (p,Div _v_) 00010 // The action of the operator is to multiply the 00011 // interpolated derivative (I2 X D1 or D2 X I1), by the 00012 // input vector. I1(2) is the interpolation operator, 00013 // I_ij = h_j(eta_i), where h_j is the basis fcn for 00014 // v in the 1(2) direction, and eta_i is the 1(2) 00015 // parent node of p. D1(2)_ij = dh_j(eta_i)/dxi. 00016 // 00017 // Thus, the operator is actually a weak (integrated) 00018 // derivative operator acting on the vector space of 00019 // the parent domain (the velocity-space), to produce 00020 // a vector in the subspace (the pressure-space). 00021 00022 // This (Stokes) operator is somewhat different 00023 // from the others, in that it is assumed that p and v 00024 // reside on different grid nodal points within the same 00025 // element, thus requiring that a complete geometric 00026 // description of both field quantities be provided. 00027 // 00028 // Derived From : LinOp. 00029 // Modifications: 00030 //************************************************************************************// 00031 #if !defined(PDVOP_HPP) 00032 #define PDVOP_HPP 00033 00034 #include "linop.hpp" 00035 #include "elem2d.hpp" 00036 00037 class StokesOp: public LinOp 00038 { 00039 public: 00040 StokesOp(); 00041 StokesOp(Elem2D *ve, Elem2D *pe, GINT idir); 00042 // StokesOp(const StokesOp &); 00043 ~StokesOp(); 00044 00045 GVector operator*(GVector) ; // Multiply operator on the RHS by vector 00046 void OpVec_prod(GVector &x, GVector &ret); 00047 void SetElem(Elem2D *ve, Elem2D *pe); 00048 void SetDir(GINT idir); 00049 void SetConst(GDOUBLE c); 00050 void Transpose(); 00051 00052 // friend ostream& operator<<(ostream&, const StokesOp&); 00053 00054 private: 00055 GBOOL DefmQuadOp(GVector *x, GVector *newx); 00056 GBOOL RectQuadOp(GVector *x, GVector *newx); 00057 GBOOL TriangleOp(GVector *x, GVector *newx); 00058 00059 GINT icomp; 00060 GSHORT Np1 ; 00061 GSHORT Nv1 ; 00062 GSHORT Np2 ; 00063 GSHORT Nv2 ; 00064 GBOOL bTranspose; 00065 GDOUBLE pConst; 00066 GVector vtmp; 00067 Elem2D *velem; 00068 Elem2D *pelem; 00069 }; 00070 00071 #endif