|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
|
|
#include "Defines.h"
|
|
|
|
|
|
#include "mAlgDefines.h"
|
|
|
|
|
|
#include "mAlgDefines_global.h"
|
|
|
|
|
|
#include "mAlgMatrix.h"
|
|
|
|
|
|
|
|
|
|
|
|
class iModelOption;
|
|
|
|
|
|
class iDynSkinInfo;
|
|
|
|
|
|
|
|
|
|
|
|
// 参数管理类
|
|
|
|
|
|
class M_ALG_DEFINES_EXPORT iParaManager
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
iParaManager();
|
|
|
|
|
|
~iParaManager();
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
// 增加临时函数,限定某些模型,来测试无井储
|
|
|
|
|
|
// 含义:是否必须提供井储参数
|
|
|
|
|
|
bool isCdNeeded();
|
|
|
|
|
|
|
|
|
|
|
|
// 井型/油藏类型/边界类型/Assist
|
|
|
|
|
|
void setModelOption(iModelOption* pModelOption);
|
|
|
|
|
|
iModelOption* getModelOption();
|
|
|
|
|
|
|
|
|
|
|
|
// 参数传递
|
|
|
|
|
|
void setParaMap(QMap<QString, double>& map);
|
|
|
|
|
|
|
|
|
|
|
|
void setParamUnitMap(QMap<QString, QString>& map);
|
|
|
|
|
|
bool getParamValueUnit(QString sPara, QString& sUnit);
|
|
|
|
|
|
|
|
|
|
|
|
void setParaValue(QString sPara, double d);
|
|
|
|
|
|
bool getParaValue(QString sPara , double& d);
|
|
|
|
|
|
bool getParaValues(QStringList listParas, QVector<double>& vecValue);
|
|
|
|
|
|
|
|
|
|
|
|
// 把原来的"x1"之类,根据索引传递,查阅真实的,比如 ee,se,we,ne
|
|
|
|
|
|
// xIndex 从1开始,即遇到"x1"则传入1
|
|
|
|
|
|
QString getBdyRealNameOf(int xIndex);
|
|
|
|
|
|
|
|
|
|
|
|
// 是否包括某个参数的数值
|
|
|
|
|
|
bool isParaContained(QString sPara);
|
|
|
|
|
|
|
|
|
|
|
|
// 参数特殊处理
|
|
|
|
|
|
virtual void adjustParaName(QString& sPara);
|
|
|
|
|
|
virtual void adjustParaName_K(QString& sPara);
|
|
|
|
|
|
virtual void adjustParaValue(QString sPara, double& d); //取完参数之后,允许再次调整
|
|
|
|
|
|
|
|
|
|
|
|
// 是否某个参数的数据,即从map中清除,
|
|
|
|
|
|
// n: 0 即单参数map, 1:一维数组map 2:二维数组map
|
|
|
|
|
|
bool freeDataOfPara(QString sPara, int n);
|
|
|
|
|
|
bool freeDataOfPara(QStringList listParas, int n);
|
|
|
|
|
|
|
|
|
|
|
|
// 一维数组
|
|
|
|
|
|
bool getParaArrValue(QString sPara, VecDouble& vec);
|
|
|
|
|
|
void setParaArrValue(QString sPara, VecDouble vec);
|
|
|
|
|
|
|
|
|
|
|
|
// 二维数组
|
|
|
|
|
|
bool getParaArrArrValue(QString sPara, VVecDouble& vvec);
|
|
|
|
|
|
void setParaArrArrValue(QString sPara, VVecDouble vvec);
|
|
|
|
|
|
|
|
|
|
|
|
// 矩阵
|
|
|
|
|
|
bool getParaMatrixValue(QString sPara, WtaiMatrix& mat);
|
|
|
|
|
|
void setParaMatrixValue(QString sPara, WtaiMatrix mat);
|
|
|
|
|
|
bool getParaVecMatrixValue(QString sPara, QVector<WtaiMatrix>& vecMat);
|
|
|
|
|
|
void setParaVecMatrixValue(QString sPara, QVector<WtaiMatrix> vecMat);
|
|
|
|
|
|
|
|
|
|
|
|
// EndQ
|
|
|
|
|
|
void setEndQ(double dQ);
|
|
|
|
|
|
double getEndQ();
|
|
|
|
|
|
|
|
|
|
|
|
// 所有流量数值
|
|
|
|
|
|
void setAllQs(VecDouble& vec);
|
|
|
|
|
|
|
|
|
|
|
|
//清空数据(每运行一次都清空数据)主要是清空数组数据
|
|
|
|
|
|
void clearArrMap();
|
|
|
|
|
|
//得到常数参数3.6-3.55292376017765
|
|
|
|
|
|
double getSpecialConstant();
|
|
|
|
|
|
|
|
|
|
|
|
// 获取渗透率数值,通常是K但是也有可能是其他
|
|
|
|
|
|
// 比如计算探测半径时用的K值为哪一个?
|
|
|
|
|
|
bool getPossibleValueK(double& d);
|
|
|
|
|
|
|
|
|
|
|
|
/// @brief 获取这些参数标识的数值
|
|
|
|
|
|
/// @param d,结果
|
|
|
|
|
|
/// @param listKeys具体哪些参数
|
|
|
|
|
|
/// @param n:计算方式,0:取存在的第一个 1:取存在的最后一个 2/2+:取存在的所有的算术平均
|
|
|
|
|
|
/// @note 如果全都不存在,则返回false
|
|
|
|
|
|
bool getPossibleValueOf(double& d, const QStringList listKeys, int n = 0);
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
// 计算CD入口函数
|
|
|
|
|
|
virtual bool calCD();
|
|
|
|
|
|
virtual bool calCDCommon(double& A);
|
|
|
|
|
|
bool calCDDualPro(double& A);
|
|
|
|
|
|
bool calCDDualPer(double& A);
|
|
|
|
|
|
bool calCDMedComp(double& A);
|
|
|
|
|
|
bool calCDTLayCrosComp(double& A);
|
|
|
|
|
|
bool calCDTHmgenWt(double& A);
|
|
|
|
|
|
|
|
|
|
|
|
// 参数计算入口函数
|
|
|
|
|
|
virtual bool calParam();
|
|
|
|
|
|
|
|
|
|
|
|
virtual bool calTDIM();
|
|
|
|
|
|
virtual bool calTDIM_Wxd();
|
|
|
|
|
|
virtual bool calPDIM();
|
|
|
|
|
|
virtual bool calPDIM_Wxd();
|
|
|
|
|
|
virtual bool calRcIM();
|
|
|
|
|
|
virtual bool calRc();
|
|
|
|
|
|
/// @brief 计算探测半径的具体实现函数
|
|
|
|
|
|
/// @param dRc,返回的结果,单位:m
|
|
|
|
|
|
/// @param dt,测试时间,单位:h
|
|
|
|
|
|
/// @param dRcIM,为过程中间变量,具体参见 calRcIM ,其实就是 K / (phi * Miuo * Ct)
|
|
|
|
|
|
/// 如果不传入,则认为需要重新进行计算
|
|
|
|
|
|
/// @note 涉及两处, 一是解释结果,含义:这次试井测试,从开始到结束,压力波最远传到了哪里
|
|
|
|
|
|
/// 二是鼠标移动过程tips,含义:在测试过程中,压力波此时此刻传到了哪里
|
|
|
|
|
|
virtual bool calRc(double& dRc, double dt, double dRcIM = SYS_VALUE_INVALID);
|
|
|
|
|
|
|
|
|
|
|
|
// 普通井的量纲转换需要变化
|
|
|
|
|
|
virtual bool calTDIMCommon(double& A);
|
|
|
|
|
|
bool calTDIMDualPro(double& A);
|
|
|
|
|
|
bool calTDIMDualPer(double& A);
|
|
|
|
|
|
bool calTDIMMedComp(double& A);
|
|
|
|
|
|
bool calTDIMTLayCrosComp(double& A);
|
|
|
|
|
|
bool calTDIMTHmgenWt(double& A);
|
|
|
|
|
|
|
|
|
|
|
|
virtual bool calPDIMCommon(double& A);
|
|
|
|
|
|
bool calPDIMDualPer(double& A);
|
|
|
|
|
|
bool calPDIMMedComp(double& A);
|
|
|
|
|
|
bool calPDIMTLayCrosComp(double& A);
|
|
|
|
|
|
bool calPHYDIM(double& A);
|
|
|
|
|
|
|
|
|
|
|
|
// 数值解
|
|
|
|
|
|
bool calyD();
|
|
|
|
|
|
|
|
|
|
|
|
bool findParam(QString sPara, double &d);
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
// 是否启用混合黏度
|
|
|
|
|
|
void setEnableMux(bool b);
|
|
|
|
|
|
bool getEnableMux();
|
|
|
|
|
|
|
|
|
|
|
|
// 允许在计算之后,对结果进行个别计算或调整
|
|
|
|
|
|
virtual void adjustParaResults();
|
|
|
|
|
|
|
|
|
|
|
|
// 增加对于变表皮的处理
|
|
|
|
|
|
void setDynSkinInfo(iDynSkinInfo* p);
|
|
|
|
|
|
|
|
|
|
|
|
// 当前是否正在获取动态的表皮模式(开关)
|
|
|
|
|
|
// 只有在计算历史压力曲线时,才设置为true
|
|
|
|
|
|
void setHistRunning(bool b);
|
|
|
|
|
|
// 当前操作的流动段索引,为了获取前一流量
|
|
|
|
|
|
void setHistSegIndex(int n);
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef QT_DEBUG
|
|
|
|
|
|
void assertPara(QString sPara, bool bSetValue);
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
QString getLastError();
|
|
|
|
|
|
void resetError();
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
// 单个参数map
|
|
|
|
|
|
QMap<QString, double> m_mapParas;
|
|
|
|
|
|
QMap<QString, QString> m_mapParasUnit;
|
|
|
|
|
|
|
|
|
|
|
|
// 参数对应数组
|
|
|
|
|
|
QMap<QString, VecDouble> m_mapArrParas;
|
|
|
|
|
|
|
|
|
|
|
|
// 二维数组
|
|
|
|
|
|
QMap<QString, VVecDouble> m_mapArrArrParas;
|
|
|
|
|
|
|
|
|
|
|
|
QMap<QString, WtaiMatrix >m_mapMatrixParas;
|
|
|
|
|
|
QMap<QString, QVector<WtaiMatrix> >m_mapVecMatrixParas;
|
|
|
|
|
|
|
|
|
|
|
|
//黏度是否启用混合黏度
|
|
|
|
|
|
bool m_bEnableMux;
|
|
|
|
|
|
|
|
|
|
|
|
double m_dEndQ;
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
|
|
|
|
|
|
iModelOption* m_pModelOption;
|
|
|
|
|
|
|
|
|
|
|
|
// 变表皮
|
|
|
|
|
|
iDynSkinInfo* m_pDynSkinInfo;
|
|
|
|
|
|
|
|
|
|
|
|
// 错误信息
|
|
|
|
|
|
QString m_sError;
|
|
|
|
|
|
};
|