#pragma once #include "Defines.h" #include "mAlgPseudo_global.h" class iPseudo3Info; // 三区拟压力计算过程实现 class M_ALGPSEUDO_EXPORT iPseudo3Cal : public QObject { Q_OBJECT public: /// @param mapPsInfos,拟合公式信息体(输入) /// @param mapOthers,其它参数,如GOR等(输入) explicit iPseudo3Cal(QMap& mapPsInfos, \ QMap& mapOthers/*, \ bool bModelMode = false*/); ~iPseudo3Cal(); /// @brief 最终的计算函数 /// @param vecP,压力(输入) /// @param vecPs,三区拟压力(输出) bool calPseudo3(VecDouble& vecP, VecDouble& vecPs); /// @brief 最终的计算函数 /// @param fP,压力(输入) /// @param fPs,三区拟压力(输出) bool calPseudo3(double fP, double& fPs); // /// @brief 计算函数,这是在处理解释过程中的调用 // /// @param p,压力(输入) // /// @param ps,三区拟压力(输出) // bool pToPs_Ps3Fitting(double p, double &ps); private: // 基本拟合公式 void parseParas(QMap& mapOthers); // 先根据p计算各个拟合数据 bool calBaseFitRs(double fP, 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; //是否分段进行拟合处理 };