#pragma once #include "Defines.h" #include "mAlgPseudo_global.h" class iPseudoCInfo; // 根据组分计算(源自徐泽轩) // 三区拟压力计算过程实现 class M_ALGPSEUDO_EXPORT iPseudoCCal : public QObject { Q_OBJECT public: /// @param mapPsInfos,拟合公式信息体(输入) /// @param mapOthers,其它参数(输入) explicit iPseudoCCal(QMap& mapPsInfos, \ QMap& mapOthers); ~iPseudoCCal(); /// @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 fP); 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; };