From 01914259fee8026282d3ea455aafb412048fd377 Mon Sep 17 00:00:00 2001 From: lh <2334563547@qq.com> Date: Tue, 25 Aug 2026 14:10:43 +0800 Subject: [PATCH] =?UTF-8?q?refactor(numerical):=20=E5=90=88=E5=B9=B6?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B=E4=B8=8E=E7=BB=93=E6=9E=9C=E5=8C=BA=E5=9F=9F?= =?UTF-8?q?=E5=B9=B6=E7=BB=9F=E4=B8=80=E6=8E=A7=E4=BB=B6=E6=A0=B7=E5=BC=8F?= =?UTF-8?q?=20-=20=E5=90=88=E5=B9=B6=E6=A8=A1=E5=9E=8B=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E4=B8=8E=E7=BB=93=E6=9E=9C=E4=BA=95=E9=80=89=E6=8B=A9=E5=88=86?= =?UTF-8?q?=E7=BB=84=20-=20=E7=BB=9F=E4=B8=80=E4=B8=BB=E9=80=89=E9=A1=B9?= =?UTF-8?q?=E5=92=8C=E6=B1=82=E8=A7=A3=E5=99=A8=E8=AE=BE=E7=BD=AE=E7=9A=84?= =?UTF-8?q?=E6=8E=A7=E4=BB=B6=E5=B0=BA=E5=AF=B8=E4=B8=8E=E5=B8=83=E5=B1=80?= =?UTF-8?q?=20-=20=E7=A7=BB=E9=99=A4=E5=AD=97=E6=AE=B5=E6=A0=87=E7=AD=BE?= =?UTF-8?q?=E5=86=92=E5=8F=B7=E5=B9=B6=E6=9B=B4=E6=96=B0=E4=B8=AD=E6=96=87?= =?UTF-8?q?=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bin/Config/Lang/cn/nmNum_cn.qm | Bin 110870 -> 110784 bytes Bin/Config/Lang/cn/nmNum_cn.ts | 28 ++--- Include/nmNum/nmSubWxs/nmWxNumericalDesign.h | 13 +-- Src/nmNum/nmSubWxs/nmWxNumericalDesign.cpp | 111 ++++++++++++------- 4 files changed, 85 insertions(+), 67 deletions(-) diff --git a/Bin/Config/Lang/cn/nmNum_cn.qm b/Bin/Config/Lang/cn/nmNum_cn.qm index a5d2eb246cf6e0e72d57d4e44f9ed3253e369514..e0228d0beb7cd1468c41e10bb015ffe0d27c1169 100644 GIT binary patch delta 3902 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 delta 4144 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 主选项 - View well result - 查看井结果 + Model and result + 模型与结果 - Current well: - 当前井: + Current well + 当前井 - Current model: - 当前模型: - - - Model selection - 模型选择 + Current model + 当前模型 Oil single-phase constant pvt @@ -4975,8 +4971,8 @@ Please check your input coordinates. 求解器设置 - Solver library: - 求解器库: + Solver library + 求解器库 CPU accelerated solver @@ -4987,12 +4983,12 @@ Please check your input coordinates. 原求解器 - OpenMP threads: - OpenMP线程数: + OpenMP threads + OpenMP线程数 - ILU reuse steps: - ILU复用步数: + ILU reuse steps + ILU复用步数 Use automatic settings diff --git a/Include/nmNum/nmSubWxs/nmWxNumericalDesign.h b/Include/nmNum/nmSubWxs/nmWxNumericalDesign.h index 783b56f..0e4905d 100644 --- a/Include/nmNum/nmSubWxs/nmWxNumericalDesign.h +++ b/Include/nmNum/nmSubWxs/nmWxNumericalDesign.h @@ -111,10 +111,8 @@ private: // 初始化UI组件的私有函数 // 初始化主选项组 void initMainOptionsGroup(); - // 初始化查看井结果组 - void initResultWellGroup(); - // 初始化当前模型显示组 - void initCurrentModelGroup(); + // 初始化模型与结果组 + void initModelAndResultGroup(); void initOutputGroup(); // 初始化输出组 (新) void initAdvancedGroup(); // 初始化高级组 (新) void initTimeSteppingGroup(); // 初始化时间步进组 @@ -159,13 +157,10 @@ private: QPushButton* m_pResetDiagnosticButton; // "从诊断复位"按钮 (新) QPushButton* m_pResetAnalyticalButton; // "从解析复位"按钮 (新) - // 查看井结果切换控件 - QGroupBox* m_pResultWellGroup; + // 模型与结果切换控件 + QGroupBox* m_pModelAndResultGroup; QComboBox* m_pResultWellCombo; bool m_bFillingResultWellCombo; - - // 当前模型切换控件 - QGroupBox* m_pCurrentModelGroup; QComboBox* m_pCurrentModelCombo; bool m_bFillingCurrentModelCombo; diff --git a/Src/nmNum/nmSubWxs/nmWxNumericalDesign.cpp b/Src/nmNum/nmSubWxs/nmWxNumericalDesign.cpp index 4d92549..80a9db3 100644 --- a/Src/nmNum/nmSubWxs/nmWxNumericalDesign.cpp +++ b/Src/nmNum/nmSubWxs/nmWxNumericalDesign.cpp @@ -99,9 +99,8 @@ nmWxNumericalDesign::nmWxNumericalDesign( // 设置当前实例为静态指针 s_pCurrentInstance = this; - m_pResultWellGroup = nullptr; + m_pModelAndResultGroup = nullptr; m_pResultWellCombo = nullptr; - m_pCurrentModelGroup = nullptr; m_pCurrentModelCombo = nullptr; m_bFillingResultWellCombo = false; m_bFillingCurrentModelCombo = false; @@ -127,8 +126,7 @@ nmWxNumericalDesign::nmWxNumericalDesign( // 初始化所有UI组件 initMainOptionsGroup(); // 初始化主选项组 - initResultWellGroup(); - initCurrentModelGroup(); + initModelAndResultGroup(); initOutputGroup(); // 初始化输出组 (新) initAdvancedGroup(); // 初始化高级组 (新) initTimeSteppingGroup(); // 初始化时间步进组 @@ -138,8 +136,7 @@ nmWxNumericalDesign::nmWxNumericalDesign( // 将各个组添加到滚动区域的布局中 pScrollLayout->addWidget(m_pMainOptionsGroup); - pScrollLayout->addWidget(m_pResultWellGroup); - pScrollLayout->addWidget(m_pCurrentModelGroup); + pScrollLayout->addWidget(m_pModelAndResultGroup); pScrollLayout->addWidget(m_pOutputGroup); pScrollLayout->addWidget(m_pAdvancedGroup); pScrollLayout->addWidget(m_pTimeSteppingGroup); @@ -250,43 +247,47 @@ void nmWxNumericalDesign::notifyResultWellSelectorChanged(const QString& wellNam s_pCurrentInstance->fillResultWellCombo(wellName); } -// 初始化查看井结果切换控件 -void nmWxNumericalDesign::initResultWellGroup() +// 初始化模型与结果切换控件 +void nmWxNumericalDesign::initModelAndResultGroup() { - m_pResultWellGroup = new QGroupBox(tr("View well result"), this); - QGridLayout* pGridLayout = new QGridLayout(m_pResultWellGroup); - - QLabel* pCurrentWellLabel = new QLabel(tr("Current well:"), this); - m_pResultWellCombo = new QComboBox(this); - fillResultWellCombo(); - - pGridLayout->addWidget(pCurrentWellLabel, 0, 0, Qt::AlignLeft); - pGridLayout->addWidget(m_pResultWellCombo, 0, 1); - pGridLayout->setColumnStretch(0, 0); - pGridLayout->setColumnStretch(1, 1); - - m_pResultWellGroup->setLayout(pGridLayout); - m_pResultWellGroup->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); -} - -// 初始化当前模型切换控件 -void nmWxNumericalDesign::initCurrentModelGroup() -{ - m_pCurrentModelGroup = new QGroupBox(tr("Model selection"), this); - QGridLayout* pGridLayout = new QGridLayout(m_pCurrentModelGroup); - - QLabel* pCurrentModelLabel = new QLabel(tr("Current model:"), this); - m_pCurrentModelCombo = new QComboBox(this); + m_pModelAndResultGroup = new QGroupBox(tr("Model and result"), this); + QGridLayout* pGridLayout = new QGridLayout(m_pModelAndResultGroup); + pGridLayout->setContentsMargins(8, 15, 8, 10); + pGridLayout->setHorizontalSpacing(6); + pGridLayout->setVerticalSpacing(6); + + QLabel* pCurrentModelLabel = new QLabel( + tr("Current model"), m_pModelAndResultGroup); + QLabel* pCurrentWellLabel = new QLabel( + tr("Current well"), m_pModelAndResultGroup); + pCurrentModelLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter); + pCurrentWellLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter); + + m_pCurrentModelCombo = new QComboBox(m_pModelAndResultGroup); + m_pResultWellCombo = new QComboBox(m_pModelAndResultGroup); + QList listCombos; + listCombos << m_pCurrentModelCombo << m_pResultWellCombo; + for(int nIndex = 0; nIndex < listCombos.size(); ++nIndex) { + listCombos[nIndex]->setFixedHeight(nmParameterField::editorHeight()); + listCombos[nIndex]->setMinimumWidth( + nmParameterField::editorMinimumWidth()); + listCombos[nIndex]->setSizePolicy( + QSizePolicy::Expanding, QSizePolicy::Fixed); + } + // 按当前成果回填模型和结果井 updateCurrentModelDisplay(); + fillResultWellCombo(); - pGridLayout->addWidget(pCurrentModelLabel, 0, 0, Qt::AlignLeft); + pGridLayout->addWidget(pCurrentModelLabel, 0, 0); pGridLayout->addWidget(m_pCurrentModelCombo, 0, 1); + pGridLayout->addWidget(pCurrentWellLabel, 1, 0); + pGridLayout->addWidget(m_pResultWellCombo, 1, 1); pGridLayout->setColumnStretch(0, 0); pGridLayout->setColumnStretch(1, 1); - m_pCurrentModelGroup->setLayout(pGridLayout); - m_pCurrentModelGroup->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + m_pModelAndResultGroup->setSizePolicy( + QSizePolicy::Expanding, QSizePolicy::Preferred); } // 按当前成果对应的数据管理器刷新模型下拉框选中项 @@ -404,6 +405,9 @@ void nmWxNumericalDesign::initMainOptionsGroup() { m_pMainOptionsGroup = new QGroupBox(tr("Main options"), this); QGridLayout* pGridLayout = new QGridLayout(m_pMainOptionsGroup); // 使用 QGridLayout + pGridLayout->setContentsMargins(8, 15, 8, 10); + pGridLayout->setHorizontalSpacing(6); + pGridLayout->setVerticalSpacing(6); // 第一行: Include other wells + Gear Icon (左侧), Reset from diagnostic (右侧) m_pIncludeOtherWellsCheck = new QCheckBox(tr("Include other wells"), this); @@ -414,7 +418,9 @@ void nmWxNumericalDesign::initMainOptionsGroup() m_pOptionsGearButton->setEnabled(m_pIncludeOtherWellsCheck->isChecked()); m_pResetDiagnosticButton = new QPushButton(tr("Reset from diagnostic"), this); - m_pResetDiagnosticButton->setFixedWidth(150); + m_pResetDiagnosticButton->setFixedHeight(nmParameterField::editorHeight()); + m_pResetDiagnosticButton->setSizePolicy( + QSizePolicy::Expanding, QSizePolicy::Fixed); // 为左侧的复选框和齿轮创建一个QHBoxLayout,以便它们可以紧密排列 QHBoxLayout* pIncludeWellsLayout = new QHBoxLayout(); @@ -423,17 +429,19 @@ void nmWxNumericalDesign::initMainOptionsGroup() pIncludeWellsLayout->addStretch(); // 将它们推到左侧 pGridLayout->addLayout(pIncludeWellsLayout, 0, 0, Qt::AlignLeft); // 第0行,第0列,左对齐 - pGridLayout->addWidget(m_pResetDiagnosticButton, 0, 1, Qt::AlignLeft); // 第0行,第1列,左对齐 + pGridLayout->addWidget(m_pResetDiagnosticButton, 0, 1); // 第二行: Impose pi (左侧), Reset from analytical (右侧) m_pImposePiCheck = new QCheckBox(tr("Impose pi"), this); m_pImposePiCheck->setChecked(true); // 默认选中 m_pResetAnalyticalButton = new QPushButton(tr("Reset from analytical"), this); - m_pResetAnalyticalButton->setFixedWidth(150); + m_pResetAnalyticalButton->setFixedHeight(nmParameterField::editorHeight()); + m_pResetAnalyticalButton->setSizePolicy( + QSizePolicy::Expanding, QSizePolicy::Fixed); pGridLayout->addWidget(m_pImposePiCheck, 1, 0, Qt::AlignLeft); // 第1行,第0列,左对齐 - pGridLayout->addWidget(m_pResetAnalyticalButton, 1, 1, Qt::AlignLeft); // 第1行,第1列,左对齐 + pGridLayout->addWidget(m_pResetAnalyticalButton, 1, 1); // 第三行: Show average pressure (左侧), 右侧留空 m_pShowAveragePressureCheck = new QCheckBox(tr("Show average pressure"), this); @@ -654,10 +662,13 @@ void nmWxNumericalDesign::initPebiSolverSettingsGroup() { m_pPebiSolverSettingsGroup = new QGroupBox(tr("Solver settings"), this); QGridLayout* pGridLayout = new QGridLayout(m_pPebiSolverSettingsGroup); + pGridLayout->setContentsMargins(8, 15, 8, 10); + pGridLayout->setHorizontalSpacing(6); + pGridLayout->setVerticalSpacing(6); - QLabel* pSolverTypeLabel = new QLabel(tr("Solver library:"), this); - QLabel* pOmpThreadsLabel = new QLabel(tr("OpenMP threads:"), this); - QLabel* pIluReuseStepsLabel = new QLabel(tr("ILU reuse steps:"), this); + QLabel* pSolverTypeLabel = new QLabel(tr("Solver library"), this); + QLabel* pOmpThreadsLabel = new QLabel(tr("OpenMP threads"), this); + QLabel* pIluReuseStepsLabel = new QLabel(tr("ILU reuse steps"), this); pSolverTypeLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter); pOmpThreadsLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter); pIluReuseStepsLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter); @@ -678,6 +689,22 @@ void nmWxNumericalDesign::initPebiSolverSettingsGroup() m_pPebiIluReuseStepsSpin = new QSpinBox(this); m_pPebiIluReuseStepsSpin->setRange(1, 100); + m_pPebiSolverTypeCombo->setFixedHeight(nmParameterField::editorHeight()); + m_pPebiOmpThreadsCombo->setFixedHeight(nmParameterField::editorHeight()); + m_pPebiIluReuseStepsSpin->setFixedHeight(nmParameterField::editorHeight()); + m_pPebiSolverTypeCombo->setMinimumWidth( + nmParameterField::editorMinimumWidth()); + m_pPebiOmpThreadsCombo->setMinimumWidth( + nmParameterField::editorMinimumWidth()); + m_pPebiIluReuseStepsSpin->setMinimumWidth( + nmParameterField::editorMinimumWidth()); + m_pPebiSolverTypeCombo->setSizePolicy( + QSizePolicy::Expanding, QSizePolicy::Fixed); + m_pPebiOmpThreadsCombo->setSizePolicy( + QSizePolicy::Expanding, QSizePolicy::Fixed); + m_pPebiIluReuseStepsSpin->setSizePolicy( + QSizePolicy::Expanding, QSizePolicy::Fixed); + pGridLayout->addWidget(pSolverTypeLabel, 0, 0); pGridLayout->addWidget(m_pPebiSolverTypeCombo, 0, 1); pGridLayout->addWidget(pOmpThreadsLabel, 1, 0);