diff --git a/Bin/Config/Lang/cn/nmNum_cn.qm b/Bin/Config/Lang/cn/nmNum_cn.qm
index 7c15864..6551396 100644
Binary files a/Bin/Config/Lang/cn/nmNum_cn.qm and b/Bin/Config/Lang/cn/nmNum_cn.qm differ
diff --git a/Bin/Config/Lang/cn/nmNum_cn.ts b/Bin/Config/Lang/cn/nmNum_cn.ts
index 3516394..0c7177c 100644
--- a/Bin/Config/Lang/cn/nmNum_cn.ts
+++ b/Bin/Config/Lang/cn/nmNum_cn.ts
@@ -5066,8 +5066,12 @@ Please check your input coordinates.
当前井:
- Current model
- 当前模型
+ Current model:
+ 当前模型:
+
+
+ Model selection
+ 模型选择
Oil single-phase constant pvt
diff --git a/Include/nmNum/nmSubWxs/nmWxNumericalDesign.h b/Include/nmNum/nmSubWxs/nmWxNumericalDesign.h
index 37898e9..b63c9b7 100644
--- a/Include/nmNum/nmSubWxs/nmWxNumericalDesign.h
+++ b/Include/nmNum/nmSubWxs/nmWxNumericalDesign.h
@@ -71,6 +71,8 @@ signals:
void onOutputResultFieldsToggled(bool checked);
// 查看井结果下拉框切换槽
void onResultWellChanged(int index);
+ // 当前模型下拉框切换槽
+ void onCurrentModelChanged(int index);
// 处理时间参考系单选按钮切换
//void onTimeReferenceSystemToggled(bool checked);
@@ -123,9 +125,10 @@ private:
QComboBox* m_pResultWellCombo;
bool m_bFillingResultWellCombo;
- // 当前模型显示
+ // 当前模型切换控件
QGroupBox* m_pCurrentModelGroup;
- QLabel* m_pCurrentModelValueLabel;
+ QComboBox* m_pCurrentModelCombo;
+ bool m_bFillingCurrentModelCombo;
// 输出组组件 (新)
QGroupBox* m_pOutputGroup; // 输出分组框
diff --git a/Src/nmNum/nmSubWxs/nmWxNumericalDesign.cpp b/Src/nmNum/nmSubWxs/nmWxNumericalDesign.cpp
index aa693e3..008dfbb 100644
--- a/Src/nmNum/nmSubWxs/nmWxNumericalDesign.cpp
+++ b/Src/nmNum/nmSubWxs/nmWxNumericalDesign.cpp
@@ -70,8 +70,9 @@ nmWxNumericalDesign::nmWxNumericalDesign(QWidget *parent)
m_pResultWellGroup = nullptr;
m_pResultWellCombo = nullptr;
m_pCurrentModelGroup = nullptr;
- m_pCurrentModelValueLabel = nullptr;
+ m_pCurrentModelCombo = nullptr;
m_bFillingResultWellCombo = false;
+ m_bFillingCurrentModelCombo = false;
// 初始化图标路径
m_sIconDir = QCoreApplication::applicationDirPath();
@@ -189,38 +190,74 @@ void nmWxNumericalDesign::initResultWellGroup()
m_pResultWellGroup->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
}
-// 显示当前模型名
+// 初始化当前模型切换控件
void nmWxNumericalDesign::initCurrentModelGroup()
{
- m_pCurrentModelGroup = new QGroupBox(tr("Current model"), this);
+ m_pCurrentModelGroup = new QGroupBox(tr("Model selection"), this);
QGridLayout* pGridLayout = new QGridLayout(m_pCurrentModelGroup);
- m_pCurrentModelValueLabel = new QLabel(this);
- m_pCurrentModelValueLabel->setTextInteractionFlags(Qt::TextSelectableByMouse);
- m_pCurrentModelValueLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
+ QLabel* pCurrentModelLabel = new QLabel(tr("Current model:"), this);
+ m_pCurrentModelCombo = new QComboBox(this);
+
updateCurrentModelDisplay();
- pGridLayout->addWidget(m_pCurrentModelValueLabel, 0, 0);
- pGridLayout->setColumnStretch(0, 1);
+ pGridLayout->addWidget(pCurrentModelLabel, 0, 0, Qt::AlignLeft);
+ pGridLayout->addWidget(m_pCurrentModelCombo, 0, 1);
+ pGridLayout->setColumnStretch(0, 0);
+ pGridLayout->setColumnStretch(1, 1);
m_pCurrentModelGroup->setLayout(pGridLayout);
m_pCurrentModelGroup->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
}
-// 按当前成果对应的数据管理器刷新模型名
+// 按当前成果对应的数据管理器刷新模型下拉框选中项
void nmWxNumericalDesign::updateCurrentModelDisplay()
{
- if(m_pCurrentModelValueLabel == nullptr) {
+ if(m_pCurrentModelCombo == nullptr) {
return;
}
+ m_bFillingCurrentModelCombo = true;
+ m_pCurrentModelCombo->clear();
+
nmDataAnalyzeManager* pManager = nmDataAnalyzeManager::getCurrentInstance();
if(pManager == nullptr) {
- m_pCurrentModelValueLabel->clear();
+ m_pCurrentModelCombo->setEnabled(false);
+ m_bFillingCurrentModelCombo = false;
return;
}
- m_pCurrentModelValueLabel->setText(solverModelDisplayName(pManager->getSolverModelType()));
+ // 根据储层相态过滤可选模型类型
+ nmDataReservoir* pReservoir = pManager->getReservoirData();
+ NM_PHASE_TYPE ePhase = (pReservoir != nullptr) ? pReservoir->getPhaseType() : PHASE_UNKNOWN;
+ NM_SOLVER_MODEL_TYPE eCurrentType = pManager->getSolverModelType();
+
+ switch(ePhase) {
+ case PHASE_Oil:
+ m_pCurrentModelCombo->addItem(solverModelDisplayName(SMT_Oil_ConstPvt), SMT_Oil_ConstPvt);
+ m_pCurrentModelCombo->addItem(solverModelDisplayName(SMT_Oil_VariablePvt), SMT_Oil_VariablePvt);
+ break;
+ case PHASE_Water:
+ m_pCurrentModelCombo->addItem(solverModelDisplayName(SMT_Water_ConstPvt), SMT_Water_ConstPvt);
+ m_pCurrentModelCombo->addItem(solverModelDisplayName(SMT_Water_VariablePvt), SMT_Water_VariablePvt);
+ break;
+ case PHASE_Gas:
+ m_pCurrentModelCombo->addItem(solverModelDisplayName(SMT_Gas_VariablePvt), SMT_Gas_VariablePvt);
+ break;
+ case PHASE_Oil_Water:
+ m_pCurrentModelCombo->addItem(solverModelDisplayName(SMT_Oil_Water_TwoPhase), SMT_Oil_Water_TwoPhase);
+ break;
+ default:
+ break;
+ }
+
+ int nIndex = m_pCurrentModelCombo->findData(eCurrentType);
+ if(nIndex >= 0) {
+ m_pCurrentModelCombo->setCurrentIndex(nIndex);
+ }
+
+ m_pCurrentModelCombo->setEnabled(true);
+ m_bFillingCurrentModelCombo = false;
}
// 按参与计算井刷新下拉框
@@ -684,6 +721,7 @@ void nmWxNumericalDesign::setupConnections()
// 连接生成按钮的点击信号到槽函数
connect(m_pGenerateButton, SIGNAL(clicked()), this, SLOT(onGenerateClicked()));
connect(m_pResultWellCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(onResultWellChanged(int)));
+ connect(m_pCurrentModelCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(onCurrentModelChanged(int)));
// 主选项组连接
// 连接齿轮图标按钮的槽函数
@@ -787,6 +825,25 @@ void nmWxNumericalDesign::onResultWellChanged(int index)
emit sigResultWellChanged(sWellName);
}
+// 当前模型下拉框切换槽,将用户选择的模型类型同步到数据管理器
+void nmWxNumericalDesign::onCurrentModelChanged(int index)
+{
+ if(m_bFillingCurrentModelCombo || index < 0 || m_pCurrentModelCombo == nullptr) {
+ return;
+ }
+
+ NM_SOLVER_MODEL_TYPE eType = static_cast(
+ m_pCurrentModelCombo->itemData(index).toInt());
+ if(eType <= 0) {
+ return;
+ }
+
+ nmDataAnalyzeManager* pManager = nmDataAnalyzeManager::getCurrentInstance();
+ if(pManager != nullptr) {
+ pManager->setSolverModelType(eType);
+ }
+}
+
void nmWxNumericalDesign::onGenerateClicked()
{
updateDataFromUi();