From 8f4e35a3ed0e18b1541a4498e46695d509a1c1f6 Mon Sep 17 00:00:00 2001 From: lvjunjie Date: Mon, 14 Sep 2026 14:51:29 +0800 Subject: [PATCH] =?UTF-8?q?fix(nmNum):=20=E8=A1=A5=E9=BD=90=20LM=20?= =?UTF-8?q?=E6=8B=9F=E5=90=88=E7=BF=BB=E8=AF=91=E5=B9=B6=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E5=88=86=E6=AE=B5=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bin/Config/Lang/cn/nmNum_cn.qm | Bin 136405 -> 138399 bytes Bin/Config/Lang/cn/nmNum_cn.ts | 40 ++++++++++++++++ .../nmCalculation/nmCalculationAutoFitLM.h | 1 - .../nmCalculation/nmCalculationAutoFitLM.cpp | 44 ++++-------------- 4 files changed, 48 insertions(+), 37 deletions(-) diff --git a/Bin/Config/Lang/cn/nmNum_cn.qm b/Bin/Config/Lang/cn/nmNum_cn.qm index 30a8be18632d1cf6ac0e9de5370fdf048e805596..51dbc19b2f2f673ed3f3c215aeaaf4f29008ef77 100644 GIT binary patch delta 14208 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 delta 13126 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 kv~kTQ7IH^uza)TY$TXqbQ)v14>Vm^+ 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 Unknown reason 未知原因 + + Failed to load configuration from data manager + 从数据管理器加载配置失败 + + + Auto fitting is already running + 自动拟合正在运行 + + + No parameters enabled for optimization + 未启用任何优化参数 + + + Target LogLog data is empty or insufficient + 目标双对数数据为空或不足 + + + Target LogLog data arrays have inconsistent sizes + 目标双对数数据数组长度不一致 + + + Failed to apply final parameters: %1 + 应用最终参数失败:%1 + + + Failed to apply final parameters due to unknown error + 应用最终参数时发生未知错误 + + + Target well name is empty + 目标井名称为空 + nmCalculationSolver @@ -4017,6 +4049,14 @@ Supported types: Vertical, Vertical Fractured, and Horizontal Multi-Fractured We The minimum value of %1 must be greater than zero for automatic fitting. 自动拟合时,%1 的最小值和初始值必须大于零。 + + Data manager is unavailable! + 数据管理器不可用! + + + Gas pseudo-pressure data is unavailable or invalid. + 气体拟压力数据不可用或无效。 + nmWxAutomaticfitting diff --git a/Include/nmNum/nmCalculation/nmCalculationAutoFitLM.h b/Include/nmNum/nmCalculation/nmCalculationAutoFitLM.h index bcded5f3..deff5329 100644 --- a/Include/nmNum/nmCalculation/nmCalculationAutoFitLM.h +++ b/Include/nmNum/nmCalculation/nmCalculationAutoFitLM.h @@ -155,7 +155,6 @@ private: const AutoFitObjectiveBreakdownLM* objectiveBreakdown = nullptr); QVector buildTraceParameterVector(const QVector& selectedParameters) const; void emitRunSummary(bool success, StopReasonLM finalReason); - void emitTimeWindowDiagnostics(const AutoFitObjectiveBreakdownLM& breakdown); bool validateParameters(const QVector& parameters) const; bool validateLogLogData(const QVector >& logLogData) const; diff --git a/Src/nmNum/nmCalculation/nmCalculationAutoFitLM.cpp b/Src/nmNum/nmCalculation/nmCalculationAutoFitLM.cpp index 0cd0045f..c892d6de 100644 --- a/Src/nmNum/nmCalculation/nmCalculationAutoFitLM.cpp +++ b/Src/nmNum/nmCalculation/nmCalculationAutoFitLM.cpp @@ -981,7 +981,6 @@ void nmCalculationAutoFitLM::emitRunSummary(bool success, StopReasonLM finalReas .arg(m_totalEvaluations) .arg(m_successfulEvaluations) .arg(m_totalEvaluations - m_successfulEvaluations)); - emitTimeWindowDiagnostics(m_globalBestObjectiveBreakdown); if(!m_traceFilePath.isEmpty()) { emit logMessageGenerated(tr("Artifacts: trace=%1").arg(m_traceFilePath)); @@ -991,26 +990,6 @@ void nmCalculationAutoFitLM::emitRunSummary(bool success, StopReasonLM finalReas } } -void nmCalculationAutoFitLM::emitTimeWindowDiagnostics( - const AutoFitObjectiveBreakdownLM& breakdown) -{ - // 只汇报有效工作点;能量占比说明各时间段对全局误差的贡献。 - if(!breakdown.valid) { - return; - } - const double totalEnergy = breakdown.total * breakdown.total; - for(int k = 0; k < breakdown.timeWindows.size(); ++k) { - const AutoFitTimeWindowLM& window = breakdown.timeWindows[k]; - const double percentage = totalEnergy > 0.0 - ? 100.0 * window.energy / totalEnergy : 0.0; - emit logMessageGenerated( - tr("Time window %1 [%2, %3]: RMS=%4, energy=%5 (%6%)") - .arg(k + 1).arg(window.timeMin, 0, 'g', 6) - .arg(window.timeMax, 0, 'g', 6).arg(window.rmsError, 0, 'e', 4) - .arg(window.energy, 0, 'e', 4).arg(percentage, 0, 'f', 1)); - } -} - QVector nmCalculationAutoFitLM::buildTraceParameterVector(const QVector& selectedParameters) const { // 将 LM 内部使用的“启用参数向量”还原成完整 7 维参数向量。 @@ -1077,7 +1056,7 @@ bool nmCalculationAutoFitLM::loadAllConfigFromDataManager() extractUserInitialValues(); // 直接提取初始值,无需条件判断 return true; } catch(...) { - m_lastError = "Failed to load configuration from data manager"; + m_lastError = tr("Failed to load configuration from data manager"); return false; } } @@ -1160,7 +1139,7 @@ bool nmCalculationAutoFitLM::startAutoFitting() StopReasonLM finalReason = LM_CONTINUE_OPTIMIZATION; if(m_isRunning) { - m_lastError = "Auto fitting is already running"; + m_lastError = tr("Auto fitting is already running"); return false; } @@ -1175,26 +1154,26 @@ bool nmCalculationAutoFitLM::startAutoFitting() emit logMessageGenerated(tr("Enabled parameters count: %1").arg(enabledParams)); if(enabledParams == 0) { - m_lastError = "No parameters enabled for optimization"; + m_lastError = tr("No parameters enabled for optimization"); emit logMessageGenerated(tr("ERROR: No parameters enabled for optimization")); return false; } if(m_targetLogLogData.size() < 3) { - m_lastError = "Target LogLog data is empty or insufficient"; + m_lastError = tr("Target LogLog data is empty or insufficient"); emit logMessageGenerated(tr("ERROR: Target LogLog data is empty or insufficient")); return false; } if(m_targetLogLogData[0].size() != m_targetLogLogData[1].size() || m_targetLogLogData[0].size() != m_targetLogLogData[2].size()) { - m_lastError = "Target LogLog data arrays have inconsistent sizes"; + m_lastError = tr("Target LogLog data arrays have inconsistent sizes"); emit logMessageGenerated(tr("ERROR: Target LogLog data arrays have inconsistent sizes")); return false; } if(m_targetWellName.isEmpty()) { - m_lastError = "Target well name is empty"; + m_lastError = tr("Target well name is empty"); emit logMessageGenerated(tr("ERROR: Target well name is empty")); return false; } @@ -1258,7 +1237,6 @@ bool nmCalculationAutoFitLM::startAutoFitting() m_globalBestLogLogData, 0, m_globalBestFitness); - emitTimeWindowDiagnostics(m_globalBestObjectiveBreakdown); } else { m_hasValidUserSolution = false; emit logMessageGenerated(tr("Initial solution evaluation failed")); @@ -1388,12 +1366,12 @@ bool nmCalculationAutoFitLM::startAutoFitting() } } catch(const std::exception& e) { finalFullSolverSucceeded = false; - m_lastError = QString("Failed to apply final parameters: %1").arg(e.what()); + m_lastError = tr("Failed to apply final parameters: %1").arg(e.what()); emit logMessageGenerated( tr("ERROR: Failed to apply final parameters: %1").arg(e.what())); } catch(...) { finalFullSolverSucceeded = false; - m_lastError = "Failed to apply final parameters due to unknown error"; + m_lastError = tr("Failed to apply final parameters due to unknown error"); emit logMessageGenerated( tr("ERROR: Unknown error applying final parameters")); } @@ -1683,7 +1661,6 @@ StopReasonLM nmCalculationAutoFitLM::runTrustRegionFitting() m_globalBestFitness = evaluation.fitness; m_globalBestObjectiveBreakdown = evaluation.breakdown; m_globalBestLogLogData = evaluation.curve; - emitTimeWindowDiagnostics(evaluation.breakdown); emit bestCurveUpdated(m_targetLogLogData, m_globalBestLogLogData, m_currentIteration + 1, @@ -3960,11 +3937,6 @@ double nmCalculationAutoFitLM::calculateLogLogCurveError( m_comparisonTimeMin = overlapMinX; m_comparisonTimeMax = overlapMaxX; writeTraceMetaFile(); - emit logMessageGenerated( - tr("Fixed LM comparison time range: [%1, %2]; %3 windows, %4% overlap") - .arg(overlapMinX, 0, 'g', 8).arg(overlapMaxX, 0, 'g', 8) - .arg(kAutoFitTimeWindowCount) - .arg(kAutoFitTimeWindowOverlapRatio * 100.0, 0, 'f', 0)); } } m_lastObjectiveBreakdown = breakdown;