#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 };