mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
WBS: Compute and show FG_MK_* only in reservoir (not shale).
This commit is contained in:
committed by
jonjenssen
parent
1217236d73
commit
b8f9beab91
@@ -49,6 +49,7 @@
|
|||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QPolygonF>
|
#include <QPolygonF>
|
||||||
|
|
||||||
|
#include <limits>
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
|
|
||||||
const double RigGeoMechWellLogExtractor::PURE_WATER_DENSITY_GCM3 = 1.0; // g / cm^3
|
const double RigGeoMechWellLogExtractor::PURE_WATER_DENSITY_GCM3 = 1.0; // g / cm^3
|
||||||
@@ -739,7 +740,7 @@ void RigGeoMechWellLogExtractor::wellBoreFGShale( const RigWbsParameter& paramet
|
|||||||
WbsParameterSource source = m_parameterSources.at( parameter );
|
WbsParameterSource source = m_parameterSources.at( parameter );
|
||||||
if ( source == RigWbsParameter::DERIVED_FROM_K0FG )
|
if ( source == RigWbsParameter::DERIVED_FROM_K0FG )
|
||||||
{
|
{
|
||||||
wellBoreFGDerivedFromK0FG( RiaResultNames::wbsPPResult(), timeStepIndex, frameIndex, values );
|
wellBoreFGDerivedFromK0FG( RiaResultNames::wbsPPResult(), timeStepIndex, frameIndex, values, false );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -765,7 +766,11 @@ void RigGeoMechWellLogExtractor::wellBoreFGShale( const RigWbsParameter& paramet
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RigGeoMechWellLogExtractor::wellBoreFGDerivedFromK0FG( const QString& ppResult, int timeStepIndex, int frameIndex, std::vector<double>* values )
|
void RigGeoMechWellLogExtractor::wellBoreFGDerivedFromK0FG( const QString& ppResult,
|
||||||
|
int timeStepIndex,
|
||||||
|
int frameIndex,
|
||||||
|
std::vector<double>* values,
|
||||||
|
bool onlyForPPReservoir )
|
||||||
{
|
{
|
||||||
std::vector<double> PP0; // results
|
std::vector<double> PP0; // results
|
||||||
std::vector<double> K0_FG, OBG0; // parameters
|
std::vector<double> K0_FG, OBG0; // parameters
|
||||||
@@ -773,6 +778,23 @@ void RigGeoMechWellLogExtractor::wellBoreFGDerivedFromK0FG( const QString& ppRes
|
|||||||
RigFemResultAddress ppAddr( RIG_WELLPATH_DERIVED, ppResult.toStdString(), "" );
|
RigFemResultAddress ppAddr( RIG_WELLPATH_DERIVED, ppResult.toStdString(), "" );
|
||||||
wellPathScaledCurveData( ppAddr, 0, 0, &PP0, true );
|
wellPathScaledCurveData( ppAddr, 0, 0, &PP0, true );
|
||||||
|
|
||||||
|
if ( onlyForPPReservoir )
|
||||||
|
{
|
||||||
|
std::vector<double> PP( intersections().size(), std::numeric_limits<double>::infinity() );
|
||||||
|
std::vector<WbsParameterSource> ppSources =
|
||||||
|
calculateWbsParameterForAllSegments( RigWbsParameter::PP_Reservoir(), timeStepIndex, frameIndex, &PP, false );
|
||||||
|
|
||||||
|
// Invalidate PP results from outside the reservoir zone.
|
||||||
|
#pragma omp parallel for
|
||||||
|
for ( int64_t intersectionIdx = 0; intersectionIdx < static_cast<int64_t>( intersections().size() ); ++intersectionIdx )
|
||||||
|
{
|
||||||
|
if ( !isValid( PP[intersectionIdx] ) || ppSources[intersectionIdx] != RigWbsParameter::GRID )
|
||||||
|
{
|
||||||
|
PP0[intersectionIdx] = std::numeric_limits<double>::infinity();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
calculateWbsParameterForAllSegments( RigWbsParameter::K0_FG(), timeStepIndex, frameIndex, &K0_FG, true );
|
calculateWbsParameterForAllSegments( RigWbsParameter::K0_FG(), timeStepIndex, frameIndex, &K0_FG, true );
|
||||||
calculateWbsParameterForAllSegments( RigWbsParameter::OBG0(), 0, 0, &OBG0, true );
|
calculateWbsParameterForAllSegments( RigWbsParameter::OBG0(), 0, 0, &OBG0, true );
|
||||||
|
|
||||||
@@ -800,7 +822,8 @@ void RigGeoMechWellLogExtractor::wellBoreFG_MatthewsKelly( const RigWbsParameter
|
|||||||
{
|
{
|
||||||
values->resize( intersections().size(), std::numeric_limits<double>::infinity() );
|
values->resize( intersections().size(), std::numeric_limits<double>::infinity() );
|
||||||
|
|
||||||
WbsParameterSource source = m_parameterSources.at( parameter );
|
// Use FG_Shale source to avoid creating more options.
|
||||||
|
WbsParameterSource source = m_parameterSources.at( RigWbsParameter::FG_Shale() );
|
||||||
if ( source == RigWbsParameter::DERIVED_FROM_K0FG )
|
if ( source == RigWbsParameter::DERIVED_FROM_K0FG )
|
||||||
{
|
{
|
||||||
auto mapParameterToPPResult = []( const RigWbsParameter& parameter )
|
auto mapParameterToPPResult = []( const RigWbsParameter& parameter )
|
||||||
@@ -810,8 +833,9 @@ void RigGeoMechWellLogExtractor::wellBoreFG_MatthewsKelly( const RigWbsParameter
|
|||||||
return RiaResultNames::wbsPPResult();
|
return RiaResultNames::wbsPPResult();
|
||||||
};
|
};
|
||||||
|
|
||||||
QString ppResultName = mapParameterToPPResult( parameter );
|
QString ppResultName = mapParameterToPPResult( parameter );
|
||||||
wellBoreFGDerivedFromK0FG( ppResultName, timeStepIndex, frameIndex, values );
|
bool onlyForPPReservoir = true;
|
||||||
|
wellBoreFGDerivedFromK0FG( ppResultName, timeStepIndex, frameIndex, values, onlyForPPReservoir );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -829,22 +853,23 @@ void RigGeoMechWellLogExtractor::wellBoreFG_MatthewsKelly( const RigWbsParameter
|
|||||||
curveData( SHMkAddr, timeStepIndex, frameIndex, &SH );
|
curveData( SHMkAddr, timeStepIndex, frameIndex, &SH );
|
||||||
|
|
||||||
CVF_ASSERT( SH.size() == intersections().size() );
|
CVF_ASSERT( SH.size() == intersections().size() );
|
||||||
|
|
||||||
|
std::vector<double> PP( intersections().size(), std::numeric_limits<double>::infinity() );
|
||||||
|
std::vector<WbsParameterSource> ppSources =
|
||||||
|
calculateWbsParameterForAllSegments( RigWbsParameter::PP_Reservoir(), timeStepIndex, frameIndex, &PP, false );
|
||||||
|
|
||||||
double multiplier = m_userDefinedValues.at( parameter );
|
double multiplier = m_userDefinedValues.at( parameter );
|
||||||
CVF_ASSERT( multiplier != std::numeric_limits<double>::infinity() );
|
CVF_ASSERT( multiplier != std::numeric_limits<double>::infinity() );
|
||||||
#pragma omp parallel for
|
#pragma omp parallel for
|
||||||
for ( int64_t intersectionIdx = 0; intersectionIdx < static_cast<int64_t>( intersections().size() ); ++intersectionIdx )
|
for ( int64_t intersectionIdx = 0; intersectionIdx < static_cast<int64_t>( intersections().size() ); ++intersectionIdx )
|
||||||
{
|
{
|
||||||
if ( !isValid( ( *values )[intersectionIdx] ) )
|
if ( !isValid( ( *values )[intersectionIdx] ) && ppSources[intersectionIdx] == RigWbsParameter::GRID &&
|
||||||
|
isValid( PP[intersectionIdx] ) && isValid( SH[intersectionIdx] ) )
|
||||||
{
|
{
|
||||||
if ( isValid( SH[intersectionIdx] ) )
|
( *values )[intersectionIdx] = SH[intersectionIdx] * multiplier;
|
||||||
{
|
|
||||||
( *values )[intersectionIdx] = SH[intersectionIdx] * multiplier;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
values->front() = wbsCurveValuesAtMsl();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -131,7 +131,7 @@ private:
|
|||||||
const QString& wbsPP0ResultName,
|
const QString& wbsPP0ResultName,
|
||||||
std::vector<double>* values );
|
std::vector<double>* values );
|
||||||
|
|
||||||
void wellBoreFGDerivedFromK0FG( const QString& ppResult, int timeStepIndex, int frameIndex, std::vector<double>* values );
|
void wellBoreFGDerivedFromK0FG( const QString& ppResult, int timeStepIndex, int frameIndex, std::vector<double>* values, bool onlyForPPReservoir );
|
||||||
|
|
||||||
void wellBoreFG_MatthewsKelly( const RigWbsParameter& parameter, int timeStepIndex, int frameIndex, std::vector<double>* values );
|
void wellBoreFG_MatthewsKelly( const RigWbsParameter& parameter, int timeStepIndex, int frameIndex, std::vector<double>* values );
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user