|
|
#pragma once
|
|
|
|
|
|
#include "Defines.h"
|
|
|
#include "mAlgPseudo_global.h"
|
|
|
|
|
|
class iAlgPseuMethodTriInfo;
|
|
|
class zxAlgRegress;
|
|
|
|
|
|
// 三区拟压力计算载体,单例模式,在模型处理解释过程调用(属于用的部分)
|
|
|
// 由iAlgPseuCaller进行调用
|
|
|
class M_ALGPSEUDO_EXPORT iAlgPseuConvertTri
|
|
|
{
|
|
|
public:
|
|
|
|
|
|
iAlgPseuConvertTri();
|
|
|
|
|
|
static bool initPs(const VVecDouble& vvec, \
|
|
|
const QMap<QString, iAlgPseuMethodTriInfo *>* pMap1, \
|
|
|
const QMap<QString, double>* pMap2);
|
|
|
|
|
|
// 系统内部自动选用不同的方法
|
|
|
static bool calP(double ps, double &p, int which = -1);
|
|
|
static bool calPS(double p, double &ps, int which = -1);
|
|
|
|
|
|
private:
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////
|
|
|
// 拟合公式
|
|
|
// 计算“压力->拟压力”的回归曲线方程系数
|
|
|
// static bool fitPtoPS(bool isZero = true);
|
|
|
// // 计算“拟压力->压力”的回归曲线方程系数
|
|
|
static bool fitPStoP(bool isZero = false);
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
// 压力->拟压力,三段各自的拟合函数
|
|
|
static bool pToPs_Ps3Fitting(double p, double &ps);
|
|
|
// 拟压力->压力,三段各自的反推函数
|
|
|
static bool psToP_Ps3Fitting(double ps, double &p);
|
|
|
|
|
|
// 压力->拟压力,借助三区计算方法来计算(载体),但是这个速度太慢,而且异常太多,主要是积分/0,暂不启用
|
|
|
// static bool pToPs_Ps3Integral(double p, double &ps);
|
|
|
// // 压力->拟压力,精度比湛江方法高,临时采用
|
|
|
// static bool pToPs_Cv(double p, double &ps);
|
|
|
// // 拟压力->压力,精度比湛江方法低,但对于三区来讲,没法反推,只能将就使用
|
|
|
//static bool psToP_Cv(double ps, double &p);
|
|
|
|
|
|
|
|
|
// 20220317 增加新的方式,直接根据数据进行判断,看谁离得最近,则选取谁
|
|
|
static bool pToPs_Simple(double p, double &ps);
|
|
|
static bool psToP_Simple(double ps, double &p);
|
|
|
static bool _simple_find_xy(VecDouble* pVecX, VecDouble* pVecY, double x, double &y);
|
|
|
static double _linear_value_at(double x, double x1, double x2, double y1, double y2);
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
private:
|
|
|
static QMap<QString, iAlgPseuMethodTriInfo*> m_mapPsInfos;
|
|
|
static QMap<QString, double> m_mapOthers;
|
|
|
|
|
|
// 用压力算拟压力的系数
|
|
|
static VecDouble m_vecCoefsPtoPS;
|
|
|
|
|
|
// 用拟压力算压力的系数
|
|
|
static VecDouble m_vecCoefsPStoP;
|
|
|
|
|
|
// job里的三组数据
|
|
|
static VecDouble m_vecP;
|
|
|
static VecDouble m_vecPs;
|
|
|
|
|
|
// 这是为了方便调用,加快速度
|
|
|
static QMap<int, zxAlgRegress*> m_mapAlgs;
|
|
|
static double m_dPP;
|
|
|
static double m_dPD;
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|