|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
|
|
#include "IxSerDes.h"
|
|
|
|
|
|
#include "ZxXpf.h"
|
|
|
|
|
|
#include "ZxSerializer.h"
|
|
|
|
|
|
|
|
|
|
|
|
#include "Defines.h"
|
|
|
|
|
|
#include "mAlgDefines.h"
|
|
|
|
|
|
#include "mModuleDefines.h"
|
|
|
|
|
|
#include "ZxBaseUtil.h"
|
|
|
|
|
|
|
|
|
|
|
|
#include "mGuiAnal_global.h"
|
|
|
|
|
|
|
|
|
|
|
|
class ZxDataWell;
|
|
|
|
|
|
class ZxRstWnd;
|
|
|
|
|
|
class ZxDataAnalRun;
|
|
|
|
|
|
class iWxBase;
|
|
|
|
|
|
class iModelOption;
|
|
|
|
|
|
|
|
|
|
|
|
class M_GUI_ANAL_EXPORT iAnalRun : public QObject,
|
|
|
|
|
|
virtual public IxSerDes
|
|
|
|
|
|
{
|
|
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
explicit iAnalRun();
|
|
|
|
|
|
~iAnalRun();
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
// 如下接口慎用,原因:(20250208,具体可以咨询wzg)
|
|
|
|
|
|
// 这些接口只是,获取iAnalRun本身包括的各个分析对话框的内容,
|
|
|
|
|
|
// 但实际上,对于各个SubWnd如iSubWndFitting而言,其在创建时,是从iAnalRun各分析对话框克隆了一份
|
|
|
|
|
|
// 也就是说iSubWndFitting本身也有一套分析对话框,应该直接用这套分析对话框的数据
|
|
|
|
|
|
// iSubWndFitting中,也有一套几乎完全类似的接口,但二者针对的对象不同,各自的分析对话框窗体
|
|
|
|
|
|
|
|
|
|
|
|
/// @brief 获取 基础页面中,测试类型,如:标准、干扰、小型压裂、多层
|
|
|
|
|
|
QString getBasicTestType();
|
|
|
|
|
|
|
|
|
|
|
|
/// @brief 获取 基础页面中,测试类型对应的枚举变量
|
|
|
|
|
|
PvtTestType getBasicTestTypeEx();
|
|
|
|
|
|
|
|
|
|
|
|
/// @brief 获取 基础页面中,是否单相
|
|
|
|
|
|
bool isBasicPhaseS();
|
|
|
|
|
|
|
|
|
|
|
|
/// @brief 获取 基础页面中,相态选项,注意返回结果是组合形式,需要根据定义自行解析
|
|
|
|
|
|
PvtFluidType getBasicPft();
|
|
|
|
|
|
|
|
|
|
|
|
/// @brief 获取 基础页面中,相态选项,中文描述,其实就是下拉框显示的内容
|
|
|
|
|
|
QString getBasicPftDesc();
|
|
|
|
|
|
|
|
|
|
|
|
/// @brief 获取 基础页面中,主相,中文描述,即:油气水之一
|
|
|
|
|
|
/// @note 该函数仅仅为了兼容原先,比如,右键弹窗,根据油气水,筛选AnalRun
|
|
|
|
|
|
QString getBasicMainPft();
|
|
|
|
|
|
|
|
|
|
|
|
/// @brief 获取 基础页面中,某个参数的具体数值
|
|
|
|
|
|
/// @param sPara,参数,英文标识而且大小写敏感
|
|
|
|
|
|
/// @param d,返回的结果
|
|
|
|
|
|
/// @note 参数举例:"rw"/"wellDis"/"h"/"phi"/"Ct"/"Pi"
|
|
|
|
|
|
/// 对于多层,则以第一行数据为主
|
|
|
|
|
|
bool getBasicParaOf(QString sPara, double& d);
|
|
|
|
|
|
|
|
|
|
|
|
/// @brief 获取 基础页面中,储层参数表格中指定行数据
|
|
|
|
|
|
/// @param vvec,结果缓存
|
|
|
|
|
|
/// @param bOnlyChecked,为true,则返回勾选的行,否则,所有行数据
|
|
|
|
|
|
bool getBasicDataLayers(VVecVariant& vvec, bool bOnlyChecked = false);
|
|
|
|
|
|
|
|
|
|
|
|
/// @brief 获取 基础页面中,部分基础信息,为了展示到表格中,该函数只是为了方便而已,慎用
|
|
|
|
|
|
/// @param vec,结果缓存
|
|
|
|
|
|
/// @param nColCount 列数
|
|
|
|
|
|
/// @note 组织形式:名称、编码、测试类型、相态、井半径、单相/多相
|
|
|
|
|
|
/// 该函数 慎用,如需应用,请咨询wangzg
|
|
|
|
|
|
bool getBasicBaseRowInfos(VecVariant& vec, int nColCount);
|
|
|
|
|
|
|
|
|
|
|
|
/// @brief 获取 Pvt页面中,油气水项,某个参数的计算结果
|
|
|
|
|
|
/// @param pft,油气水,请根据需要传入 WFT_Oil 或 WFT_Gas 或 WFT_Water
|
|
|
|
|
|
/// @param sPara,参数,英文标识而且大小写敏感,如"Pb"/"Rs"/"Co"等
|
|
|
|
|
|
/// @param vecX,返回之x列,通常是压力或温度参数
|
|
|
|
|
|
/// @param vecY,返回之y列,即sPara对应的参数数值列,与vecX一一对应
|
|
|
|
|
|
/// @param ptrPtResult,结果选用的点(即PVT曲线上方块点)
|
|
|
|
|
|
/// @param ptrPtReferPb,对应的pb相应的参考点
|
|
|
|
|
|
bool getPvtRstOf(PvtFluidType pft, QString sPara, \
|
|
|
|
|
|
VecDouble& vecX, VecDouble& vecY, \
|
|
|
|
|
|
QPointF* ptrPtResult = nullptr, \
|
|
|
|
|
|
QPointF* ptrPtReferPb = nullptr);
|
|
|
|
|
|
|
|
|
|
|
|
/// @brief 获取 Pvt页面中,参数的值,比如Zg、Bg等,即选用的参数数值
|
|
|
|
|
|
/// @param listParas,参数列表,通常以英文标识为准
|
|
|
|
|
|
/// @param map 返回结果
|
|
|
|
|
|
/// @note 这些参数值通常存于Pvt:Header之中
|
|
|
|
|
|
bool getPvtParaValues(QStringList listParas, QMap<QString, double>& map);
|
|
|
|
|
|
|
|
|
|
|
|
/// @brief 获取 Diffusion页面中,某个参数的具体数值
|
|
|
|
|
|
/// @param dso,参数,代表是相渗还是压敏还是吸附
|
|
|
|
|
|
/// @param sPara,参数,英文标识而且大小写敏感
|
|
|
|
|
|
/// @param d,返回的结果
|
|
|
|
|
|
/// @note 主要是左侧属性页上的各项的数据,参照xml定义进行读取
|
|
|
|
|
|
bool getDiffusionParaOf(DiffusionSubOption dso, QString sPara, double& d);
|
|
|
|
|
|
|
|
|
|
|
|
/// @brief 获取 Diffusion页面中,计算结果,基本上就是右侧对应表格的数据
|
|
|
|
|
|
/// @param dso,参数,代表是相渗还是压敏还是吸附
|
|
|
|
|
|
/// @param vvec,返回数据,即计算结果,与右侧表格对应
|
|
|
|
|
|
bool getDiffusionRstOf(DiffusionSubOption dso, VVecDouble& vvec);
|
|
|
|
|
|
|
|
|
|
|
|
/// @brief 获取 拟压力页面中,拟压力结果表
|
|
|
|
|
|
/// @param vvec,返回数据,长度为4,分别为压力P/拟压力Ps/偏差因子Zg/黏度Miug
|
|
|
|
|
|
/// 压力,单位 Mpa
|
|
|
|
|
|
/// 拟压力,单位 Pa/sec
|
|
|
|
|
|
/// 偏差因子,单位 Pa/sec
|
|
|
|
|
|
/// 黏度,单位 Pa/sec
|
|
|
|
|
|
bool getPseuRstOf(VVecDouble& vvec);
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef _SCAN_OLD_CODES_
|
|
|
|
|
|
bool saveBasicAsByteArr(QByteArray& v);
|
|
|
|
|
|
bool loadBasicFromByteArr(QByteArray& v);
|
|
|
|
|
|
QString getTestType();
|
|
|
|
|
|
QString getBasicMainPft();
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
// 如下接口慎用,仅限内部使用,如果非要引用,请咨询wzg
|
|
|
|
|
|
// 因为同时存在 iAnalRun和SubWnd如iSubWndFitting的两套分析对话框的内容,(参见本类一开始的说明)
|
|
|
|
|
|
// 所以需要调用时决定用哪一套
|
|
|
|
|
|
|
|
|
|
|
|
/// @brief 根据当前的模型情况进行配置拟压力相关,调用该函数前已经确保是GAS
|
|
|
|
|
|
/// @param bInitPs是否初始化,如果不是,则只设置ps3
|
|
|
|
|
|
/// @param pModelOption 如果pModelOption不为空,则根据pModelOption设置ps3模式,
|
|
|
|
|
|
/// 否则:bSetPs3ModeBySelf为true时,根据this设置ps3模式
|
|
|
|
|
|
/// @param bSetPs3ModeBySelf
|
|
|
|
|
|
/// @param pVecWxs分析的各个窗体指针,如果为空,则用iAnalRun下面的
|
|
|
|
|
|
/// 比如对于Fitting用的是Fitting自身的
|
|
|
|
|
|
/// @note 对于IPR对话框,需要根据Anal类型直接设置,对于其它不能设置
|
|
|
|
|
|
bool configPsAbouts(bool bInitPs, \
|
|
|
|
|
|
iModelOption* pModelOption, \
|
|
|
|
|
|
bool bSetPs3ModeBySelf = false, \
|
|
|
|
|
|
QVector<iWxBase*>* pVecWxs = nullptr);
|
|
|
|
|
|
bool isPs3Valid(QVector<iWxBase*>* pVecWxs = nullptr);
|
|
|
|
|
|
bool isPsCValid(QVector<iWxBase*>* pVecWxs = nullptr);
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
// 获取分析之ID标识
|
|
|
|
|
|
QString getAnalId();
|
|
|
|
|
|
QString getCode();
|
|
|
|
|
|
|
|
|
|
|
|
// 获取指定的窗体
|
|
|
|
|
|
iWxBase* getWxDataOf(AnalWxIndex awi);
|
|
|
|
|
|
|
|
|
|
|
|
// 与数据库对应的真实数据对象
|
|
|
|
|
|
ZxDataAnalRun* getDataAnalRun();
|
|
|
|
|
|
virtual void setDataAnalRun(ZxDataAnalRun* p);
|
|
|
|
|
|
|
|
|
|
|
|
// 可以设定关联井(也可以不设定)
|
|
|
|
|
|
virtual void setDataWell(ZxDataWell* p);
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
// 初始化、刷新UI
|
|
|
|
|
|
virtual void init();
|
|
|
|
|
|
virtual void refresh();
|
|
|
|
|
|
|
|
|
|
|
|
// 序列化
|
|
|
|
|
|
virtual void onSerialize(ZxSerializer* ser);
|
|
|
|
|
|
virtual void onDeserialize(ZxSerializer* ser);
|
|
|
|
|
|
|
|
|
|
|
|
// 分析相关
|
|
|
|
|
|
// 说明:对于SubWnd而言,Anal已经存入SubWnd本身
|
|
|
|
|
|
// 参见:iSubWndBaseFit::onSerialize/onDerialize
|
|
|
|
|
|
// 所以,在成果保存时,无需另行保存Anal相关
|
|
|
|
|
|
// 即:R_RST_BASIC/DIFFUSION/PVT/PSEU四张表是暂时没有用的
|
|
|
|
|
|
virtual bool saveRstAnalInfos(ZxRstWnd* pRstWnd);
|
|
|
|
|
|
virtual bool loadRstAnalInfos(ZxRstWnd* pRstWnd);
|
|
|
|
|
|
|
|
|
|
|
|
// 为了速度,而增加的特殊处理
|
|
|
|
|
|
virtual void ensureLoaded();
|
|
|
|
|
|
void setLoaded(bool b);
|
|
|
|
|
|
|
|
|
|
|
|
private slots:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
|
|
|
|
|
// 参与序列化:分别为 Basic、Pvt、Diffusion、Pseu共计4个
|
|
|
|
|
|
// 如需调整顺序,请同步更新 AnalWxIndex 宏定义
|
|
|
|
|
|
QVector<iWxBase*> m_vecWxDatas;
|
|
|
|
|
|
|
|
|
|
|
|
// 与数据库对应的真实数据(外界传入,本类不进行创建释放维护)
|
|
|
|
|
|
ZxDataWell* m_pDataWell;
|
|
|
|
|
|
ZxDataAnalRun* m_pDataAnalRun;
|
|
|
|
|
|
|
|
|
|
|
|
// 为了速度而增加
|
|
|
|
|
|
bool m_bLoaded;
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef _SCAN_OLD_CODES_
|
|
|
|
|
|
QStringList m_listBasicInfos;
|
|
|
|
|
|
#endif
|
|
|
|
|
|
};
|