From 8b7f63f0638c7b57b8a1ec6907aa20238a40a21b Mon Sep 17 00:00:00 2001 From: lh <2334563547@qq.com> Date: Wed, 19 Aug 2026 10:59:51 +0800 Subject: [PATCH] =?UTF-8?q?fix(nmNum):=20=E4=BF=AE=E5=A4=8D=E6=B1=82?= =?UTF-8?q?=E8=A7=A3=E5=AE=8C=E6=88=90=E5=90=8EPEBI=E7=BD=91=E6=A0=BC?= =?UTF-8?q?=E6=95=B0=E9=87=8F=E6=98=BE=E7=A4=BA=E4=B8=BA0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 网格划分完成后、卸载DLL前保存getPEBInum返回值 - 求解完成弹框同时显示PEBI网格数量和求解耗时 - 更新中文翻译资源 --- Bin/Config/Lang/cn/nmNum_cn.qm | Bin 105290 -> 105317 bytes Bin/Config/Lang/cn/nmNum_cn.ts | 6 ++++-- .../nmCalculation/nmCalculationPebiGrid.h | 3 +++ .../nmCalculationDllPebiSolverTask.cpp | 5 ++--- .../nmCalculation/nmCalculationPebiGrid.cpp | 16 ++++++++++++++-- Src/nmNum/nmSubWnd/nmSubWndMain.cpp | 7 +++++-- 6 files changed, 28 insertions(+), 9 deletions(-) diff --git a/Bin/Config/Lang/cn/nmNum_cn.qm b/Bin/Config/Lang/cn/nmNum_cn.qm index c312675010f0ffdcbe810ad44d647a17ac6dd488..2bab4b7e6bb260232b34706ce9677953559ac5e7 100644 GIT binary patch delta 9016 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 求解完成 - Solve time: %1 ms - 本次求解耗时:%1 ms + Grid count: %1 +Solve time: %2 ms + 网格数量:%1 +本次求解耗时:%2 ms diff --git a/Include/nmNum/nmCalculation/nmCalculationPebiGrid.h b/Include/nmNum/nmCalculation/nmCalculationPebiGrid.h index 6ddb222..1f021b3 100644 --- a/Include/nmNum/nmCalculation/nmCalculationPebiGrid.h +++ b/Include/nmNum/nmCalculation/nmCalculationPebiGrid.h @@ -52,6 +52,8 @@ public: // 获取输出结果 HX_NWTM_GRID_OUTPUT1 getGridOutput1(); HX_NWTM_GRID_OUTPUT2 getGridOutput2(); + // 获取最近一次网格划分生成的PEBI网格数量 + int getPebiCount() const; private: // 静态对象 static nmCalculationPebiGrid* m_instance; @@ -62,6 +64,7 @@ private: HX_NWTM_GRID_OUTPUT2 p2; // 对应HX_NWTM_GRID_INPUT::GridControl double m_dGridControl; + int m_nPebiCount; }; diff --git a/Src/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.cpp b/Src/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.cpp index 61943ef..601ed8b 100644 --- a/Src/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.cpp +++ b/Src/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.cpp @@ -399,12 +399,11 @@ bool nmCalculationDllPebiSolverTask::execPebiMode() SetIntValueFunc setSolverType = (SetIntValueFunc)GetProcAddress(dll, "set_solvetype"); SetIntValueFunc setOmpThreads = (SetIntValueFunc)GetProcAddress(dll, "set_omp_threads"); SetIntValueFunc setIluReuseSteps = (SetIntValueFunc)GetProcAddress(dll, "set_ilu_reuse_steps"); - GetIntValueFunc getPebiCount = (GetIntValueFunc)GetProcAddress(dll, "getPEBInum"); GetIntValueFunc getSolveTime = (GetIntValueFunc)GetProcAddress(dll, "getsolvetime"); if(HX_NWTM_MODEL == nullptr || setSolverType == nullptr || setOmpThreads == nullptr || setIluReuseSteps == nullptr - || getPebiCount == nullptr || getSolveTime == nullptr) { + || getSolveTime == nullptr) { QString sLogMessage = "Failed to resolve PEBI solver configuration interface."; qWarning() << sLogMessage; zxLogInstance::getInstance()->writeLogF(sLogMessage); @@ -692,7 +691,7 @@ bool nmCalculationDllPebiSolverTask::execPebiMode() } HX_NWTM_MODEL(p1, p0, licensePathStd); - m_nPebiCount = getPebiCount(); + m_nPebiCount = pGridInstance->getPebiCount(); m_nSolveTimeMs = getSolveTime(); if(m_autoFitTargetWellName.isEmpty()) { QString sSolveLog = QString("PEBI count: %1, solve time: %2 ms") diff --git a/Src/nmNum/nmCalculation/nmCalculationPebiGrid.cpp b/Src/nmNum/nmCalculation/nmCalculationPebiGrid.cpp index 4f85c7e..4419f05 100644 --- a/Src/nmNum/nmCalculation/nmCalculationPebiGrid.cpp +++ b/Src/nmNum/nmCalculation/nmCalculationPebiGrid.cpp @@ -171,6 +171,7 @@ nmCalculationPebiGrid* nmCalculationPebiGrid::getInstance() } nmCalculationPebiGrid::nmCalculationPebiGrid() + : m_nPebiCount(-1) { // 默认值来自HX_NWTM_GRID_INPUT构造函数 m_dGridControl = p0.GridControl; @@ -223,6 +224,7 @@ void nmCalculationPebiGrid::clearGridData() p1 = HX_NWTM_GRID_OUTPUT1(); p2 = HX_NWTM_GRID_OUTPUT2(); m_dGridControl = p0.GridControl; + m_nPebiCount = -1; } void nmCalculationPebiGrid::logInputParameters(const HX_NWTM_GRID_INPUT& input) @@ -719,6 +721,11 @@ HX_NWTM_GRID_OUTPUT2 nmCalculationPebiGrid::getGridOutput2() return p2; } +int nmCalculationPebiGrid::getPebiCount() const +{ + return m_nPebiCount; +} + vtkSmartPointer nmCalculationPebiGrid::createPebiUnstructuredGrid(const HX_NWTM_GRID_OUTPUT1& P1) { vtkSmartPointer pUnstructuredGrid = vtkSmartPointer::New(); @@ -895,12 +902,13 @@ bool nmCalculationPebiGrid::generateOutputPara() // 定义函数指针类型 typedef void (*HX_NWTM_GRID_Func)(HX_NWTM_GRID_OUTPUT1&, HX_NWTM_GRID_OUTPUT2&, const HX_NWTM_GRID_INPUT&, std::string); + typedef int (*GetIntValueFunc)(); // ===== 调用网格生成器 ===== - typedef void (*HX_NWTM_GRID_Func)(HX_NWTM_GRID_OUTPUT1&, HX_NWTM_GRID_OUTPUT2&, const HX_NWTM_GRID_INPUT&, std::string); HX_NWTM_GRID_Func HX_NWTM_GRID = (HX_NWTM_GRID_Func)GetProcAddress(dll, "HX_NWTM_GRID"); + GetIntValueFunc getPebiCount = (GetIntValueFunc)GetProcAddress(dll, "getPEBInum"); - if(!HX_NWTM_GRID) { + if(!HX_NWTM_GRID || !getPebiCount) { DWORD error = GetLastError(); printf("Failed to resolve function. Error code: %lu\n", error); FreeLibrary(dll); @@ -912,6 +920,7 @@ bool nmCalculationPebiGrid::generateOutputPara() p0 = HX_NWTM_GRID_INPUT(); p1 = HX_NWTM_GRID_OUTPUT1(); p2 = HX_NWTM_GRID_OUTPUT2(); + m_nPebiCount = -1; // PEBI网格划分输入参数:GridControl来自界面 p0.GridControl = m_dGridControl; @@ -1177,6 +1186,9 @@ bool nmCalculationPebiGrid::generateOutputPara() HX_NWTM_GRID(p1, p2, p0, licensePathStd); + // getPEBInum的计数在HX_NWTM_GRID阶段生成,必须在卸载DLL前保存。 + m_nPebiCount = getPebiCount(); + } catch(const std::exception& e) { zxLogInstance::getInstance()->writeLogF(QString("C++ Exception: %1").arg(e.what())); logCurrentState(); diff --git a/Src/nmNum/nmSubWnd/nmSubWndMain.cpp b/Src/nmNum/nmSubWnd/nmSubWndMain.cpp index f543cb1..d7c7eb3 100644 --- a/Src/nmNum/nmSubWnd/nmSubWndMain.cpp +++ b/Src/nmNum/nmSubWnd/nmSubWndMain.cpp @@ -2067,6 +2067,7 @@ void nmSubWndMain::on_solverTaskFinished(bool isSuccessed) { // 线程完成后清空两个持有点:当前窗口指针和全局运行中指针。 nmCalculationDllPebiSolverTask* pTask = qobject_cast(sender()); + int nPebiCount = pTask != nullptr ? pTask->getPebiCount() : -1; int nSolveTimeMs = pTask != nullptr ? pTask->getSolveTimeMs() : -1; if(pTask == m_pSolverTask) { m_pSolverTask = nullptr; @@ -2079,9 +2080,11 @@ void nmSubWndMain::on_solverTaskFinished(bool isSuccessed) NM_Calculation_Result result = isSuccessed ? NM_Calculation_Result_Success : NM_Calculation_Result_Fail; this->on_calculationFinished(result); - if(isSuccessed && nSolveTimeMs >= 0) { + if(isSuccessed && nPebiCount >= 0 && nSolveTimeMs >= 0) { QMessageBox::information(this, tr("Solver completed"), - tr("Solve time: %1 ms").arg(nSolveTimeMs)); + tr("Grid count: %1\nSolve time: %2 ms") + .arg(nPebiCount) + .arg(nSolveTimeMs)); } }