|
|
#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<QString, iAlgPseuMethodTriInfo*> &mapPsInfos, \
|
|
|
QMap<QString, double> &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<QString, double>& mapOthers);
|
|
|
|
|
|
// 先根据p计算各个拟合数据
|
|
|
bool calBaseFitRs(double dP, QMap<QString, double>& map);
|
|
|
|
|
|
// 积分
|
|
|
double integral(double min, double max, int which, QMap<QString, double>& map, int nLoop = 1000);
|
|
|
|
|
|
// 1-2-3区拟压力计算
|
|
|
double calPsByOne(QMap<QString, double>& map);
|
|
|
double calPsByTwo(QMap<QString, double>& map);
|
|
|
double calPsByThree(QMap<QString, double>& map);
|
|
|
|
|
|
// 最后的处理解释过程中应用,是分段还是整体
|
|
|
// void parseParas(QMap<QString, double>& mapOthers);
|
|
|
|
|
|
signals:
|
|
|
|
|
|
private:
|
|
|
|
|
|
QMap<QString, iAlgPseuMethodTriInfo*> 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; //是否分段进行拟合处理
|
|
|
};
|