mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#5543 Revert "Remove WBS-averaging over element"
The change causes some saw tooth curves in some cases.
This reverts commit 480ff8f707
.
This commit is contained in:
parent
d5351585f0
commit
fb1be5b84b
@ -251,7 +251,12 @@ std::vector<RigGeoMechWellLogExtractor::WbsParameterSource>
|
|||||||
#pragma omp parallel for
|
#pragma omp parallel for
|
||||||
for ( int64_t intersectionIdx = 0; intersectionIdx < (int64_t)m_intersections.size(); ++intersectionIdx )
|
for ( int64_t intersectionIdx = 0; intersectionIdx < (int64_t)m_intersections.size(); ++intersectionIdx )
|
||||||
{
|
{
|
||||||
gridValues[intersectionIdx] = static_cast<double>( interpolatedInterfaceValues[intersectionIdx] );
|
float averageUnscaledValue = std::numeric_limits<float>::infinity();
|
||||||
|
averageIntersectionValuesToSegmentValue( intersectionIdx,
|
||||||
|
interpolatedInterfaceValues,
|
||||||
|
std::numeric_limits<float>::infinity(),
|
||||||
|
&averageUnscaledValue );
|
||||||
|
gridValues[intersectionIdx] = static_cast<double>( averageUnscaledValue );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -591,8 +596,11 @@ void RigGeoMechWellLogExtractor::wellBoreWallCurveData( const RigFemResultAddres
|
|||||||
double poissonRatio = poissonAllSegments[intersectionIdx];
|
double poissonRatio = poissonAllSegments[intersectionIdx];
|
||||||
double ucsBar = ucsAllSegments[intersectionIdx];
|
double ucsBar = ucsAllSegments[intersectionIdx];
|
||||||
|
|
||||||
caf::Ten3d segmentStress = interpolatedInterfaceStressBar[intersectionIdx];
|
caf::Ten3d segmentStress;
|
||||||
bool validSegmentStress = segmentStress != caf::Ten3d::invalid();
|
bool validSegmentStress = averageIntersectionValuesToSegmentValue( intersectionIdx,
|
||||||
|
interpolatedInterfaceStressBar,
|
||||||
|
caf::Ten3d::invalid(),
|
||||||
|
&segmentStress );
|
||||||
|
|
||||||
cvf::Vec3d wellPathTangent = calculateWellPathTangent( intersectionIdx, TangentConstantWithinCell );
|
cvf::Vec3d wellPathTangent = calculateWellPathTangent( intersectionIdx, TangentConstantWithinCell );
|
||||||
caf::Ten3d wellPathStressFloat = transformTensorToWellPathOrientation( wellPathTangent, segmentStress );
|
caf::Ten3d wellPathStressFloat = transformTensorToWellPathOrientation( wellPathTangent, segmentStress );
|
||||||
@ -1129,6 +1137,54 @@ double RigGeoMechWellLogExtractor::pascalToBar( double pascalValue )
|
|||||||
return pascalValue * 1.0e-5;
|
return pascalValue * 1.0e-5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
template <typename T>
|
||||||
|
bool RigGeoMechWellLogExtractor::averageIntersectionValuesToSegmentValue( size_t intersectionIdx,
|
||||||
|
const std::vector<T>& values,
|
||||||
|
const T& invalidValue,
|
||||||
|
T* averagedCellValue ) const
|
||||||
|
{
|
||||||
|
CVF_ASSERT( values.size() >= 2 );
|
||||||
|
|
||||||
|
*averagedCellValue = invalidValue;
|
||||||
|
|
||||||
|
T value1, value2;
|
||||||
|
cvf::Vec3d centroid( cellCentroid( intersectionIdx ) );
|
||||||
|
double dist1 = 0.0, dist2 = 0.0;
|
||||||
|
if ( intersectionIdx % 2 == 0 )
|
||||||
|
{
|
||||||
|
value1 = values[intersectionIdx];
|
||||||
|
value2 = values[intersectionIdx + 1];
|
||||||
|
|
||||||
|
dist1 = ( centroid - m_intersections[intersectionIdx] ).length();
|
||||||
|
dist2 = ( centroid - m_intersections[intersectionIdx + 1] ).length();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
value1 = values[intersectionIdx - 1];
|
||||||
|
value2 = values[intersectionIdx];
|
||||||
|
|
||||||
|
dist1 = ( centroid - m_intersections[intersectionIdx - 1] ).length();
|
||||||
|
dist2 = ( centroid - m_intersections[intersectionIdx] ).length();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( invalidValue == value1 || invalidValue == value2 )
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
RiaWeightedMeanCalculator<T> averageCalc;
|
||||||
|
averageCalc.addValueAndWeight( value1, dist2 );
|
||||||
|
averageCalc.addValueAndWeight( value2, dist1 );
|
||||||
|
if ( averageCalc.validAggregatedWeight() )
|
||||||
|
{
|
||||||
|
*averagedCellValue = averageCalc.weightedMean();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
@ -127,6 +127,11 @@ private:
|
|||||||
double getWellLogIntersectionValue( size_t intersectionIdx,
|
double getWellLogIntersectionValue( size_t intersectionIdx,
|
||||||
const std::vector<std::pair<double, double>>& wellLogValues ) const;
|
const std::vector<std::pair<double, double>>& wellLogValues ) const;
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
bool averageIntersectionValuesToSegmentValue( size_t intersectionIdx,
|
||||||
|
const std::vector<T>& intersectionValues,
|
||||||
|
const T& invalidValue,
|
||||||
|
T* averagedSegmentValue ) const;
|
||||||
static double pascalToBar( double pascalValue );
|
static double pascalToBar( double pascalValue );
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
Loading…
Reference in New Issue
Block a user