|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
|
|
#include "iAlgPvtBase.h"
|
|
|
|
|
|
|
|
|
|
|
|
enum euoMethod
|
|
|
|
|
|
{
|
|
|
|
|
|
// 20240914 暂时隐去,咨询bwp
|
|
|
|
|
|
// BeggsAndRobinson_uo_Dead = 0,
|
|
|
|
|
|
BeggsAndRobinson_uo_Live = 0,
|
|
|
|
|
|
// Beal_uo_Dead,
|
|
|
|
|
|
// Glaso_uo_Dead,
|
|
|
|
|
|
// Petrosky_uo_Dead,
|
|
|
|
|
|
Petrosky_uo_Live,
|
|
|
|
|
|
// BergmanAndSutton_uo_Dead,
|
|
|
|
|
|
BergmanAndSutton_uo_Live
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
class M_PVT_EXPORT oilViscosity : public iAlgPvtBase
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
oilViscosity();
|
|
|
|
|
|
|
|
|
|
|
|
// 绑定成员变量
|
|
|
|
|
|
virtual void bindMembers();
|
|
|
|
|
|
|
|
|
|
|
|
// 虚函数,计算函数
|
|
|
|
|
|
virtual bool cal(VecDouble vecIns, VecDouble& vecOuts);
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
/*油相黏度分脱气原油黏度(dead oil)和含气原油黏度(live oil),
|
|
|
|
|
|
*计算脱气原油黏度的方法函数是在给定一个温度下,得到一个值,这个值就是脱气原油黏度,界面设计成只输出一个值即可;
|
|
|
|
|
|
*计算含气原油黏度的方法是得到黏度和压力的关系,vecIns代表压力、vecOuts代表含气原油黏度,正常界面设计即可。
|
|
|
|
|
|
*
|
|
|
|
|
|
*/
|
|
|
|
|
|
bool BeggsAndRobinson_Dead(double dT, double& dUo);
|
|
|
|
|
|
bool BeggsAndRobinson_Sat(double dP, double& dUo);//中间函数
|
|
|
|
|
|
bool BeggsAndRobinson_Live(VecDouble vecP, VecDouble& vecUo);
|
|
|
|
|
|
bool Beal_Dead(double dT, double& dUo);
|
|
|
|
|
|
bool Glaso_Dead(double dT, double& dUo);
|
|
|
|
|
|
bool Petrosky_Dead(double dT, double& dUo);
|
|
|
|
|
|
bool Petrosky_Sat(double dP, double& dUo);
|
|
|
|
|
|
bool Petrosky_Live(VecDouble vecP, VecDouble& vecUo);
|
|
|
|
|
|
bool BergmanAndSutton_Dead(double dT, double& dUo);
|
|
|
|
|
|
bool BergmanAndSutton_Sat(double dTb, double dP, double& dUo);
|
|
|
|
|
|
bool BergmanAndSutton_Live(VecDouble vecP, VecDouble& vecUo);
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
|
|
|
|
|
double m_dT; //rt,油藏温度,°C
|
|
|
|
|
|
double m_dRs; //Rs,溶解度,m3/m3
|
|
|
|
|
|
double m_dTb; //tb,沸点温度,C
|
|
|
|
|
|
double m_dRo; //ro,油相比重,该油相的密度与4℃时纯水的密度之比,无量纲,具体情况具体分析,0.8-0.9
|
|
|
|
|
|
|
|
|
|
|
|
};
|