00001 #include "flashco2h2o.h"
00002 #include "flashessential.h"
00003 #include "flash.h"
00004 #include "fluxforco2inj.h"
00005 #include "arrayofvecdouble.h"
00006 bool FlashCO2H2O::bFirstTime=true;
00007
00008
00009 FlashCO2H2O::FlashCO2H2O(OrthoMesh &mesh,const VecDouble &por, double referenceT):FlashCompositional(2,2),m_por(por),m_T(referenceT)
00010 {
00011 m_volCell = mesh.cellVolume();
00012 m_volMolarH2O= 18.16E-6;
00013 }
00014
00015
00016
00017
00018
00019 void FlashCO2H2O::updateDynamicModuleData()
00020 {
00021 }
00022
00023
00024 void FlashCO2H2O::execute()
00025 {
00026 TransportBase &trans=getTransportModule();
00027 const VecDouble& vP = getDynamicModule().getPressureAtCells();
00028 if (bFirstTime){
00029 double referencePressure=vP.mean_value()*1e-5;
00030 m_volMolarCO2= 1.0E-6 * ComputeVolumeCO2(m_T, referencePressure, Flash::SUPERCRITICAL);
00031 printf("AllanFlash Using Co2 vol Molar %g, Pressure: %g \n",m_volMolarCO2,referencePressure);
00032 bFirstTime=0;
00033
00034 }
00035
00036
00037
00038 ArrayOfVecDouble &sol=trans.getSolutionAtCells();
00039
00040 assert(sol.size() == vP.size());
00041
00042
00043 for (unsigned i=0;i<vP.size();i++)
00044 {
00045 double Sd = sol(i,FluxForCO2Inj::_Sd);
00046 double Sc = sol(i,FluxForCO2Inj::_Sc);
00047 double P = vP(i)*1E-5;
00048 double por = m_por(i);
00049 assert(P > 75);
00050
00051 double Vco2 = Sc*por*m_volCell;
00052 double Vd = Sd*por*m_volCell;
00053 double Vw = (1-Sc-Sd)*por*m_volCell;
00054
00055 double nH2O = Vw/m_volMolarH2O;
00056 double nCO2 = Vco2/m_volMolarCO2;
00057 double nCO2d = Vd/m_volMolarCO2;
00058
00059 double nT = nH2O + nCO2 + nCO2d;
00060
00061 double zH2O = nH2O/nT;
00062 double zCO2 = 1.0 - zH2O;
00063 double zNaCl = 0.0;
00064
00065
00066 Flash::BrineCO2Data brineco2Data;
00067
00068 Flash::ProgressiveFlashBrineCO2(brineco2Data, m_T, P, zNaCl, zH2O, zCO2);
00069
00070
00071 sol(i,FluxForCO2Inj::_Sc) = brineco2Data.yCO2 * brineco2Data.betaC * m_volMolarCO2 * nT / (m_volCell * por);
00072 sol(i,FluxForCO2Inj::_Sd) = brineco2Data.xCO2 * brineco2Data.betaA * m_volMolarCO2 * nT / (m_volCell * por);
00073 }
00074 }