网格输入新增FC裂缝导流能力参数

feature/nm-para-property-20260615
lvjunjie 7 days ago
parent 526bacde40
commit 5f16278eee

@ -1,4 +1,4 @@
#include "nmCalculationPebiGrid.h"
#include "nmCalculationPebiGrid.h"
#include <Windows.h>
#include <QApplication>
#include <QDebug>
@ -30,6 +30,15 @@
#include <vtkType.h>
#include <vtkUnsignedCharArray.h>
// 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 <windows.h>
#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<QPointF> 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, QString>(NM_WELL_MODEL::Vertical_Fractured_Well, pVerticalFracturedWell->getWellName()));
@ -297,7 +313,7 @@ bool nmCalculationPebiGrid::meshGenPebiWells(HX_NWTM_GRID_INPUT& inputObj)
std::vector<std::vector<double>> 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();

Loading…
Cancel
Save