00001 #ifndef _MY_FluxForCO2Inj_
00002 #define _MY_FluxForCO2Inj_
00003 #include "facefluxfunction.h"
00004 #include "fchaventmobility.h"
00005 #include "fbucleyleverettgravitymob.h"
00006 #include "probefunction1d.h"
00007 #include "dfchaventmobility.h"
00008 #include "dfbucleyleverettgravitymob.h"
00025 class FluxForCO2Inj : public FaceFluxFunction
00026 {
00027 private:
00028 OrthoMesh &m_mesh;
00029 FChaventMobility m_fMob;
00030 FBucleyLeverettGravityMob m_fMobGrav;
00031 DFChaventMobility m_DfMob;
00032 DFBucleyLeverettGravityMob m_DfMobGrav;
00033
00034 double m_maxK;
00035 VecDouble m_Vn;
00036 const VecDouble& m_cK;
00037 double m_pc;
00038 double m_pw;
00039 double m_g;
00040 double m_G;
00041
00042
00043 protected:
00044
00045 public:
00046 enum Fields {_Sc,_Sd};
00047
00048
00049
00050 FluxForCO2Inj(OrthoMesh &mesh,const VecDouble &cK,double v1,double v2,double sr1,double sr2,double pc,double pw,double g);
00051 virtual ~FluxForCO2Inj();
00052 const VecDouble& getPermeability(){return m_cK;}
00053 static double getVolFractionOfCO2InWater(double Sc,double Cd);
00054 static double getAquousDensity(double pc,double pw,VecDouble& vQ);
00055 virtual void fluxAtFace(VecDouble &vFlux, const FaceInfo &face,const VecDouble &Q1,const VecDouble &Q2);
00056 virtual void updateDynamicData(DynamicBase &dynMod);
00057 virtual void maxGlobalCharVelocity(double vel[3]);
00058 virtual double maxLocalCharVelocity(const FaceInfo &face,const VecDouble &Q1, const VecDouble &Q2);
00059 double maxLocalCharVelocityII(OrthoMesh::Face_It &faceIt,int face,int cell1,int cell2,VecDouble &Q1,VecDouble &Q2,unsigned cmp);
00060
00061
00062
00063 };
00064
00065 #endif