|
|
#pragma once
|
|
|
#include "iAlgPvtBase.h"
|
|
|
|
|
|
enum eZgMethod
|
|
|
{
|
|
|
Zg_DranchukPurvisRobinson = 0,
|
|
|
Zg_BeggsAndBrill,
|
|
|
|
|
|
//////////////////////////////////
|
|
|
// 20210105新增,算法提供者:wangzhp
|
|
|
Zg_HallYarborough,
|
|
|
//////////////////////////////////
|
|
|
|
|
|
//////////////////////////////////
|
|
|
// 20210819新增,算法提供者:baiwp
|
|
|
Zg_DranchkAbuKassem,
|
|
|
Zg_Cranmer,
|
|
|
//////////////////////////////////
|
|
|
|
|
|
//////////////////////////////////
|
|
|
// 20210105新增,算法提供者:wangzhp
|
|
|
Zg_LXF,
|
|
|
Zg_HTHP
|
|
|
//////////////////////////////////
|
|
|
};
|
|
|
|
|
|
class M_PVT_EXPORT gasCompressFactor : public iAlgPvtBase
|
|
|
{
|
|
|
public:
|
|
|
gasCompressFactor();
|
|
|
|
|
|
// 虚函数,计算函数,总入口函数
|
|
|
virtual bool cal(VecDouble vecIns, VecDouble& vecOuts);
|
|
|
|
|
|
public:
|
|
|
|
|
|
// 基础函数,公共调用部分
|
|
|
// 绑定成员变量
|
|
|
virtual void bindMembers();
|
|
|
bool getTcAndPc();
|
|
|
|
|
|
// 批量
|
|
|
bool dranchuk(VecDouble vecP, VecDouble& vecZg);
|
|
|
bool beggsAndBrill(VecDouble vecP, VecDouble& vecZg);
|
|
|
bool hallYarborough(VecDouble vecP, VecDouble& vecZg);
|
|
|
bool dranchkAbuKassem(VecDouble vecP, VecDouble& vecZg);
|
|
|
bool cranmer(VecDouble vecP, VecDouble& vecZg);
|
|
|
bool LXF(VecDouble vecP, VecDouble& vecZg);
|
|
|
bool HTHP(VecDouble vecP, VecDouble& vecZg);
|
|
|
|
|
|
// 单个点
|
|
|
double dranchuk(double dPpr);
|
|
|
double beggsAndBrill(double dPpr);
|
|
|
double hallYarborough(double dPpr);
|
|
|
double dranchkAbuKassem(double dPpr);
|
|
|
double cranmer(double dPpr);
|
|
|
double LXF(double dPpr);
|
|
|
double HTHP(double dPpr);
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
// Match功能,尝试1 20210716(借助张凤波经理给的反推算法)
|
|
|
|
|
|
public:
|
|
|
|
|
|
// vecIns:P(in)
|
|
|
// vecOuts:Z(out)
|
|
|
// vecExps:实验数据 (in)
|
|
|
virtual bool match(VecDouble vecIns, VecDouble& vecOuts, VecPointF& vecExps, double* pExtParas = nullptr);
|
|
|
|
|
|
protected:
|
|
|
|
|
|
// 反推Ppc
|
|
|
virtual double inversePpc(VecPointF& vecExps);
|
|
|
|
|
|
// 为了反推时,复用方便,而封装
|
|
|
virtual double calByPpr(double dPpr);
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
private:
|
|
|
|
|
|
double m_dTc; //tc,临界温度,不同的组分有不同的临界温度值,°C
|
|
|
double m_dPc; //Pc,临界压力,单位为psi,和临界温度同理
|
|
|
double m_dTpr; //tpr,拟对比温度,Tpr=T/Tc,温度与临界温度的比值,无量纲
|
|
|
// double m_dPpr; //Ppr,拟对比压力,Ppr=P/Pc,无量纲
|
|
|
double m_dT; //rt,油藏温度,°C
|
|
|
};
|
|
|
|
|
|
|