Skip to content

Commit

Permalink
#10728 Fractures: add new conductivity in fracture mode to approximat…
Browse files Browse the repository at this point in the history
…e Reveal behavior
  • Loading branch information
kriben committed Oct 18, 2023
1 parent 4f4b2cb commit 8930b5b
Show file tree
Hide file tree
Showing 6 changed files with 42 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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 ) )
Expand All @@ -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 );
}

/////
Expand Down Expand Up @@ -581,14 +584,17 @@ 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
bool useRadialInflow =
( 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();
Expand All @@ -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 );
Expand Down Expand Up @@ -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 );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,8 @@ class RicExportFractureCompletionsImpl
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 );

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 );
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 );
}

Expand Down Expand Up @@ -505,7 +507,7 @@ void RimFractureTemplate::prepareFieldsForUiDisplay()
m_perforationLength.uiCapability()->setUiHidden( hidePerforationLength );
}

if ( m_conductivityType == FINITE_CONDUCTIVITY )
if ( useFiniteConductivityInFracture() )
{
m_wellDiameter.uiCapability()->setUiHidden( false );
}
Expand Down Expand Up @@ -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;
}

//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ class RimFractureTemplate : public caf::PdmObject
{
INFINITE_CONDUCTIVITY,
FINITE_CONDUCTIVITY,
FINITE_CONDUCTIVITY_INFINITE_WELL_PI,
};

enum PermeabilityEnum
Expand Down Expand Up @@ -139,6 +140,7 @@ class RimFractureTemplate : public caf::PdmObject
FracConductivityEnum conductivityType() const;
double perforationLength() const;
bool useUserDefinedPerforationLength() const;
bool useFiniteConductivityInFracture() const;

double wellPathDepthAtFracture() const;
virtual std::pair<double, double> wellPathDepthAtFractureRange() const = 0;
Expand Down

0 comments on commit 8930b5b

Please sign in to comment.