|
|
|
|
|
#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<QString, iPseudoCInfo*>& mapPsInfos, \
|
|
|
|
|
|
QMap<QString, double>& 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<QString, double>& mapOthers);
|
|
|
|
|
|
|
|
|
|
|
|
// 先根据p计算各个拟合数据
|
|
|
|
|
|
bool calBaseFitRs(double dP, QMap<QString, double>& map);
|
|
|
|
|
|
|
|
|
|
|
|
// 积分,徐泽轩
|
|
|
|
|
|
double simpsonComplex(double a, double b, int which, \
|
|
|
|
|
|
double epsilon = 0.01);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 积分,baiwp
|
|
|
|
|
|
double integral(double min, double max, int which, \
|
|
|
|
|
|
QMap<QString, double>& map, int nLoop = 1000);
|
|
|
|
|
|
|
|
|
|
|
|
// 1-2-3区拟压力计算
|
|
|
|
|
|
double calPsBy(int which, double fP);
|
|
|
|
|
|
double calPsByOne(QMap<QString, double>& map);
|
|
|
|
|
|
double calPsByTwo(QMap<QString, double>& map);
|
|
|
|
|
|
double calPsByThree(QMap<QString, double>& map);
|
|
|
|
|
|
|
|
|
|
|
|
signals:
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
|
|
|
|
|
QMap<QString, iPseudoCInfo*> 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;
|
|
|
|
|
|
};
|