#pragma once #include "iAlgPseuMethodBase.h" #include "mAlgPseudo_global.h" class iAlgPseuMethodCompInfo; // 这是在PVT/PSEU等方法,拟压力相关的准备过程中,涉及的算法(组分计算(源自徐泽轩)) class M_ALGPSEUDO_EXPORT iAlgPseuMethodComp : public iAlgPseuMethodBase { public: iAlgPseuMethodComp(); ~iAlgPseuMethodComp(); // 绑定成员变量,这个类里没用 virtual void bindMembers(); // 虚函数,计算函数,这个类里没用 virtual bool cal(VecDouble vecIns, VecDouble& vecOuts); //关键计算函数,其实只是调用入口 bool calPs(QMap &mapPsInfos, \ QMap &mapOthers, \ VecDouble &vecP, VecDouble &vecPs); /// @brief 最终的计算函数 /// @param vecP,压力(输入) /// @param vecPs,三区拟压力(输出) bool calPseudoC(VecDouble& vecP, VecDouble& vecPs); /// @brief 最终的计算函数 /// @param dP,压力(输入) /// @param dPs,三区拟压力(输出) bool calPseudoC(double dP, double& dPs);//徐泽轩 bool calPseudoC_m2(double dP, double& dPs);//baiwp private: // 基本拟合公式 void parseParas(QMap& mapOthers); // 先根据p计算各个拟合数据 bool calBaseFitRs(double dP, QMap& map); // 积分,徐泽轩 double simpsonComplex(double a, double b, int which, \ double epsilon = 0.01); // 积分,baiwp double integral(double min, double max, int which, \ QMap& map, int nLoop = 1000); // 1-2-3区拟压力计算 double calPsBy(int which, double dP); double calPsByOne(QMap& map); double calPsByTwo(QMap& map); double calPsByThree(QMap& map); signals: private: QMap m_mapPsInfos; double m_dPP;//临界流动压力pp(目前为用户输入,后续改进算法可自动计算) double m_dPD;// 露点压力pd(用户输入) double m_dKrgSwi; double m_dPwf; double m_dSplitP; // 临时变量 VecDouble m_vecTempPs; VecDouble m_vecTempPs1; VecDouble m_vecTempPs2; VecDouble m_vecTempPs3; };