|
|
|
|
@ -12,7 +12,7 @@
|
|
|
|
|
#include "nmCalculation_global.h"
|
|
|
|
|
|
|
|
|
|
// 固定对数时间窗口的误差诊断。时间边界为不含重叠区的基础边界;
|
|
|
|
|
// rmsError 是局部加权均方根,energy 是对当前层残差能量的贡献。
|
|
|
|
|
// rmsError 是局部加权均方根,energy 是对整体残差能量的贡献。
|
|
|
|
|
struct AutoFitTimeWindowLM {
|
|
|
|
|
double timeMin;
|
|
|
|
|
double timeMax;
|
|
|
|
|
@ -33,11 +33,6 @@ struct AutoFitObjectiveBreakdownLM {
|
|
|
|
|
double pressureLoss;
|
|
|
|
|
double derivativeLoss;
|
|
|
|
|
QVector<double> residualVector;
|
|
|
|
|
// 分层模式的残差属于当前层,total 属于全部目标点;固定模式坐标数组为空。
|
|
|
|
|
QVector<double> sampleCoordinates;
|
|
|
|
|
int samplingStride;
|
|
|
|
|
int fullPointCount;
|
|
|
|
|
double layerError;
|
|
|
|
|
QVector<AutoFitTimeWindowLM> timeWindows;
|
|
|
|
|
double verticalCommonBias;
|
|
|
|
|
double verticalLoss;
|
|
|
|
|
@ -46,9 +41,9 @@ struct AutoFitObjectiveBreakdownLM {
|
|
|
|
|
double horizontalLoss;
|
|
|
|
|
bool horizontalReliable;
|
|
|
|
|
bool registrationAmbiguous;
|
|
|
|
|
// 固定 log-time 网格上的双曲线斜率残差,独立于数值残差的采样层级。
|
|
|
|
|
// 与整体误差共用 log-time 采样网格,斜率跨度约为完整对数时域的 10%。
|
|
|
|
|
QVector<double> shapeResiduals;
|
|
|
|
|
// 前期数值残差为 81 点,形状残差为 73 个斜率区间,均含第一窗口权重。
|
|
|
|
|
// 前期数值和形状残差沿用同一网格与斜率跨度,均含第一窗口权重。
|
|
|
|
|
// earlyParallelResiduals/Loss 沿用历史字段名,现为压力、导数分别匹配目标的形状误差。
|
|
|
|
|
// earlyParallelBias 仍记录相对斜率偏差,仅供诊断。
|
|
|
|
|
QVector<double> earlyValueResiduals;
|
|
|
|
|
@ -68,9 +63,6 @@ struct AutoFitObjectiveBreakdownLM {
|
|
|
|
|
, total(1.0e10)
|
|
|
|
|
, pressureLoss(std::numeric_limits<double>::quiet_NaN())
|
|
|
|
|
, derivativeLoss(std::numeric_limits<double>::quiet_NaN())
|
|
|
|
|
, samplingStride(1)
|
|
|
|
|
, fullPointCount(80)
|
|
|
|
|
, layerError(1.0e10)
|
|
|
|
|
, verticalCommonBias(std::numeric_limits<double>::quiet_NaN())
|
|
|
|
|
, verticalLoss(std::numeric_limits<double>::quiet_NaN())
|
|
|
|
|
, verticalReliable(false)
|
|
|
|
|
@ -122,7 +114,6 @@ public:
|
|
|
|
|
int getTotalEvaluations() const;
|
|
|
|
|
void resetOptimizer();
|
|
|
|
|
void setTargetWellName(const QString& wellName);
|
|
|
|
|
void setLayeredSamplingEnabled(bool enabled);
|
|
|
|
|
|
|
|
|
|
signals:
|
|
|
|
|
void progressUpdated(int iteration, double bestFitness);
|
|
|
|
|
@ -217,9 +208,6 @@ private:
|
|
|
|
|
double m_comparisonTimeMin;
|
|
|
|
|
double m_comparisonTimeMax;
|
|
|
|
|
QString m_targetWellName;
|
|
|
|
|
// 此开关由拟合界面传入;每轮重置层级,固定模式仍使用原来的 80 点目标。
|
|
|
|
|
bool m_layeredSampling;
|
|
|
|
|
int m_samplingStride;
|
|
|
|
|
|
|
|
|
|
int m_maxIterations;
|
|
|
|
|
double m_targetError;
|
|
|
|
|
|