diff --git a/Bin/Config/Lang/cn/nmNum_cn.qm b/Bin/Config/Lang/cn/nmNum_cn.qm index a0b706a0..3cf81428 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 623ec74d..6759fa7a 100644 --- a/Bin/Config/Lang/cn/nmNum_cn.ts +++ b/Bin/Config/Lang/cn/nmNum_cn.ts @@ -1113,8 +1113,8 @@ Reason: %1 目标井名称为空 - LM stage 1: align curve height using permeability only (up to %1 evaluations). - LM 阶段一:仅调整渗透率对齐曲线高度(最多求解 %1 次)。 + LM stage 1: align curve height using permeability only; no fixed evaluation limit, effective improvement threshold 10%. + LM 阶段一:仅调整渗透率对齐曲线高度,不限制试算次数,有效改善门槛为 10%。 Permeability alignment: k=%1, height error=%2, shape error=%3, result=%4 @@ -1141,8 +1141,8 @@ Reason: %1 渗透率高度对齐结束:%1 - height evaluation budget reached - 达到高度调整求解预算 + no feasible permeability step or step too small + 无可行的渗透率调整步或步长过小 stopped by user diff --git a/Src/nmNum/nmCalculation/nmCalculationAutoFitLM.cpp b/Src/nmNum/nmCalculation/nmCalculationAutoFitLM.cpp index 55d8c7a6..e3f6579b 100644 --- a/Src/nmNum/nmCalculation/nmCalculationAutoFitLM.cpp +++ b/Src/nmNum/nmCalculation/nmCalculationAutoFitLM.cpp @@ -2087,15 +2087,14 @@ StopReasonLM nmCalculationAutoFitLM::runTrustRegionFitting() // 高度预调整只改变用户勾选的渗透率。ln(k) 的初始变化由有符号高度差 // 给出,真实求解后用割线估计修正;拒绝时缩步,不让其他参数补偿高度。 const int permeabilityColumn = m_enabledParamIndices.indexOf(0); - const int heightBudget = qMin(4, qMax(0, (maximumEvaluations - m_totalEvaluations - dimensions - 2) / 6)); double heightBaseline = current.breakdown.verticalLoss; int heightStagnation = 0; double heightScale = 1.0; double heightSlope = -1.0; if(permeabilityColumn >= 0) { - emit logMessageGenerated(tr("LM stage 1: align curve height using permeability only (up to %1 evaluations).") - .arg(heightBudget)); - for(int trial = 0; trial < heightBudget && processPauseAndStop(); ++trial) { + emit logMessageGenerated(tr("LM stage 1: align curve height using permeability only; no fixed evaluation limit, effective improvement threshold 10%.")); + // 不限制试算次数,由高度对齐、改善停滞及可行步长决定何时结束。 + while(processPauseAndStop()) { const double bias = current.breakdown.verticalCommonBias; if(!current.breakdown.verticalReliable || qAbs(bias) <= 0.01 || heightStagnation >= 2) break; const double k = current.parameters[permeabilityColumn]; @@ -2127,7 +2126,7 @@ StopReasonLM nmCalculationAutoFitLM::runTrustRegionFitting() heightScale *= 0.5; } restoreEvaluationState(current); - if(heightBaseline - current.breakdown.verticalLoss >= qMax(1.0e-4, 0.01 * heightBaseline)) { + if(heightBaseline - current.breakdown.verticalLoss >= qMax(1.0e-4, 0.10 * heightBaseline)) { heightBaseline = current.breakdown.verticalLoss; heightStagnation = 0; } else ++heightStagnation; @@ -2136,7 +2135,7 @@ StopReasonLM nmCalculationAutoFitLM::runTrustRegionFitting() .arg(candidate.breakdown.verticalLoss, 0, 'e', 4).arg(candidate.breakdown.shapeLoss, 0, 'e', 4) .arg(accepted ? tr("accepted") : tr("rejected"))); } - QString heightReason = tr("height evaluation budget reached"); + QString heightReason = tr("no feasible permeability step or step too small"); if(m_shouldStop) heightReason = tr("stopped by user"); else if(!current.breakdown.verticalReliable) heightReason = tr("pressure and derivative height directions conflict"); else if(current.breakdown.verticalLoss <= 0.01) heightReason = tr("curve height is approximately aligned");