diff --git a/Bin/Config/Lang/cn/nmNum_cn.qm b/Bin/Config/Lang/cn/nmNum_cn.qm
index 30a8be18..51dbc19b 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 4862a9ba..eb5e59ba 100644
--- a/Bin/Config/Lang/cn/nmNum_cn.ts
+++ b/Bin/Config/Lang/cn/nmNum_cn.ts
@@ -1056,6 +1056,38 @@ Reason: %1
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;