|
|
|
|
@ -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<NM_SOLVER_MODEL_TYPE>(
|
|
|
|
|
m_pCurrentModelCombo->itemData(index).toInt());
|
|
|
|
|
if(eType <= 0) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
nmDataAnalyzeManager* pManager = nmDataAnalyzeManager::getCurrentInstance();
|
|
|
|
|
if(pManager != nullptr) {
|
|
|
|
|
pManager->setSolverModelType(eType);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void nmWxNumericalDesign::onGenerateClicked()
|
|
|
|
|
{
|
|
|
|
|
updateDataFromUi();
|
|
|
|
|
|