diff --git a/Bin/Config/Lang/cn/nmNum_cn.qm b/Bin/Config/Lang/cn/nmNum_cn.qm
index ee2939dc..2df2b120 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 4f1c7e62..91c8795c 100644
--- a/Bin/Config/Lang/cn/nmNum_cn.ts
+++ b/Bin/Config/Lang/cn/nmNum_cn.ts
@@ -3551,10 +3551,8 @@ No valid error was returned; keep the last accepted result and reduce the step.<
求解已完成且结果已提交,但无法打开结果窗口。
- Grid count: %1
-Solve time: %2 ms
- 网格数量:%1
-本次求解耗时:%2 ms
+ Solve time: %1 ms
+ 本次求解耗时:%1 ms
diff --git a/Include/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.h b/Include/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.h
index 7f911e13..39f6857f 100644
--- a/Include/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.h
+++ b/Include/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.h
@@ -48,8 +48,6 @@ class NMCALCULATION_EXPORT nmCalculationDllPebiSolverTask : public QThread {
bool wasSuccessful() const;
/** @brief 获取本次DLL内部求解耗时,单位为毫秒。 */
int getSolveTimeMs() const;
- /** @brief 获取本次求解的PEBI网格数量。 */
- int getPebiCount() const;
/** @brief 返回当前代码已识别的失败原因;成功或主动停止时为空。 */
QString getFailureReason() const;
/** @brief 请求协作式停止;DLL 正在执行时会在返回后丢弃结果。 */
@@ -138,8 +136,6 @@ class NMCALCULATION_EXPORT nmCalculationDllPebiSolverTask : public QThread {
bool m_lastRunSucceeded; ///< run() 保存的执行状态,供等待线程安全读取。
/** @brief 本次DLL内部求解耗时,单位为毫秒。 */
int m_nSolveTimeMs;
- /** @brief 本次求解的PEBI网格数量。 */
- int m_nPebiCount;
QString m_sFailureReason; ///< 当前代码已识别的首个失败原因。
QString m_sAutoFitTargetWellCode; ///< 自动拟合目标井 WellCode;空值表示保存完整结果。
QVector > m_autoFitResultPressure; ///< 目标井原始压力结果。
diff --git a/Include/nmNum/nmCalculation/nmCalculationPebiGrid.h b/Include/nmNum/nmCalculation/nmCalculationPebiGrid.h
index 35cee7e9..34dad3f4 100644
--- a/Include/nmNum/nmCalculation/nmCalculationPebiGrid.h
+++ b/Include/nmNum/nmCalculation/nmCalculationPebiGrid.h
@@ -113,7 +113,6 @@ struct nmPebiGridResult
/** @brief 创建空结果;只有 m_bSucceeded 为 true 时才允许提交。 */
nmPebiGridResult()
: m_pUnstructuredGrid(nullptr),
- m_nPebiCount(-1),
m_bSucceeded(false)
{
}
@@ -121,7 +120,6 @@ struct nmPebiGridResult
HX_NWTM_GRID_OUTPUT1 m_oGridOutput1; ///< 网格 DLL 主输出。
HX_NWTM_GRID_OUTPUT2 m_oGridOutput2; ///< 网格 DLL 辅助输出。
vtkSmartPointer m_pUnstructuredGrid; ///< 局部构造的 VTK 网格。
- int m_nPebiCount; ///< DLL 返回的 PEBI 单元数量。
bool m_bSucceeded; ///< DLL 和 VTK 转换是否全部成功。
};
@@ -209,7 +207,6 @@ public:
quint64 nGridInputRevision,
HX_NWTM_GRID_OUTPUT1& oGridOutput1,
HX_NWTM_GRID_OUTPUT2& oGridOutput2,
- int& nPebiCount,
const QAtomicInt* pCancelRequested = NULL) const;
/** @brief 主线程快速判断缓存归属和版本,不复制大型 DLL 输出。 */
bool isCurrentGridAvailableFor(const nmDataAnalyzeManager* pDataManager,
@@ -220,8 +217,6 @@ public:
HX_NWTM_GRID_OUTPUT1 getGridOutput1();
/** @brief 在线程锁保护下返回最近一次网格输出 p2 的副本。 */
HX_NWTM_GRID_OUTPUT2 getGridOutput2();
- /** @brief 返回最近一次网格划分生成的 PEBI 单元数量。 */
- int getPebiCount() const;
private:
static nmCalculationPebiGrid* m_instance; ///< 进程内共享的 PEBI 网格服务实例。
@@ -229,7 +224,6 @@ private:
HX_NWTM_GRID_OUTPUT1 p1; ///< 最近一次网格 DLL 主输出。
HX_NWTM_GRID_OUTPUT2 p2; ///< 最近一次网格 DLL 辅助输出。
double m_dGridControl; ///< 对应 HX_NWTM_GRID_INPUT::GridControl。
- int m_nPebiCount; ///< 最近一次成功网格的单元数量,未生成时为 -1。
quint64 m_nCachedGridInputRevision; ///< 单例 DLL 输出对应的网格输入版本。
/** @brief 当前单例缓存所属的数据管理器,不拥有对象。 */
nmDataAnalyzeManager* m_pDataManager;
diff --git a/Include/nmNum/nmSubWnd/nmSubWndMain.h b/Include/nmNum/nmSubWnd/nmSubWndMain.h
index 99ecc766..14d0261f 100644
--- a/Include/nmNum/nmSubWnd/nmSubWndMain.h
+++ b/Include/nmNum/nmSubWnd/nmSubWndMain.h
@@ -255,11 +255,9 @@ class NM_SUB_WND_EXPORT nmSubWndMain : public iSubWndBaseFit {
void schedulePendingResultWidgets();
// 根据结果页面是否准备成功显示本次求解的最终提示。
void showSolverResultCompletion(bool bResultWindowReady,
- int nPebiCount,
int nSolveTimeMs);
// 先隐藏求解进度框,再排队处理结果界面。
void scheduleSolverResultCompletion(bool bSucceeded,
- int nPebiCount,
int nSolveTimeMs,
bool bInputChanged,
const QString& sFailureReason);
@@ -312,13 +310,11 @@ private:
bool m_bPendingResultWidgetRefresh; ///< 正在等待下一轮事件填充首次结果页面。
bool m_bPendingResultCompletionMessage; ///< 首次页面填充后再显示求解结果提示。
bool m_bPendingResultWindowReady; ///< 延迟填充是否成功创建全部结果页面。
- int m_nPendingResultPebiCount; ///< 延迟提示所需的网格数量。
int m_nPendingResultSolveTimeMs; ///< 延迟提示所需的求解耗时。
bool m_bSolverResultCompletionPending; ///< 等待进度框隐藏后处理求解结果。
bool m_bPendingSolverSucceeded; ///< 待处理求解结果是否成功。
bool m_bPendingSolverInputChanged; ///< 输入变化导致本次旧结果被丢弃。
QString m_sPendingSolverFailureReason; ///< 当前代码已识别的待显示失败原因。
- int m_nPendingSolverPebiCount; ///< 待显示的网格数量。
int m_nPendingSolverTimeMs; ///< 待显示的求解耗时。
bool m_bSolverStartPending; ///< 进度框已显示,输入正分批捕获或任务等待启动。
bool m_bSolverCancelRequested; ///< 已向当前任务发送停止请求,忽略后续阶段信号。
diff --git a/Src/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.cpp b/Src/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.cpp
index 5893bbe1..0e218453 100644
--- a/Src/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.cpp
+++ b/Src/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.cpp
@@ -618,7 +618,6 @@ nmCalculationDllPebiSolverTask::nmCalculationDllPebiSolverTask(
m_nResultInputRevision(0),
m_lastRunSucceeded(false),
m_nSolveTimeMs(-1),
- m_nPebiCount(-1),
m_dPendingScalarMin(0.0),
m_dPendingScalarMax(0.0),
m_bPendingFullResultReady(false),
@@ -671,7 +670,6 @@ nmCalculationDllPebiSolverTask::~nmCalculationDllPebiSolverTask()
void nmCalculationDllPebiSolverTask::run()
{
m_nSolveTimeMs = -1;
- m_nPebiCount = -1;
bool bSucceeded = false;
try {
bSucceeded = this->execute();
@@ -1107,15 +1105,12 @@ bool nmCalculationDllPebiSolverTask::captureInputSnapshot(
m_pInputSnapshot->m_bMayUseCachedGrid) {
HX_NWTM_GRID_OUTPUT1 oGridOutput1;
HX_NWTM_GRID_OUTPUT2 oGridOutput2;
- int nPebiCount = -1;
if(pGridService->copyCurrentGridFor(m_pDataManager,
m_nGridInputRevision,
oGridOutput1,
- oGridOutput2,
- nPebiCount)) {
+ oGridOutput2)) {
m_pInputSnapshot->m_oGridResult.m_oGridOutput1 = oGridOutput1;
m_pInputSnapshot->m_oGridResult.m_oGridOutput2 = oGridOutput2;
- m_pInputSnapshot->m_oGridResult.m_nPebiCount = nPebiCount;
m_pInputSnapshot->m_oGridResult.m_bSucceeded = true;
} else {
m_pInputSnapshot->m_bRequiresGridCalculation = true;
@@ -1159,7 +1154,6 @@ bool nmCalculationDllPebiSolverTask::prepareManualInput()
m_nGridInputRevision,
oGridResult.m_oGridOutput1,
oGridResult.m_oGridOutput2,
- oGridResult.m_nPebiCount,
&m_nCancelRequested)) {
oGridResult.m_bSucceeded = true;
@@ -1199,11 +1193,6 @@ int nmCalculationDllPebiSolverTask::getSolveTimeMs() const
return m_nSolveTimeMs;
}
-int nmCalculationDllPebiSolverTask::getPebiCount() const
-{
- return m_nPebiCount;
-}
-
QString nmCalculationDllPebiSolverTask::getFailureReason() const
{
return m_sFailureReason;
@@ -1419,7 +1408,6 @@ bool nmCalculationDllPebiSolverTask::execPebiMode()
oModelInput,
m_pInputSnapshot->m_oGridInput.m_sLicensePath
.toStdString());
- m_nPebiCount = oGridResult.m_nPebiCount;
m_nSolveTimeMs = pfnGetSolveTime();
} catch(const std::exception& e) {
qWarning() << QString("C++ Exception during HX_NWTM_MODEL call: %1")
diff --git a/Src/nmNum/nmCalculation/nmCalculationPebiGrid.cpp b/Src/nmNum/nmCalculation/nmCalculationPebiGrid.cpp
index bb27ec70..8eae36a1 100644
--- a/Src/nmNum/nmCalculation/nmCalculationPebiGrid.cpp
+++ b/Src/nmNum/nmCalculation/nmCalculationPebiGrid.cpp
@@ -287,8 +287,7 @@ nmCalculationPebiGrid* nmCalculationPebiGrid::getInstance()
}
nmCalculationPebiGrid::nmCalculationPebiGrid()
- : m_nPebiCount(-1),
- m_nCachedGridInputRevision(0),
+ : m_nCachedGridInputRevision(0),
m_pDataManager(nullptr)
{
// 默认值来自HX_NWTM_GRID_INPUT构造函数
@@ -343,7 +342,6 @@ void nmCalculationPebiGrid::clearGridData(
p1 = HX_NWTM_GRID_OUTPUT1();
p2 = HX_NWTM_GRID_OUTPUT2();
m_dGridControl = p0.GridControl;
- m_nPebiCount = -1;
m_nCachedGridInputRevision = 0;
m_pDataManager = nullptr;
}
@@ -353,7 +351,6 @@ bool nmCalculationPebiGrid::copyCurrentGridFor(
quint64 nGridInputRevision,
HX_NWTM_GRID_OUTPUT1& oGridOutput1,
HX_NWTM_GRID_OUTPUT2& oGridOutput2,
- int& nPebiCount,
const QAtomicInt* pCancelRequested) const
{
nmInterruptibleMutexLocker oGridLocker;
@@ -378,7 +375,6 @@ bool nmCalculationPebiGrid::copyCurrentGridFor(
return false;
}
oGridOutput2 = p2;
- nPebiCount = m_nPebiCount;
return true;
}
@@ -927,12 +923,6 @@ HX_NWTM_GRID_OUTPUT2 nmCalculationPebiGrid::getGridOutput2()
return p2;
}
-int nmCalculationPebiGrid::getPebiCount() const
-{
- QMutexLocker oLocker(&s_oPebiGridMutex);
- return m_nPebiCount;
-}
-
vtkSmartPointer nmCalculationPebiGrid::createPebiUnstructuredGrid(
const HX_NWTM_GRID_OUTPUT1& P1,
const QAtomicInt* pCancelRequested)
@@ -1862,15 +1852,10 @@ bool nmCalculationPebiGrid::calculateSnapshot(
return false;
}
- typedef int (*GetIntValueFunc)();
-
HX_NWTM_GRID_Func pfnGenerateGrid =
reinterpret_cast(
GetProcAddress(hGridModule, "HX_NWTM_GRID"));
- GetIntValueFunc pfnGetPebiCount =
- reinterpret_cast(
- GetProcAddress(hGridModule, "getPEBInum"));
- if(pfnGenerateGrid == nullptr || pfnGetPebiCount == nullptr) {
+ if(pfnGenerateGrid == nullptr) {
qWarning() << "Failed to resolve HX_NWTM grid functions. Error code:"
<< GetLastError();
FreeLibrary(hGridModule);
@@ -1892,7 +1877,6 @@ bool nmCalculationPebiGrid::calculateSnapshot(
return false;
}
nmCalculationUtils::cleanupPebiGridDebugFiles();
- oResult.m_nPebiCount = pfnGetPebiCount();
// 后续 VTK 构造只读取本次局部输出,无需继续占用进程级 DLL 锁。
FreeLibrary(hGridModule);
@@ -1949,7 +1933,6 @@ void nmCalculationPebiGrid::commitOutputCache(
p1 = oResult.m_oGridOutput1;
p2 = oResult.m_oGridOutput2;
m_dGridControl = oSnapshot.m_oGridInput.GridControl;
- m_nPebiCount = oResult.m_nPebiCount;
m_nCachedGridInputRevision = oSnapshot.m_nGridInputRevision;
m_pDataManager = pDataManager;
}
diff --git a/Src/nmNum/nmSubWnd/nmSubWndMain.cpp b/Src/nmNum/nmSubWnd/nmSubWndMain.cpp
index d4cbb02d..a733cc10 100644
--- a/Src/nmNum/nmSubWnd/nmSubWndMain.cpp
+++ b/Src/nmNum/nmSubWnd/nmSubWndMain.cpp
@@ -157,12 +157,10 @@ nmSubWndMain::nmSubWndMain(QWidget *parent, QString sExt) :
m_bPendingResultWidgetRefresh = false;
m_bPendingResultCompletionMessage = false;
m_bPendingResultWindowReady = false;
- m_nPendingResultPebiCount = -1;
m_nPendingResultSolveTimeMs = -1;
m_bSolverResultCompletionPending = false;
m_bPendingSolverSucceeded = false;
m_bPendingSolverInputChanged = false;
- m_nPendingSolverPebiCount = -1;
m_nPendingSolverTimeMs = -1;
m_bSolverStartPending = false;
m_bSolverCancelRequested = false;
@@ -1881,7 +1879,6 @@ void nmSubWndMain::continueSolverInputCapture()
m_pSolverFitting = nullptr;
} else {
scheduleSolverResultCompletion(false,
- -1,
-1,
bInputChanged,
sFailureReason);
@@ -2089,7 +2086,6 @@ bool nmSubWndMain::mergeAnaResultToFitting()
m_pPendingResultFitting = nullptr;
m_bPendingResultCompletionMessage = false;
m_bPendingResultWindowReady = false;
- m_nPendingResultPebiCount = -1;
m_nPendingResultSolveTimeMs = -1;
if(pInstance->getGridType() == NM_Grid_PEBI) {
@@ -2186,14 +2182,11 @@ void nmSubWndMain::showPendingSolverResultCompletion()
}
const bool bResultWindowReady = m_bPendingResultWindowReady;
- const int nPebiCount = m_nPendingResultPebiCount;
const int nSolveTimeMs = m_nPendingResultSolveTimeMs;
m_bPendingResultCompletionMessage = false;
m_bPendingResultWindowReady = false;
- m_nPendingResultPebiCount = -1;
m_nPendingResultSolveTimeMs = -1;
showSolverResultCompletion(bResultWindowReady,
- nPebiCount,
nSolveTimeMs);
}
@@ -2427,7 +2420,6 @@ bool nmSubWndMain::on_calculationFinished(
void nmSubWndMain::scheduleSolverResultCompletion(
bool bSucceeded,
- int nPebiCount,
int nSolveTimeMs,
bool bInputChanged,
const QString& sFailureReason)
@@ -2437,7 +2429,6 @@ void nmSubWndMain::scheduleSolverResultCompletion(
m_bPendingSolverSucceeded = bSucceeded;
m_bPendingSolverInputChanged = bInputChanged;
m_sPendingSolverFailureReason = sFailureReason;
- m_nPendingSolverPebiCount = nPebiCount;
m_nPendingSolverTimeMs = nSolveTimeMs;
// 当前完成信号栈只登记后续工作;隐藏和结果刷新各占一轮独立事件。
@@ -2461,13 +2452,11 @@ void nmSubWndMain::completePendingSolverResult()
const bool bSucceeded = m_bPendingSolverSucceeded;
const bool bInputChanged = m_bPendingSolverInputChanged;
const QString sFailureReason = m_sPendingSolverFailureReason;
- const int nPebiCount = m_nPendingSolverPebiCount;
const int nSolveTimeMs = m_nPendingSolverTimeMs;
m_bSolverResultCompletionPending = false;
m_bPendingSolverSucceeded = false;
m_bPendingSolverInputChanged = false;
m_sPendingSolverFailureReason.clear();
- m_nPendingSolverPebiCount = -1;
m_nPendingSolverTimeMs = -1;
bool bResultWindowReady = false;
@@ -2494,11 +2483,9 @@ void nmSubWndMain::completePendingSolverResult()
m_bPendingResultWidgetRefresh) {
// 首次结果页尚未填充,最终提示必须等页面真实创建结果返回后再显示。
m_bPendingResultCompletionMessage = true;
- m_nPendingResultPebiCount = nPebiCount;
m_nPendingResultSolveTimeMs = nSolveTimeMs;
} else if(bSucceeded) {
showSolverResultCompletion(bResultWindowReady,
- nPebiCount,
nSolveTimeMs);
}
@@ -2511,14 +2498,21 @@ void nmSubWndMain::completePendingSolverResult()
void nmSubWndMain::showSolverResultCompletion(
bool bResultWindowReady,
- int nPebiCount,
int nSolveTimeMs)
{
- if(bResultWindowReady && nPebiCount >= 0 && nSolveTimeMs >= 0) {
- QMessageBox::information(this, tr("Solver completed"),
- tr("Grid count: %1\nSolve time: %2 ms")
- .arg(nPebiCount)
- .arg(nSolveTimeMs));
+ // 完成提示只显示 DLL 返回的本次求解耗时。
+ if(bResultWindowReady && nSolveTimeMs >= 0) {
+ QMessageBox oMessageBox(QMessageBox::Information, tr("Solver completed"),
+ tr("Solve time: %1 ms").arg(nSolveTimeMs),
+ QMessageBox::Ok, this);
+ // 单行耗时在提示区域水平、垂直居中,与左侧图标对齐。
+ QLabel* pMessageLabel = oMessageBox.findChild("qt_msgbox_label");
+ if(pMessageLabel != nullptr) {
+ pMessageLabel->setAlignment(Qt::AlignCenter);
+ pMessageLabel->setMinimumHeight(
+ oMessageBox.iconPixmap().height());
+ }
+ oMessageBox.exec();
} else if(!bResultWindowReady) {
QMessageBox::warning(
this,
@@ -2536,7 +2530,6 @@ void nmSubWndMain::on_solverTaskFinished(bool isSuccessed)
return;
}
- int nPebiCount = pTask != nullptr ? pTask->getPebiCount() : -1;
int nSolveTimeMs = pTask != nullptr ? pTask->getSolveTimeMs() : -1;
const bool bCancelled = pTask->wasCancelled();
QString sFailureReason = pTask->getFailureReason();
@@ -2575,7 +2568,6 @@ void nmSubWndMain::on_solverTaskFinished(bool isSuccessed)
m_bSolverCancelRequested = false;
} else {
scheduleSolverResultCompletion(isSuccessed,
- nPebiCount,
nSolveTimeMs,
bInputChanged,
sFailureReason);