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/iAlgPseuMethodComp.h

81 lines
2.3 KiB
C

#pragma once
#include "iAlgPseuMethodBase.h"
#include "mAlgPseudo_global.h"
class iAlgPseuMethodCompInfo;
// 这是在PVT/PSEU等方法拟压力相关的准备过程中涉及的算法组分计算源自徐泽轩
class M_ALGPSEUDO_EXPORT iAlgPseuMethodComp : public iAlgPseuMethodBase
{
public:
iAlgPseuMethodComp();
~iAlgPseuMethodComp();
// 绑定成员变量,这个类里没用
virtual void bindMembers();
// 虚函数,计算函数,这个类里没用
virtual bool cal(VecDouble vecIns, VecDouble& vecOuts);
//关键计算函数,其实只是调用入口
bool calPs(QMap<QString, iAlgPseuMethodCompInfo*> &mapPsInfos, \
QMap<QString, double> &mapOthers, \
VecDouble &vecP, VecDouble &vecPs);
/// @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 dP);
double calPsByOne(QMap<QString, double>& map);
double calPsByTwo(QMap<QString, double>& map);
double calPsByThree(QMap<QString, double>& map);
signals:
private:
QMap<QString, iAlgPseuMethodCompInfo*> 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;
};