mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#10728 Fractures: add new conductivity in fracture mode to approximate Reveal behavior
This commit is contained in:
@@ -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 );
|
||||
|
||||
@@ -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 );
|
||||
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -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 );
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user