00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #if !defined(VECTOROP_HPP)
00012 #define VECTOROP_HPP
00013
00014 #include "gtvector.hpp"
00015 #include "elem2d.hpp"
00016 #include "gradop.hpp"
00017 #if defined(DO_BLAS_TIMING)
00018 #include "timer.h"
00019 #endif
00020
00021
00022 class VectorOp
00023 {
00024 public:
00025 VectorOp();
00026 VectorOp(Elem2D *e, GVector *u1, GVector *u2, GVector *u3, GBOOL doconvect=TRUE);
00027 ~VectorOp();
00028
00029 GVector Div() ;
00030 void Div(GVector &ret);
00031 GVector Curl(GINT idir);
00032 void Curl(GINT idir, GVector &ret);
00033 GVector Advect(GVector &c);
00034 void Advect(GVector &c, GVector &ret);
00035 void Advect_Weak(GVector &c, GVector &ret);
00036 void Advect(GVector *ui[], GVector *ret[]);
00037 void AdvectR(GVector *ui[], GVector *N[]);
00038
00039 void SetVec(GVector *u1, GVector *u2, GVector *u3=NULL);
00040 void SetElem(Elem2D *e );
00041 void DoConvectiveForm(GBOOL bflag);
00042
00043 Elem2D *GetElem();
00044
00045 private:
00046
00047 GBOOL bConvectiveForm_;
00048 GVector *v[3];
00049 Elem2D *elem;
00050
00051 #if defined(DO_BLAS_TIMING)
00052 public:
00053 GDOUBLE GetTime(){return time_result;}
00054 private:
00055 GDOUBLE time_result;
00056 GDOUBLE tstart;
00057 #endif
00058
00059 };
00060
00061 #endif