#pragma once #include "iAlgPseuMethodBase.h" #include "mAlgPseudo_global.h" class iAlgPseuMethodTriInfo; // 这是在PVT/PSEU等方法,拟压力相关的准备过程中,涉及的算法(三区拟压力) class M_ALGPSEUDO_EXPORT iAlgPseuMethodTri : public iAlgPseuMethodBase { public: iAlgPseuMethodTri(); ~iAlgPseuMethodTri(); // 绑定成员变量,这个类里没用 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 calPseudo3(VecDouble& vecP, VecDouble& vecPs); /// @brief 最终的计算函数 /// @param dP,压力(输入) /// @param dPs,三区拟压力(输出) bool calPseudo3(double dP, double& dPs); // /// @brief 计算函数,这是在处理解释过程中的调用 // /// @param p,压力(输入) // /// @param ps,三区拟压力(输出) // bool pToPs_Ps3Fitting(double p, double &ps); private: // 基本拟合公式 void parseParas(QMap& mapOthers); // 先根据p计算各个拟合数据 bool calBaseFitRs(double dP, QMap& map); // 积分 double integral(double min, double max, int which, QMap& map, int nLoop = 1000); // 1-2-3区拟压力计算 double calPsByOne(QMap& map); double calPsByTwo(QMap& map); double calPsByThree(QMap& map); // 最后的处理解释过程中应用,是分段还是整体 // void parseParas(QMap& mapOthers); signals: private: QMap m_mapPsInfos; double m_dGOR;//用户输入的GOR数值 double m_dPP;//临界流动压力pp(目前为用户输入,后续改进算法可自动计算) double m_dPD;// 露点压力pd(用户输入) double m_dPi;//原始地层压力pi(用户输入) double m_dA; double m_dKrgMax; // bool m_bModelMode; //是否最后的处理解释过程中应用 // bool m_bWholeFitting; //是否分段进行拟合处理 };