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