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