fix(nmNum): 修复求解完成后PEBI网格数量显示为0

- 网格划分完成后、卸载DLL前保存getPEBInum返回值
- 求解完成弹框同时显示PEBI网格数量和求解耗时
- 更新中文翻译资源
develop
lh 16 hours ago
parent 0afcfaa6ca
commit 8b7f63f063

Binary file not shown.

@ -2440,8 +2440,10 @@ Reason: %1</source>
<translation></translation>
</message>
<message>
<source>Solve time: %1 ms</source>
<translation>%1 ms</translation>
<source>Grid count: %1
Solve time: %2 ms</source>
<translation>%1
%2 ms</translation>
</message>
</context>
<context>

@ -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;
};

@ -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")

@ -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<vtkUnstructuredGrid> nmCalculationPebiGrid::createPebiUnstructuredGrid(const HX_NWTM_GRID_OUTPUT1& P1)
{
vtkSmartPointer<vtkUnstructuredGrid> pUnstructuredGrid = vtkSmartPointer<vtkUnstructuredGrid>::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();

@ -2067,6 +2067,7 @@ void nmSubWndMain::on_solverTaskFinished(bool isSuccessed)
{
// 线程完成后清空两个持有点:当前窗口指针和全局运行中指针。
nmCalculationDllPebiSolverTask* pTask = qobject_cast<nmCalculationDllPebiSolverTask*>(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));
}
}

Loading…
Cancel
Save