///////////////////////////////////////////////////////////////////////////////// // // Copyright (C) Statoil ASA // // ResInsight is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY // WARRANTY; without even the implied warranty of MERCHANTABILITY or // FITNESS FOR A PARTICULAR PURPOSE. // // See the GNU General Public License at // for more details. // ///////////////////////////////////////////////////////////////////////////////// #pragma once #include "cafTensor3.h" #include "cvfVector3.h" #include "cvfVector4.h" #include class RigGeoMechBoreHoleStressCalculator { public: RigGeoMechBoreHoleStressCalculator(const caf::Ten3d& tensor, double porePressure, double poissonRatio, double uniaxialCompressiveStrength, int nThetaSubSamples); double solveFractureGradient(double* thetaOut = nullptr); double solveStassiDalia(double* thetaOut = nullptr); private: typedef double (RigGeoMechBoreHoleStressCalculator::*MemberFunc)(double pw, double* thetaOut) const; double solveBisection(double minPw, double maxPw, MemberFunc fn, double* thetaOut); double solveSecant(MemberFunc fn, double* thetaOut); double sigmaTMinOfMin(double wellPressure, double* thetaAtMin) const; double stassiDalia(double wellPressure, double* thetaAtMin) const; void calculateStressComponents(); cvf::Vec4d calculateStressComponentsForSegmentAngle(double theta) const; caf::Ten3d m_tensor; double m_porePressure; double m_poissonRatio; double m_uniaxialCompressiveStrength; int m_nThetaSubSamples; std::vector m_stressComponents; };