|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
|
|
#include "mAlgDefines.h"
|
|
|
|
|
|
#include "ZxBaseUtil.h"
|
|
|
|
|
|
#include "mAlgDefines_global.h"
|
|
|
|
|
|
|
|
|
|
|
|
class iModelDesc;
|
|
|
|
|
|
class iModelInfoBase;
|
|
|
|
|
|
|
|
|
|
|
|
// 模型选项内容
|
|
|
|
|
|
class M_ALG_DEFINES_EXPORT iModelOption
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
iModelOption();
|
|
|
|
|
|
|
|
|
|
|
|
void clone(iModelOption* p); //克隆
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 这是对应ListWx各项项
|
|
|
|
|
|
enum mpDescs
|
|
|
|
|
|
{
|
|
|
|
|
|
// 无标志
|
|
|
|
|
|
descNone = 0,
|
|
|
|
|
|
|
|
|
|
|
|
// 井储
|
|
|
|
|
|
descWbs = 0x00000001,
|
|
|
|
|
|
// 井型
|
|
|
|
|
|
descWel = 0x00000002,
|
|
|
|
|
|
// 油藏类型
|
|
|
|
|
|
descRes = 0x00000004,
|
|
|
|
|
|
// 边界
|
|
|
|
|
|
descBdy = 0x00000008,
|
|
|
|
|
|
|
|
|
|
|
|
// 其它1
|
|
|
|
|
|
descOther1 =0x00000010,
|
|
|
|
|
|
// 其它2
|
|
|
|
|
|
descOther2 =0x00000020,
|
|
|
|
|
|
|
|
|
|
|
|
// 扩展1
|
|
|
|
|
|
descExt1 = 0x00000040,
|
|
|
|
|
|
// 扩展2
|
|
|
|
|
|
descExt2 = 0x00000080,
|
|
|
|
|
|
// 扩展3
|
|
|
|
|
|
descExt3 = 0x00000100,
|
|
|
|
|
|
// 扩展4
|
|
|
|
|
|
descExt4 = 0x00000200,
|
|
|
|
|
|
// 扩展5
|
|
|
|
|
|
descExt5 = 0x00000400,
|
|
|
|
|
|
// 扩展6
|
|
|
|
|
|
descExt6 = 0x00000800,
|
|
|
|
|
|
|
|
|
|
|
|
// 待定
|
|
|
|
|
|
descUnknown = 0x00001000
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 这是对应Checkbox勾选项
|
|
|
|
|
|
enum mpFlags
|
|
|
|
|
|
{
|
|
|
|
|
|
// 无标志
|
|
|
|
|
|
flagNone = 0,
|
|
|
|
|
|
|
|
|
|
|
|
// 启用压力梯度
|
|
|
|
|
|
flagPressGrad = 0x00000001,
|
|
|
|
|
|
// 动态渗透率
|
|
|
|
|
|
flagDynamicK = 0x00000002,
|
|
|
|
|
|
// 小信号
|
|
|
|
|
|
flagSmallSignal = 0x00000004,
|
|
|
|
|
|
// 应力敏感
|
|
|
|
|
|
flagStressSensitive = 0x00000008,
|
|
|
|
|
|
// 井间干扰
|
|
|
|
|
|
flagInterference = 0x00000010,
|
|
|
|
|
|
// 压裂井
|
|
|
|
|
|
flagFractuWell = 0x00000020,
|
|
|
|
|
|
|
|
|
|
|
|
// 吸附系数
|
|
|
|
|
|
flagAdsorption = 0x00000040,
|
|
|
|
|
|
// 是否窜流
|
|
|
|
|
|
flagCrossFlow = 0x00000080,
|
|
|
|
|
|
// 是否多层模型
|
|
|
|
|
|
flagMultiLayer = 0x00000100,
|
|
|
|
|
|
// 扩展4
|
|
|
|
|
|
flagExt4 = 0x00000200,
|
|
|
|
|
|
// 扩展5
|
|
|
|
|
|
flagExt5 = 0x00000400,
|
|
|
|
|
|
// 扩展6
|
|
|
|
|
|
flagExt6 = 0x00000800,
|
|
|
|
|
|
|
|
|
|
|
|
// 待定
|
|
|
|
|
|
flagUnknown = 0x00001000
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
// 标识开启(对应界面上√)
|
|
|
|
|
|
bool isFlagOpen(mpFlags flags) const;
|
|
|
|
|
|
void setFlagOpen(mpFlags flags, bool bOpen);
|
|
|
|
|
|
void setFlagOpen(QString key, bool bOpen);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 增加多层模式,借助Flag的定义 flagMultiLayer
|
|
|
|
|
|
bool isMultiLayer();
|
|
|
|
|
|
void setMultiLayer(bool b);
|
|
|
|
|
|
|
|
|
|
|
|
// 设置模型选项,如井储、井型等
|
|
|
|
|
|
void setMpDesc(QString key, QString sCode, QString sTag = "");
|
|
|
|
|
|
void setMpDesc(mpDescs descs, QString sCode, QString sTag = "");
|
|
|
|
|
|
|
|
|
|
|
|
// 为了方便调用增加
|
|
|
|
|
|
m_Assist_Type getAssistType();
|
|
|
|
|
|
QString getTagWbs(bool bFullMode = false);
|
|
|
|
|
|
QString getTagWel(bool bFullMode = false);
|
|
|
|
|
|
QString getTagRes(bool bFullMode = false);
|
|
|
|
|
|
QString getTagBdy(bool bFullMode = false);
|
|
|
|
|
|
QString getTagOfTypeId(int id, \
|
|
|
|
|
|
const QVector<iModelInfoBase*>* pVec, \
|
|
|
|
|
|
bool bFullMode = false);
|
|
|
|
|
|
|
|
|
|
|
|
//扩展ID对XA的接口
|
|
|
|
|
|
QString getExtIdWbs();
|
|
|
|
|
|
QString getExtIdWel();
|
|
|
|
|
|
QString getExtIdRes();
|
|
|
|
|
|
QString getExtIdBdy();
|
|
|
|
|
|
static QString getExtIdOfTypeId(int id, const QVector<iModelInfoBase*>* pVec);
|
|
|
|
|
|
|
|
|
|
|
|
// 是否外部模型
|
|
|
|
|
|
AlgModelSrc getAMS();
|
|
|
|
|
|
// bool isCustomModel();
|
|
|
|
|
|
// bool isWxdModel();
|
|
|
|
|
|
|
|
|
|
|
|
QString sumModelInfos();
|
|
|
|
|
|
void parseModelInfos(QString s);
|
|
|
|
|
|
|
|
|
|
|
|
// 每次从界面重新处理前重置一下
|
|
|
|
|
|
void reset();
|
|
|
|
|
|
|
|
|
|
|
|
// 对于北京模型的一些额外判断,临时放在此处
|
|
|
|
|
|
static QStringList getModelSeriesOfBJ();
|
|
|
|
|
|
static bool isModelSerieOfBJ(QString sSerie);
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
// 根据文字获取
|
|
|
|
|
|
iModelDesc* matchModelDesc();
|
|
|
|
|
|
bool checkModelDesc(bool loggedIfError = false);
|
|
|
|
|
|
iModelDesc* getModelDesc();
|
|
|
|
|
|
QString getOptionStr(); //当前选项描述,为啥弹出日志
|
|
|
|
|
|
|
|
|
|
|
|
// 根据井型+储层类型编码,获取当前的配置的序列Serie
|
|
|
|
|
|
static iModelDesc* getModelSerieBy(QString sCodeWel, QString sCodeRes, \
|
|
|
|
|
|
QString sTagWel = "", QString sTagRes = "", \
|
|
|
|
|
|
bool bAdsorption = false);
|
|
|
|
|
|
|
|
|
|
|
|
// static WellFluidType convertFluidType(QString sTag);
|
|
|
|
|
|
static ModelSeriesType convertModelSeries(QString sTag);
|
|
|
|
|
|
|
|
|
|
|
|
//ZXF20241216根据井和储层得到模型
|
|
|
|
|
|
static iModelDesc* getModelDescEx(QString sWelCode, QString sResCode, bool bAdsorption);
|
|
|
|
|
|
//选择的类型
|
|
|
|
|
|
iModelInfoBase* getSelModelInfo(QString sOption);
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
|
|
|
|
|
|
mpFlags m_oFlags;
|
|
|
|
|
|
|
|
|
|
|
|
// 不涉及序列化,该Option对应的ModelDesc
|
|
|
|
|
|
// 如果为空,则表示该Option为不支持的算法模型
|
|
|
|
|
|
iModelDesc* m_pModelDesc;
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
// 对应四个选项,井储、井模型、油藏模型、边界类型
|
|
|
|
|
|
m_Wbs_Type m_oWbsType;
|
|
|
|
|
|
m_Wel_Type m_oWelType;
|
|
|
|
|
|
m_Res_Type m_oResType;
|
|
|
|
|
|
m_Bdy_Type m_oBdyType;
|
|
|
|
|
|
|
|
|
|
|
|
ModelSeriesType m_oMst; //大的分类信息,这是软件启动时导航的选项
|
|
|
|
|
|
WellFluidType m_oWft; //井类别,指:油气水井
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef _SCAN_OLD_CODES_
|
|
|
|
|
|
QString m_sModelCode; //这是模型统一编码
|
|
|
|
|
|
#endif
|
|
|
|
|
|
};
|