You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWTAI-Platform/Include/mAlg/mAlgPseudo/iPseudoCCal.h

76 lines
2.0 KiB
C

#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;
};