#10728 Fractures: add new conductivity in fracture mode to approximate Reveal behavior

This commit is contained in:
Kristian Bendiksen
2023-10-18 12:43:14 +02:00
parent 4f4b2cbb01
commit 8930b5b32d
6 changed files with 42 additions and 12 deletions

View File

@@ -306,7 +306,7 @@ std::vector<RigCompletionData>
const RigFractureGrid* fractureGrid = fracture->fractureGrid();
if ( !fractureGrid ) continue;
bool useFiniteConductivityInFracture = ( fracTemplate->conductivityType() == RimFractureTemplate::FINITE_CONDUCTIVITY );
bool useFiniteConductivityInFracture = fracTemplate->useFiniteConductivityInFracture();
// If finite cond chosen and conductivity not present in stimplan file, do not calculate trans for this fracture
if ( useFiniteConductivityInFracture && !checkForStimPlanConductivity( fracTemplate, fracture ) )
@@ -331,11 +331,14 @@ std::vector<RigCompletionData>
if ( useFiniteConductivityInFracture )
{
calculateInternalFractureTransmissibilities( fractureGrid, cDarcyInCorrectUnit, transCondenser );
}
if ( useFiniteConductivityInFracture )
{
calculateFractureToWellTransmissibilities( fracTemplate, fractureGrid, fracture, cDarcyInCorrectUnit, wellPathGeometry, transCondenser );
bool useInfiniteWellPI = fracTemplate->conductivityType() == RimFractureTemplate::FINITE_CONDUCTIVITY_INFINITE_WELL_PI;
calculateFractureToWellTransmissibilities( fracTemplate,
fractureGrid,
fracture,
cDarcyInCorrectUnit,
wellPathGeometry,
transCondenser,
useInfiniteWellPI );
}
/////
@@ -581,7 +584,8 @@ void RicExportFractureCompletionsImpl::calculateFractureToWellTransmissibilities
gsl::not_null<const RimFracture*> fracture,
double cDarcyInCorrectUnit,
gsl::not_null<const RigWellPath*> wellPathGeometry,
RigTransmissibilityCondenser& transCondenser )
RigTransmissibilityCondenser& transCondenser,
bool useInfiniteWellPI )
{
// If fracture has orientation Azimuth (without user-defined perforation length) or Transverse,
// assume only radial inflow
@@ -589,6 +593,8 @@ void RicExportFractureCompletionsImpl::calculateFractureToWellTransmissibilities
( fracTemplate->orientationType() == RimFractureTemplate::AZIMUTH && !fracTemplate->useUserDefinedPerforationLength() ) ||
fracTemplate->orientationType() == RimFractureTemplate::TRANSVERSE_WELL_PATH;
const double infiniteWellTrans = 1000000.0;
if ( useRadialInflow )
{
std::pair<size_t, size_t> wellCellIJ = fractureGrid->fractureCellAtWellCenter();
@@ -603,6 +609,11 @@ void RicExportFractureCompletionsImpl::calculateFractureToWellTransmissibilities
fracTemplate->skinFactor(),
cDarcyInCorrectUnit );
if ( useInfiniteWellPI )
{
radialTrans = infiniteWellTrans;
}
transCondenser.addNeighborTransmissibility( { true, RigTransmissibilityCondenser::CellAddress::WELL, 1 },
{ false, RigTransmissibilityCondenser::CellAddress::STIMPLAN, wellCellIndex },
radialTrans );
@@ -652,6 +663,11 @@ void RicExportFractureCompletionsImpl::calculateFractureToWellTransmissibilities
fracture->wellRadius() );
}
if ( useInfiniteWellPI && linearTrans > 0.0 )
{
linearTrans = infiniteWellTrans;
}
transCondenser.addNeighborTransmissibility( { true, RigTransmissibilityCondenser::CellAddress::WELL, 1 },
{ false, RigTransmissibilityCondenser::CellAddress::STIMPLAN, fracWellCellIdx },
linearTrans );

View File

@@ -125,7 +125,8 @@ private:
gsl::not_null<const RimFracture*> fracture,
double cDarcyInCorrectUnit,
gsl::not_null<const RigWellPath*> wellPathGeometry,
RigTransmissibilityCondenser& transCondenser );
RigTransmissibilityCondenser& transCondenser,
bool useInfiniteWellPI );
static std::map<size_t, double> calculateMatrixToWellTransmissibilities( RigTransmissibilityCondenser& transCondenser );

View File

@@ -444,7 +444,7 @@ void RimEllipseFractureTemplate::defineUiOrdering( QString uiConfigName, caf::Pd
m_width.uiCapability()->setUiName( "Width [inches]" );
}
if ( conductivityType() == FINITE_CONDUCTIVITY )
if ( useFiniteConductivityInFracture() )
{
m_permeability.uiCapability()->setUiHidden( false );
m_width.uiCapability()->setUiHidden( false );

View File

@@ -755,7 +755,7 @@ void RimFracture::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& ui
m_perforationLength.uiCapability()->setUiHidden( true );
}
if ( fractureTemplate()->conductivityType() == RimFractureTemplate::FINITE_CONDUCTIVITY )
if ( fractureTemplate()->useFiniteConductivityInFracture() )
{
m_wellDiameter.uiCapability()->setUiHidden( false );
}

View File

@@ -56,7 +56,9 @@ void caf::AppEnum<RimFractureTemplate::FracConductivityEnum>::setUp()
{
addItem( RimFractureTemplate::INFINITE_CONDUCTIVITY, "InfiniteConductivity", "Infinite Conductivity" );
addItem( RimFractureTemplate::FINITE_CONDUCTIVITY, "FiniteConductivity", "Finite Conductivity" );
addItem( RimFractureTemplate::FINITE_CONDUCTIVITY_INFINITE_WELL_PI,
"FiniteConductivityInfiniteWellPI",
"Finite Conductivity, Infinite Well PI" );
setDefault( RimFractureTemplate::INFINITE_CONDUCTIVITY );
}
@@ -505,7 +507,7 @@ void RimFractureTemplate::prepareFieldsForUiDisplay()
m_perforationLength.uiCapability()->setUiHidden( hidePerforationLength );
}
if ( m_conductivityType == FINITE_CONDUCTIVITY )
if ( useFiniteConductivityInFracture() )
{
m_wellDiameter.uiCapability()->setUiHidden( false );
}
@@ -949,6 +951,15 @@ RimFractureTemplate::FracConductivityEnum RimFractureTemplate::conductivityType(
return m_conductivityType();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RimFractureTemplate::useFiniteConductivityInFracture() const
{
return conductivityType() == RimFractureTemplate::FINITE_CONDUCTIVITY ||
conductivityType() == RimFractureTemplate::FINITE_CONDUCTIVITY_INFINITE_WELL_PI;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@@ -94,6 +94,7 @@ public:
{
INFINITE_CONDUCTIVITY,
FINITE_CONDUCTIVITY,
FINITE_CONDUCTIVITY_INFINITE_WELL_PI,
};
enum PermeabilityEnum
@@ -139,6 +140,7 @@ public:
FracConductivityEnum conductivityType() const;
double perforationLength() const;
bool useUserDefinedPerforationLength() const;
bool useFiniteConductivityInFracture() const;
double wellPathDepthAtFracture() const;
virtual std::pair<double, double> wellPathDepthAtFractureRange() const = 0;