00001 #ifndef _MY_FlashCO2Brine_
00002 #define _MY_FlashCO2Brine_
00003 #include "flashcompositional.h"
00004 #include "orthomesh.h"
00005 #include "flash.h"
00006
00007 #define LIQ_WATER_MOLAR_VOLUME 18.1 //cm^3/mol
00008 #define DISSOLVED_SALT_MOLAR_VOLUME 18 //cm^3/mol
00009 #define SOLID_SALT_MOLAR_VOLUME 26.994457275 //cm^3/mol
00010
00011
00028 class FlashCO2Brine : public FlashCompositional
00029 {
00030
00031 protected:
00032 VecDouble m_components_molar_mass;
00033 double m_T;
00034 double m_volCell;
00035 OrthoMesh &m_mesh;
00036 static bool bFirstTime;
00037 double m_A,m_B;
00038 double m_v1,m_v2;
00039 public:
00040 enum Phases {AQUEOUS, CO2_RICH, SOLID};
00041 enum Components {WATER,CO2,SALT};
00042 typedef double Gradient[3][3];
00043 FlashCO2Brine(OrthoMesh &mesh,double referenceT,double v1=5.7870370370370369e-9,double v2=6.944445e-10);
00044 virtual ~FlashCO2Brine(){}
00045 virtual void flash(double P, const VecDouble &compTotalMoles, FlashData &data);
00046
00047 virtual const VecDouble& getComponentsMolarMass() const;
00048 virtual double getFluidCompressibility(double P, FlashData &data);
00049 virtual void getPhasesVolume(double P, const FlashData &data,VecDouble &phasesVol);
00050 virtual void getPhasesViscosities(double P,const FlashData &data,VecDouble &visc);
00051
00052 virtual void getTotalVolumeDerivatives(double P,FlashData &data,VecDouble &dv_dm);
00053
00054
00055
00056
00057
00058
00059 double getPureCO2MolarVolume(double P, double T);
00060 double getCO2MolarVolume(double P, double T);
00061 double getTotalMolarVolume(Flash::BrineCO2Data &data,double P,double T);
00062 double getAqueousMolarVolume(Flash::BrineCO2Data &data,double P,double T);
00063 double getCO2MolarVolume(Flash::BrineCO2Data &data,double P,double T);
00064 double getDissolvedCO2ApparentVolume(double P);
00065 void flash(VecDouble &m_Aq,VecDouble &m_g,const VecDouble &m_T,double P,double T);
00066
00067
00068 void getSaturationDerivatives();
00069 void printFlashPropertiesTable(double P0,double P1,unsigned nP, double T,double zSalt);
00070 void printCO2RichMolarVolume(double P0,double P1,unsigned nP, double T);
00071
00072
00073 void getGradient(Matrix &gradMaq,Matrix &gradMg,const VecDouble &m_T,double P,double T, double h);
00074 void getVolGradient(VecDouble &GradVaq,VecDouble &GradVc,double P,double T,double zSalt,double zH2O,double zCO2,double h);
00075
00076
00077 void getMolesAqueousPhase(VecDouble &M_aq,const Flash::BrineCO2Data &data,double nT);
00078 void getMolesCO2RichPhase(VecDouble &M_g,const Flash::BrineCO2Data &data,double nT);
00079
00080
00081 virtual void printOutput();
00082
00083 };
00084
00085
00086 #endif