00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #if !defined(GADVECTION_HPP)
00012 #define GADVECTION_HPP
00013
00014 #include "gtypes.h"
00015 #include "gelemlist.hpp"
00016 #include "gfieldlist.hpp"
00017 #include "gobjlist.hpp"
00018 #include "gcomm.hpp"
00019 #include "ab.hpp"
00020 #include "ext.hpp"
00021
00022 class GAdvect
00023 {
00024 public:
00025 enum TIME_EVOLTYPE {TE_OIFS=0, TE_ABBDF, TE_EXBDF, TE_EXBDF_Weak};
00026
00027 GAdvect(GFieldList *ulist[], GINT nfields, GElemList *uelems);
00028 ~GAdvect();
00029
00030 GBOOL Advect(GVecList *padv, GVecList *temp, GDOUBLE time, GDOUBLE dt);
00031 void SetEvolType(TIME_EVOLTYPE itype);
00032 void SetAdvOrder (GINT iorder);
00033 void SetBDFOrder(GINT iorder);
00034 void SetTimestepHistory(GDBuffer *dthist);
00035 void SetDoAdvection(GBOOL bdoadvect);
00036 void SetNSubcycles(GINT nsub);
00037 void SetAdvVel(GFieldList *cadv[], GINT ncadv);
00038 void SetDoDealiasing(GBOOL bflag);
00039 GVecOpList *GetVecOp();
00040 GDOUBLE GetBDFSum();
00041
00042
00043 private:
00044 GBOOL AdvectABBDF (GVecList *padv, GVecList *temp, GDOUBLE time, GDOUBLE dt);
00045 GBOOL AdvectABBDF_Weak(GVecList *padv, GVecList *temp, GDOUBLE time, GDOUBLE dt);
00046 GBOOL AdvectABBDF_D (GVecList *padv, GVecList *temp, GDOUBLE time, GDOUBLE dt);
00047 GBOOL AdvectRKBDF (GVecList *padv, GVecList *temp, GDOUBLE time, GDOUBLE dt);
00048 GBOOL AdvectInt (GVector *uf[], GVector *ui[], GINT nf,
00049 GINT ilevel, GDOUBLE dt, GINT ie);
00050 GBOOL FixedStepAdvRKK (GVector *uf[], GVector *ui[], GINT nf,
00051 GINT ilevel, GDOUBLE h, GINT ie);
00052 void ComputeTimeDepCoeffs();
00053 GBOOL ResetExpandables();
00054 GBOOL ElemListChange();
00055 void BuildCoeffs();
00056
00057 TIME_EVOLTYPE itime_type_;
00058 GBOOL bTimeDeriv_;
00059 GBOOL bRotationalForm_;
00060 GBOOL bDoAdvect_;
00061 GBOOL bConstAdvVel_;
00062 GBOOL bDoDealiasing_;
00063 GBOOL bDealiasingEnabled_;
00064 GINT irank_;
00065 GINT nfields_;
00066 GINT ntimelevels_;
00067 GINT nelems_;
00068 GINT iorderbdf_;
00069 GINT iorderOIFS_RKK_;
00070 GINT iorderadv_;
00071 GINT nsubcycoifs_;
00072 GINT nsubcycles_;
00073 GDOUBLE c_bdf_[4][4];
00074 GDOUBLE gamma0_;
00075 GDOUBLE *alpha_;
00076 GDOUBLE *beta_;
00077 AB ab_;
00078 EXT ext_;
00079 GDBuffer *dthist_;
00080 GVecList yt1[GDIM];
00081 GVecList K1 [GDIM];
00082 GVecList K2 [GDIM];
00083 GFieldList *cadv_[GDIM];
00084
00085
00086 GElemList *uelems_;
00087 GFieldList *var_list_[GDIM];
00088 GVecOpList vecop_;
00089
00090
00091
00092 };
00093
00094 #endif