mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#3263 Well Bore Stability: Use a constant tangent for FG and SFG within a cell.
This commit is contained in:
parent
28285ceddf
commit
0ccbd4e153
@ -119,7 +119,7 @@ void RigGeoMechWellLogExtractor::wellPathAngles(const RigFemResultAddress& resAd
|
||||
{
|
||||
size_t elmIdx = m_intersectedCellsGlobIdx[intersectionIdx];
|
||||
|
||||
cvf::Vec3d wellPathTangent = calculateWellPathTangent(intersectionIdx);
|
||||
cvf::Vec3d wellPathTangent = calculateWellPathTangent(intersectionIdx, TangentFollowWellPathSegments);
|
||||
|
||||
// Deviation from vertical. Since well path is tending downwards we compare with negative z.
|
||||
double inclination = cvf::Math::toDegrees(std::acos(cvf::Vec3d(0.0, 0.0, -1.0) * wellPathTangent.getNormalized()));
|
||||
@ -280,7 +280,7 @@ void RigGeoMechWellLogExtractor::wellBoreWallCurveData(const RigFemResultAddress
|
||||
}
|
||||
|
||||
caf::Ten3d interpolatedStress = interpolateGridResultValue(stressResAddr.resultPosType, vertexStresses, intersectionIdx, false);
|
||||
cvf::Vec3d wellPathTangent = calculateWellPathTangent(intersectionIdx);
|
||||
cvf::Vec3d wellPathTangent = calculateWellPathTangent(intersectionIdx, TangentConstantWithinCell);
|
||||
caf::Ten3d wellPathStressFloat = transformTensorToWellPathOrientation(wellPathTangent, interpolatedStress);
|
||||
caf::Ten3d wellPathStressDouble(wellPathStressFloat);
|
||||
|
||||
@ -542,11 +542,29 @@ cvf::Vec3d RigGeoMechWellLogExtractor::calculateLengthInCell(size_t cellIndex, c
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
cvf::Vec3d RigGeoMechWellLogExtractor::calculateWellPathTangent(int64_t intersectionIdx) const
|
||||
cvf::Vec3d RigGeoMechWellLogExtractor::calculateWellPathTangent(int64_t intersectionIdx,
|
||||
WellPathTangentCalculation calculationType) const
|
||||
{
|
||||
cvf::Vec3d segmentStart, segmentEnd;
|
||||
m_wellPath->twoClosestPoints(m_intersections[intersectionIdx], &segmentStart, &segmentEnd);
|
||||
return (segmentEnd - segmentStart).getNormalized();
|
||||
if (calculationType == TangentFollowWellPathSegments)
|
||||
{
|
||||
cvf::Vec3d segmentStart, segmentEnd;
|
||||
m_wellPath->twoClosestPoints(m_intersections[intersectionIdx], &segmentStart, &segmentEnd);
|
||||
return (segmentEnd - segmentStart).getNormalized();
|
||||
}
|
||||
else
|
||||
{
|
||||
cvf::Vec3d wellPathTangent;
|
||||
if (intersectionIdx % 2 == 0)
|
||||
{
|
||||
wellPathTangent = m_intersections[intersectionIdx + 1] - m_intersections[intersectionIdx];
|
||||
}
|
||||
else
|
||||
{
|
||||
wellPathTangent = m_intersections[intersectionIdx] - m_intersections[intersectionIdx - 1];
|
||||
}
|
||||
CVF_ASSERT(wellPathTangent.length() > 1.0e-7);
|
||||
return wellPathTangent.getNormalized();
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -54,6 +54,12 @@ public:
|
||||
const RigGeoMechCaseData* caseData();
|
||||
void setRkbDiff(double rkbDiff);
|
||||
private:
|
||||
enum WellPathTangentCalculation
|
||||
{
|
||||
TangentFollowWellPathSegments,
|
||||
TangentConstantWithinCell
|
||||
};
|
||||
|
||||
void wellPathAngles(const RigFemResultAddress& resAddr, std::vector<double>* values);
|
||||
void wellPathScaledCurveData(const RigFemResultAddress& resAddr, int frameIndex, std::vector<double>* values);
|
||||
void wellBoreWallCurveData(const RigFemResultAddress& resAddr, int frameIndex, std::vector<double>* values);
|
||||
@ -67,7 +73,7 @@ private:
|
||||
virtual cvf::Vec3d calculateLengthInCell(size_t cellIndex,
|
||||
const cvf::Vec3d& startPoint,
|
||||
const cvf::Vec3d& endPoint) const override;
|
||||
cvf::Vec3d calculateWellPathTangent(int64_t intersectionIdx) const;
|
||||
cvf::Vec3d calculateWellPathTangent(int64_t intersectionIdx, WellPathTangentCalculation calculationType) const;
|
||||
static caf::Ten3d transformTensorToWellPathOrientation(const cvf::Vec3d& wellPathTangent,
|
||||
const caf::Ten3d& wellPathTensor);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user