00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #if !defined(NAVIER_STOKES_SOLVER_HPP)
00013 #define NAVIER_STOKES_SOLVER_HPP
00014
00015 #include "gstepper.hpp"
00016 #include "cg.hpp"
00017 #include "gttlist.hpp"
00018 #include "gelemlist.hpp"
00019 #include "gfieldlist.hpp"
00020 #include "glinoplist.hpp"
00021 #include "gobjlist.hpp"
00022 #include "gadvect.hpp"
00023 #include "stokes.hpp"
00024 #include "ab.hpp"
00025 #include "ext.hpp"
00026 #include "glop.hpp"
00027
00028 class NavierStokes : public GStepper
00029 {
00030 public:
00031 enum TIME_EVOLTYPE {TE_OIFS=0, TE_ABBDF, TE_EXBDF};
00032
00033 NavierStokes(GFieldList *ulist[], GINT nf, GElemList *uelems, GElemList *pelems, GINT t);
00034 ~NavierStokes();
00035
00036 GBOOL Step(GDOUBLE dt);
00037 GDOUBLE GetIntegTime();
00038
00039
00040
00041 void SetEvolType(TIME_EVOLTYPE itype);
00042 void SetFields(GFieldList *u1list, GFieldList *u2list,
00043 GFieldList *pelist);
00044
00045 void SetComm(GS *ggs);
00046 GCHandle SetCommHandle(GCHandle hIn) ;
00047 void SetVisc(const GDOUBLE nu);
00048 void SetVisc(const GDOUBLE nu, GINT idir);
00049 void SetDen(const GDOUBLE rho);
00050 void SetPreconditioner(GINT iwhich, GPC type );
00051 void SetAdvOrder(GINT iorder);
00052 void SetBDFOrder(GINT iorder_bdf);
00053 void SetFilter(GLinOpList *filter);
00054 StokesSolver *GetStokes() { return stokes_; }
00055 GDOUBLE GetDivMax(GINT iLevel);
00056 void DivV(GFieldList *divv);
00057 CG *GetSolver(GINT iwhich);
00058 void SetVBdyData (GINT idir, GVecList *bdy_vals);
00059 void SetTimestepHistory(GDBuffer *dthist);
00060 void SetNSubcycles(GINT nsub);
00061
00062 void SetTime(GDOUBLE t);
00063 void SetDoAdvection(GBOOL bflag);
00064 void SetDoDealiasing(GBOOL bflag);
00065 GBOOL ResetExpandables();
00066
00067 private:
00068
00069 GBOOL DoNormalStep(GDOUBLE dt);
00070 void DeleteDynamic();
00071 GBOOL Advect(GDOUBLE dt, GINT &iLevel);
00072 GBOOL ElemListChange();
00073
00074
00075
00076
00077
00078 GCHandle hDSOp;
00079 TIME_EVOLTYPE itime_type_;
00080 STOKES_TYPE iStokes_type_;
00081 GBOOL bInitReqd_;
00082 GBOOL bDoAdvect_;
00083 GINT irank_;
00084 GINT nelems_;
00085 GINT ntimelevels_;
00086 GINT icycle_;
00087 GDOUBLE maxCFL_;
00088 GDOUBLE dt_curr_;
00089 GDOUBLE dt_last_;
00090 GDOUBLE time_;
00091 GDOUBLE rho_;
00092 GFieldList *var_list_[GDIM+1];
00093 GElemList *uelems_;
00094 GElemList *pelems_;
00095 GVecList *ubdyvals[GDIM];
00096 GVecList pu_[GDIM];
00097 GVecList Nj_[GDIM];
00098
00099
00100
00101 GAdvect *advect_;
00102 StokesSolver *stokes_;
00103
00104
00105 GS *gsop;
00106
00107 };
00108
00109 #endif