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

73 lines
2.1 KiB
C

#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<QString, iPseudo3Info*>& mapPsInfos, \
QMap<QString, double>& 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<QString, double>& mapOthers);
// 先根据p计算各个拟合数据
bool calBaseFitRs(double fP, 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, iPseudo3Info*> 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; //是否分段进行拟合处理
};