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

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

Binary file not shown.

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

@ -52,6 +52,8 @@ public:
// 获取输出结果 // 获取输出结果
HX_NWTM_GRID_OUTPUT1 getGridOutput1(); HX_NWTM_GRID_OUTPUT1 getGridOutput1();
HX_NWTM_GRID_OUTPUT2 getGridOutput2(); HX_NWTM_GRID_OUTPUT2 getGridOutput2();
// 获取最近一次网格划分生成的PEBI网格数量
int getPebiCount() const;
private: private:
// 静态对象 // 静态对象
static nmCalculationPebiGrid* m_instance; static nmCalculationPebiGrid* m_instance;
@ -62,6 +64,7 @@ private:
HX_NWTM_GRID_OUTPUT2 p2; HX_NWTM_GRID_OUTPUT2 p2;
// 对应HX_NWTM_GRID_INPUT::GridControl // 对应HX_NWTM_GRID_INPUT::GridControl
double m_dGridControl; double m_dGridControl;
int m_nPebiCount;
}; };

@ -399,12 +399,11 @@ bool nmCalculationDllPebiSolverTask::execPebiMode()
SetIntValueFunc setSolverType = (SetIntValueFunc)GetProcAddress(dll, "set_solvetype"); SetIntValueFunc setSolverType = (SetIntValueFunc)GetProcAddress(dll, "set_solvetype");
SetIntValueFunc setOmpThreads = (SetIntValueFunc)GetProcAddress(dll, "set_omp_threads"); SetIntValueFunc setOmpThreads = (SetIntValueFunc)GetProcAddress(dll, "set_omp_threads");
SetIntValueFunc setIluReuseSteps = (SetIntValueFunc)GetProcAddress(dll, "set_ilu_reuse_steps"); SetIntValueFunc setIluReuseSteps = (SetIntValueFunc)GetProcAddress(dll, "set_ilu_reuse_steps");
GetIntValueFunc getPebiCount = (GetIntValueFunc)GetProcAddress(dll, "getPEBInum");
GetIntValueFunc getSolveTime = (GetIntValueFunc)GetProcAddress(dll, "getsolvetime"); GetIntValueFunc getSolveTime = (GetIntValueFunc)GetProcAddress(dll, "getsolvetime");
if(HX_NWTM_MODEL == nullptr || setSolverType == nullptr if(HX_NWTM_MODEL == nullptr || setSolverType == nullptr
|| setOmpThreads == nullptr || setIluReuseSteps == nullptr || setOmpThreads == nullptr || setIluReuseSteps == nullptr
|| getPebiCount == nullptr || getSolveTime == nullptr) { || getSolveTime == nullptr) {
QString sLogMessage = "Failed to resolve PEBI solver configuration interface."; QString sLogMessage = "Failed to resolve PEBI solver configuration interface.";
qWarning() << sLogMessage; qWarning() << sLogMessage;
zxLogInstance::getInstance()->writeLogF(sLogMessage); zxLogInstance::getInstance()->writeLogF(sLogMessage);
@ -692,7 +691,7 @@ bool nmCalculationDllPebiSolverTask::execPebiMode()
} }
HX_NWTM_MODEL(p1, p0, licensePathStd); HX_NWTM_MODEL(p1, p0, licensePathStd);
m_nPebiCount = getPebiCount(); m_nPebiCount = pGridInstance->getPebiCount();
m_nSolveTimeMs = getSolveTime(); m_nSolveTimeMs = getSolveTime();
if(m_autoFitTargetWellName.isEmpty()) { if(m_autoFitTargetWellName.isEmpty()) {
QString sSolveLog = QString("PEBI count: %1, solve time: %2 ms") QString sSolveLog = QString("PEBI count: %1, solve time: %2 ms")

@ -171,6 +171,7 @@ nmCalculationPebiGrid* nmCalculationPebiGrid::getInstance()
} }
nmCalculationPebiGrid::nmCalculationPebiGrid() nmCalculationPebiGrid::nmCalculationPebiGrid()
: m_nPebiCount(-1)
{ {
// 默认值来自HX_NWTM_GRID_INPUT构造函数 // 默认值来自HX_NWTM_GRID_INPUT构造函数
m_dGridControl = p0.GridControl; m_dGridControl = p0.GridControl;
@ -223,6 +224,7 @@ void nmCalculationPebiGrid::clearGridData()
p1 = HX_NWTM_GRID_OUTPUT1(); p1 = HX_NWTM_GRID_OUTPUT1();
p2 = HX_NWTM_GRID_OUTPUT2(); p2 = HX_NWTM_GRID_OUTPUT2();
m_dGridControl = p0.GridControl; m_dGridControl = p0.GridControl;
m_nPebiCount = -1;
} }
void nmCalculationPebiGrid::logInputParameters(const HX_NWTM_GRID_INPUT& input) void nmCalculationPebiGrid::logInputParameters(const HX_NWTM_GRID_INPUT& input)
@ -719,6 +721,11 @@ HX_NWTM_GRID_OUTPUT2 nmCalculationPebiGrid::getGridOutput2()
return p2; return p2;
} }
int nmCalculationPebiGrid::getPebiCount() const
{
return m_nPebiCount;
}
vtkSmartPointer<vtkUnstructuredGrid> nmCalculationPebiGrid::createPebiUnstructuredGrid(const HX_NWTM_GRID_OUTPUT1& P1) vtkSmartPointer<vtkUnstructuredGrid> nmCalculationPebiGrid::createPebiUnstructuredGrid(const HX_NWTM_GRID_OUTPUT1& P1)
{ {
vtkSmartPointer<vtkUnstructuredGrid> pUnstructuredGrid = vtkSmartPointer<vtkUnstructuredGrid>::New(); 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 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"); 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(); DWORD error = GetLastError();
printf("Failed to resolve function. Error code: %lu\n", error); printf("Failed to resolve function. Error code: %lu\n", error);
FreeLibrary(dll); FreeLibrary(dll);
@ -912,6 +920,7 @@ bool nmCalculationPebiGrid::generateOutputPara()
p0 = HX_NWTM_GRID_INPUT(); p0 = HX_NWTM_GRID_INPUT();
p1 = HX_NWTM_GRID_OUTPUT1(); p1 = HX_NWTM_GRID_OUTPUT1();
p2 = HX_NWTM_GRID_OUTPUT2(); p2 = HX_NWTM_GRID_OUTPUT2();
m_nPebiCount = -1;
// PEBI网格划分输入参数GridControl来自界面 // PEBI网格划分输入参数GridControl来自界面
p0.GridControl = m_dGridControl; p0.GridControl = m_dGridControl;
@ -1177,6 +1186,9 @@ bool nmCalculationPebiGrid::generateOutputPara()
HX_NWTM_GRID(p1, p2, p0, licensePathStd); HX_NWTM_GRID(p1, p2, p0, licensePathStd);
// getPEBInum的计数在HX_NWTM_GRID阶段生成必须在卸载DLL前保存。
m_nPebiCount = getPebiCount();
} catch(const std::exception& e) { } catch(const std::exception& e) {
zxLogInstance::getInstance()->writeLogF(QString("C++ Exception: %1").arg(e.what())); zxLogInstance::getInstance()->writeLogF(QString("C++ Exception: %1").arg(e.what()));
logCurrentState(); logCurrentState();

@ -2067,6 +2067,7 @@ void nmSubWndMain::on_solverTaskFinished(bool isSuccessed)
{ {
// 线程完成后清空两个持有点:当前窗口指针和全局运行中指针。 // 线程完成后清空两个持有点:当前窗口指针和全局运行中指针。
nmCalculationDllPebiSolverTask* pTask = qobject_cast<nmCalculationDllPebiSolverTask*>(sender()); nmCalculationDllPebiSolverTask* pTask = qobject_cast<nmCalculationDllPebiSolverTask*>(sender());
int nPebiCount = pTask != nullptr ? pTask->getPebiCount() : -1;
int nSolveTimeMs = pTask != nullptr ? pTask->getSolveTimeMs() : -1; int nSolveTimeMs = pTask != nullptr ? pTask->getSolveTimeMs() : -1;
if(pTask == m_pSolverTask) { if(pTask == m_pSolverTask) {
m_pSolverTask = nullptr; 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; NM_Calculation_Result result = isSuccessed ? NM_Calculation_Result_Success : NM_Calculation_Result_Fail;
this->on_calculationFinished(result); this->on_calculationFinished(result);
if(isSuccessed && nSolveTimeMs >= 0) { if(isSuccessed && nPebiCount >= 0 && nSolveTimeMs >= 0) {
QMessageBox::information(this, tr("Solver completed"), 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