From 266a4d234ab9f88e494c0b216d36bfcf0de4f65e Mon Sep 17 00:00:00 2001 From: lvjunjie Date: Tue, 29 Sep 2026 17:27:00 +0800 Subject: [PATCH] =?UTF-8?q?fix(nmNum):=20=E4=BF=AE=E5=A4=8D=E5=8E=8B?= =?UTF-8?q?=E8=A3=82=E4=BA=95=E6=88=90=E6=9E=9C=E5=8A=A0=E8=BD=BD=E6=97=B6?= =?UTF-8?q?=E7=9A=84=E7=A9=BA=E6=8C=87=E9=92=88=E5=B4=A9=E6=BA=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 压裂直井和多段压裂井复用基类已初始化的储层引用 - 储层尚未发布时跳过厚度读取,避免构造阶段访问空指针 - 加载时由成果 JSON 恢复实际裂缝高度,保留正常新建井的默认值逻辑 - 通过 Release 编译及四组现有成果加载验证,核对 38 项参数一致 --- Src/nmNum/nmData/nmDataHorizontalFracturedWell.cpp | 7 +++++-- Src/nmNum/nmData/nmDataVerticalFracturedWell.cpp | 7 +++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Src/nmNum/nmData/nmDataHorizontalFracturedWell.cpp b/Src/nmNum/nmData/nmDataHorizontalFracturedWell.cpp index b4b45520..8cff995b 100644 --- a/Src/nmNum/nmData/nmDataHorizontalFracturedWell.cpp +++ b/Src/nmNum/nmData/nmDataHorizontalFracturedWell.cpp @@ -4,7 +4,10 @@ #include "nmDataReservoir.h" nmDataHorizontalFracturedWell::nmDataHorizontalFracturedWell() : nmDataHorizontalWell() { - m_pReservoir = nmDataAnalyzeManager::getCurrentInstance()->getReservoirData(); + m_pReservoir = nmDataWellBase::m_pReservoir; + // 候选加载阶段尚未发布储层对象,裂缝高度随后会由 JSON 恢复。 + const QVariant oInitialFractureHeight = m_pReservoir == nullptr + ? QVariant(0.0) : m_pReservoir->getThickness().getValue(); double horizontalSectionLength = 200.0; m_wellLength.setValue(horizontalSectionLength); @@ -15,7 +18,7 @@ nmDataHorizontalFracturedWell::nmDataHorizontalFracturedWell() : nmDataHorizonta m_dFc = nmDataAttribute("dFc", 1000, "md.m", UNIT_TYPE_CONDUCTIVITY, QStringList(), QStringList() << "md.ft" << "md.m" << "m^3"); m_numberOfFractures = nmDataAttribute("Number of fractures", 15, "", UNIT_TYPE_DIMENSIONLESS, QStringList(), QStringList()); m_fractureHalfLength = nmDataAttribute("Fracture half length", 50.0, "m", UNIT_TYPE_LENGTH, QStringList(), QStringList() << "ft" << "m" << "cm" << "mm" << "in" << "0.1 in" << "mile" << "km"); - m_fractureHeight = nmDataAttribute("Fracture height", m_pReservoir->getThickness().getValue().toDouble(), "m", UNIT_TYPE_LENGTH, QStringList(), QStringList() << "ft" << "m" << "cm" << "mm" << "in" << "0.1 in" << "mile" << "km"); + m_fractureHeight = nmDataAttribute("Fracture height", oInitialFractureHeight.toDouble(), "m", UNIT_TYPE_LENGTH, QStringList(), QStringList() << "ft" << "m" << "cm" << "mm" << "in" << "0.1 in" << "mile" << "km"); m_fractureMidPointHeight = nmDataAttribute("Fracture mid-point height", (m_fractureHeight.getValue().toDouble())/2, "m", UNIT_TYPE_LENGTH, QStringList(), QStringList() << "ft" << "m" << "cm" << "mm" << "in" << "0.1 in" << "mile" << "km"); m_width = nmDataAttribute("Width", 0.00328084, "m", UNIT_TYPE_LENGTH, QStringList(), QStringList() << "ft" << "m" << "cm" << "mm" << "in" << "0.1 in" << "mile" << "km"); m_fractureAngle = nmDataAttribute("Fracture angle", 90.0000, "o", UNIT_TYPE_ANGLE, QStringList(), QStringList() << "o" << "radian"); diff --git a/Src/nmNum/nmData/nmDataVerticalFracturedWell.cpp b/Src/nmNum/nmData/nmDataVerticalFracturedWell.cpp index 4e253fcc..02b745a2 100644 --- a/Src/nmNum/nmData/nmDataVerticalFracturedWell.cpp +++ b/Src/nmNum/nmData/nmDataVerticalFracturedWell.cpp @@ -6,12 +6,15 @@ #include "nmDataReservoir.h" nmDataVerticalFracturedWell::nmDataVerticalFracturedWell() : nmDataVerticalWell() { - m_pReservoir = nmDataAnalyzeManager::getCurrentInstance()->getReservoirData(); + m_pReservoir = nmDataWellBase::m_pReservoir; + // 候选加载阶段尚未发布储层对象,裂缝高度随后会由 JSON 恢复。 + const QVariant oInitialFractureHeight = m_pReservoir == nullptr + ? QVariant(0.0) : m_pReservoir->getThickness().getValue(); m_fractureModel = nmDataAttribute("Fracture model", "Finite conductivity", "", UNIT_TYPE_DIMENSIONLESS, QStringList() << "Infinite conductivity", QStringList()); m_dFc = nmDataAttribute("dFc", 1000.0, "md.m", UNIT_TYPE_CONDUCTIVITY, QStringList(), QStringList() << "md.ft" << "md.m" << "m^3"); m_fractureHalfLength = nmDataAttribute("Fracture half length", 20.0, "m", UNIT_TYPE_LENGTH, QStringList(), QStringList() << "ft" << "m" << "cm" << "mm" << "in" << "0.1 in" << "mile" << "km"); - m_fractureHeight = nmDataAttribute("Fracture height", m_pReservoir->getThickness().getValue() , "m", UNIT_TYPE_LENGTH, QStringList(), QStringList() << "ft" << "m" << "cm" << "mm" << "in" << "0.1 in" << "mile" << "km"); + m_fractureHeight = nmDataAttribute("Fracture height", oInitialFractureHeight, "m", UNIT_TYPE_LENGTH, QStringList(), QStringList() << "ft" << "m" << "cm" << "mm" << "in" << "0.1 in" << "mile" << "km"); m_fractureMidPointHeight = nmDataAttribute("Fracture mid-point height", (m_fractureHeight.getValue().toDouble())/2 , "m", UNIT_TYPE_LENGTH, QStringList(), QStringList() << "ft" << "m" << "cm" << "mm" << "in" << "0.1 in" << "mile" << "km"); m_width = nmDataAttribute("Width", 0.00328084, "m", UNIT_TYPE_LENGTH, QStringList(), QStringList() << "ft" << "m" << "cm" << "mm" << "in" << "0.1 in" << "mile" << "km"); m_fractureAngle = nmDataAttribute("Fracture angle", 0.0000, "o", UNIT_TYPE_ANGLE, QStringList(), QStringList() << "o" << "radian");