From 5f16278eee9e4cc62d16fef7380802c22127c08c Mon Sep 17 00:00:00 2001 From: lvjunjie Date: Fri, 3 Jul 2026 10:12:21 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BD=91=E6=A0=BC=E8=BE=93=E5=85=A5=E6=96=B0?= =?UTF-8?q?=E5=A2=9EFC=E8=A3=82=E7=BC=9D=E5=AF=BC=E6=B5=81=E8=83=BD?= =?UTF-8?q?=E5=8A=9B=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nmCalculation/nmCalculationPebiGrid.cpp | 32 +++++++++++++++---- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/Src/nmNum/nmCalculation/nmCalculationPebiGrid.cpp b/Src/nmNum/nmCalculation/nmCalculationPebiGrid.cpp index 1a90978..a1440f2 100644 --- a/Src/nmNum/nmCalculation/nmCalculationPebiGrid.cpp +++ b/Src/nmNum/nmCalculation/nmCalculationPebiGrid.cpp @@ -1,4 +1,4 @@ -#include "nmCalculationPebiGrid.h" +#include "nmCalculationPebiGrid.h" #include #include #include @@ -30,6 +30,15 @@ #include #include +// PEBI二维裂缝输入约定:FC为0表示无限导流,大于0表示有限导流能力。 +static double getPebiFractureConductivity(const nmDataAttribute& fractureModel, const nmDataAttribute& conductivity) +{ + if(fractureModel.getValue().toString().contains("Infinite", Qt::CaseInsensitive)) { + return 0.0; + } + + return conductivity.getValue().toDouble(); +} #ifdef Q_OS_WIN #include #define DEBUG_OUT(msg) OutputDebugStringA(QString("[Mesh] %1\n").arg(msg).toLocal8Bit().data()) @@ -136,7 +145,10 @@ void nmCalculationPebiGrid::logInputParameters(const HX_NWTM_GRID_INPUT& input) for(size_t i = 0; i < input.FractureVerticalWell.size(); ++i) { const auto& frac = input.FractureVerticalWell[i]; - if(frac.size() >= 5) { + if(frac.size() >= 6) { + logMsg += QString(" Fracture %1: (%2, %3) -> (%4, %5), width: %6, FC: %7\n") + .arg(i).arg(frac[0]).arg(frac[1]).arg(frac[2]).arg(frac[3]).arg(frac[4]).arg(frac[5]); + } else if(frac.size() >= 5) { logMsg += QString(" Fracture %1: (%2, %3) -> (%4, %5), width: %6\n") .arg(i).arg(frac[0]).arg(frac[1]).arg(frac[2]).arg(frac[3]).arg(frac[4]); } @@ -152,7 +164,10 @@ void nmCalculationPebiGrid::logInputParameters(const HX_NWTM_GRID_INPUT& input) for(size_t j = 0; j < horizontalWell.size(); ++j) { const auto& frac = horizontalWell[j]; - if(frac.size() >= 5) { + if(frac.size() >= 6) { + logMsg += QString(" Fracture %1.%2: (%3, %4) -> (%5, %6), width: %7, FC: %8\n") + .arg(i).arg(j).arg(frac[0]).arg(frac[1]).arg(frac[2]).arg(frac[3]).arg(frac[4]).arg(frac[5]); + } else if(frac.size() >= 5) { logMsg += QString(" Fracture %1.%2: (%3, %4) -> (%5, %6), width: %7\n") .arg(i).arg(j).arg(frac[0]).arg(frac[1]).arg(frac[2]).arg(frac[3]).arg(frac[4]); } @@ -277,12 +292,13 @@ bool nmCalculationPebiGrid::meshGenPebiWells(HX_NWTM_GRID_INPUT& inputObj) QVector vFracPoints = pVerticalFracturedWell->getFracs(); if(vFracPoints.size() == 2) { - dVec1 crack(5); + dVec1 crack(6); crack[0] = vFracPoints[0].x(); crack[1] = vFracPoints[0].y(); crack[2] = vFracPoints[1].x(); crack[3] = vFracPoints[1].y(); crack[4] = 1; // 裂缝宽度 + crack[5] = getPebiFractureConductivity(pVerticalFracturedWell->getFractureModel(), pVerticalFracturedWell->getDfc()); // FC inputObj.FractureVerticalWell.push_back(crack); // 添加到自定义井顺序数组 pDataManager->appendCalculationWell(QPair(NM_WELL_MODEL::Vertical_Fractured_Well, pVerticalFracturedWell->getWellName())); @@ -297,7 +313,7 @@ bool nmCalculationPebiGrid::meshGenPebiWells(HX_NWTM_GRID_INPUT& inputObj) std::vector> vMultistageFracturedHorizontalWell; for(int j = 0; j < vvecFracPoints.size(); ++j) { - dVec1 crack(5); + dVec1 crack(6); QPointF& vStartPoint = vvecFracPoints[j].first; // 起始点 QPointF& vEndPoint = vvecFracPoints[j].second; // 终止点 @@ -306,6 +322,7 @@ bool nmCalculationPebiGrid::meshGenPebiWells(HX_NWTM_GRID_INPUT& inputObj) crack[2] = vEndPoint.x(); crack[3] = vEndPoint.y(); crack[4] = 2; // 裂缝宽度 + crack[5] = getPebiFractureConductivity(pHorizontalFracturedWell->getFractureModel(), pHorizontalFracturedWell->getDfc()); // FC vMultistageFracturedHorizontalWell.push_back(crack); } @@ -440,7 +457,7 @@ bool nmCalculationPebiGrid::meshGenPebiCrack(HX_NWTM_GRID_INPUT &inputObj) // 每个裂缝包括 多段 if(vecPlts.size() > 0) { for(int j = 0; j < vecPlts.size() - 1; j++) { - dVec1 crack(5); + dVec1 crack(6); QPointF& vStartPoint = vecPlts[j]; QPointF& vEndPoint = vecPlts[j + 1]; // 起始点、终止点,没有宽度 @@ -450,7 +467,8 @@ bool nmCalculationPebiGrid::meshGenPebiCrack(HX_NWTM_GRID_INPUT &inputObj) crack[3] = vEndPoint.y(); // todo,裂缝的宽度 crack[4] = 1; - qDebug() << crack[0] << crack[1] << crack[2] << crack[3] << crack[4]; + crack[5] = getPebiFractureConductivity(pFrac->getFractureFlowModel(), pFrac->getFractureDfc()); // FC + qDebug() << crack[0] << crack[1] << crack[2] << crack[3] << crack[4] << crack[5]; int iIndex = inputObj.VerticalWell.size() + inputObj.FractureVerticalWell.size();