Compare commits

...

2 Commits

Author SHA1 Message Date
lvjunjie 32b1ba3939 fix(nmNum): 补充网格尺寸保存校验和中文错误提示
- 保存前拦截空值、非数字、非正数及非有限值,避免无效设置被静默忽略
- 输入错误时保留设置窗口和原有网格尺寸,允许纠正后重新保存
- 补充中文错误提示并同步编译翻译资源
- 通过 14 项对话框验证,覆盖无效输入、有效数值及取消操作
5 days ago
lvjunjie 266a4d234a fix(nmNum): 修复压裂井成果加载时的空指针崩溃
- 压裂直井和多段压裂井复用基类已初始化的储层引用
- 储层尚未发布时跳过厚度读取,避免构造阶段访问空指针
- 加载时由成果 JSON 恢复实际裂缝高度,保留正常新建井的默认值逻辑
- 通过 Release 编译及四组现有成果加载验证,核对 38 项参数一致
5 days ago

Binary file not shown.

@ -5262,6 +5262,14 @@ Please check your input coordinates.</source>
</context>
<context>
<name>nmWxGridDlg</name>
<message>
<source>Input Error</source>
<translation>输入错误</translation>
</message>
<message>
<source>Grid size must be a finite number greater than zero.</source>
<translation>网格大小必须是大于零的有限数值。</translation>
</message>
<message>
<source>GridType</source>
<translation>网格类型:</translation>

@ -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");

@ -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");

@ -5,8 +5,10 @@
#include <QHBoxLayout>
#include <QLabel>
#include <QLineEdit>
#include <QMessageBox>
#include <QPushButton>
#include <QVBoxLayout>
#include <qnumeric.h>
nmWxGridDlg::nmWxGridDlg(double *pPebiGridControl):
m_pPebiGridControl(pPebiGridControl),
@ -20,6 +22,13 @@ nmWxGridDlg::nmWxGridDlg(double *pPebiGridControl):
void nmWxGridDlg::on_save()
{
// 无效文本转换为零;保存前统一拦截非正数和非有限值,保留原有网格设置。
if (!qIsFinite(m_dPebiGridControlTmp) || m_dPebiGridControlTmp <= 0.0) {
QMessageBox::warning(this, tr("Input Error"),
tr("Grid size must be a finite number greater than zero."));
return;
}
// 保存PEBI GridControl, GridType固定为PEBI, 仅在界面展示.
if (m_pPebiGridControl != NULL) {
*m_pPebiGridControl = m_dPebiGridControlTmp;

Loading…
Cancel
Save