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
|
||||
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 ucsBar = ucsAllSegments[intersectionIdx];
|
||||
|
||||
caf::Ten3d segmentStress = interpolatedInterfaceStressBar[intersectionIdx];
|
||||
bool validSegmentStress = segmentStress != caf::Ten3d::invalid();
|
||||
caf::Ten3d segmentStress;
|
||||
bool validSegmentStress = averageIntersectionValuesToSegmentValue( intersectionIdx,
|
||||
interpolatedInterfaceStressBar,
|
||||
caf::Ten3d::invalid(),
|
||||
&segmentStress );
|
||||
|
||||
cvf::Vec3d wellPathTangent = calculateWellPathTangent( intersectionIdx, TangentConstantWithinCell );
|
||||
caf::Ten3d wellPathStressFloat = transformTensorToWellPathOrientation( wellPathTangent, segmentStress );
|
||||
@ -1129,6 +1137,54 @@ double RigGeoMechWellLogExtractor::pascalToBar( double pascalValue )
|
||||
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,
|
||||
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 );
|
||||
|
||||
template <typename T>
|
||||
|
Loading…
Reference in New Issue
Block a user