///////////////////////////////////////////////////////////////////////////////// // // Copyright (C) 2020- Equinor 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 "RiaEclipseUnitTools.h" #include "RiaFractureModelDefines.h" #include "RimCheckableNamedObject.h" #include "RimWellPathComponentInterface.h" #include "cafPdmChildField.h" #include "cafPdmFieldCvfVec3d.h" #include "cafPdmProxyValueField.h" #include "cafPdmPtrField.h" class RimEclipseCase; class RimWellPath; class RimModeledWellPath; class RimElasticProperties; class RigEclipseCaseData; //================================================================================================== /// /// //================================================================================================== class RimFractureModel : public RimCheckableNamedObject, public RimWellPathComponentInterface { CAF_PDM_HEADER_INIT; public: enum class ExtractionType { TRUE_VERTICAL_THICKNESS, TRUE_STRATIGRAPHIC_THICKNESS, }; enum class FractureOrientation { ALONG_WELL_PATH, TRANSVERSE_WELL_PATH }; RimFractureModel( void ); ~RimFractureModel( void ) override; void setMD( double md ); cvf::Vec3d anchorPosition() const; cvf::Vec3d thicknessDirection() const; void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; cvf::Vec3d fracturePosition() const; double defaultPorosity() const; double defaultPermeability() const; double verticalStress() const; double verticalStressGradient() const; double stressDepth() const; double overburdenHeight() const; double underburdenHeight() const; double defaultOverburdenPorosity() const; double defaultUnderburdenPorosity() const; double defaultOverburdenPermeability() const; double defaultUnderburdenPermeability() const; QString overburdenFormation() const; QString overburdenFacies() const; QString underburdenFormation() const; QString underburdenFacies() const; double referenceTemperature() const; double referenceTemperatureGradient() const; double referenceTemperatureDepth() const; bool useDetailedFluidLoss() const; double perforationLength() const; FractureOrientation fractureOrientation() const; double formationDip() const; bool hasBarrier() const; double distanceToBarrier() const; double barrierDip() const; int wellPenetrationLayer() const; // RimWellPathCompletionsInterface overrides. RiaDefines::WellPathComponentType componentType() const override; QString componentLabel() const override; QString componentTypeLabel() const override; cvf::Color3f defaultComponentColor() const override; double startMD() const override; double endMD() const override; bool isEnabled() const override; RimWellPath* wellPath() const; void loadDataAndUpdate(); RimModeledWellPath* thicknessDirectionWellPath() const; void setThicknessDirectionWellPath( RimModeledWellPath* thicknessDirectionWellPath ); void setElasticProperties( RimElasticProperties* elasticProperties ); RimElasticProperties* elasticProperties() const; double getDefaultValueForProperty( RiaDefines::CurveProperty ) const; bool hasDefaultValueForProperty( RiaDefines::CurveProperty ) const; RiaDefines::CurveProperty getDefaultPropertyForMissingValues( const QString& keyword ) const; double getDefaultForMissingOverburdenValue( const QString& keyword ) const; double getDefaultForMissingUnderburdenValue( const QString& keyword ) const; double getDefaultForMissingValue( const QString& keyword ) const; double getOverburdenGradient( const QString& keyword ) const; double getUnderburdenGradient( const QString& keyword ) const; void updateReferringPlots(); protected: void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; QList calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly ) override; void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; private: void updatePositionFromMeasuredDepth(); void updateThicknessDirection(); cvf::Vec3d calculateTSTDirection() const; void findThicknessTargetPoints( cvf::Vec3d& topPosition, cvf::Vec3d& bottomPosition ); static double calculateFormationDip( const cvf::Vec3d& direction ); static QString vecToString( const cvf::Vec3d& vec ); void updateThicknessDirectionWellPathName(); static double computeDefaultStressDepth(); static RigEclipseCaseData* getEclipseCaseData(); static RimEclipseCase* getEclipseCase(); protected: caf::PdmField m_MD; caf::PdmField> m_extractionType; caf::PdmField m_anchorPosition; caf::PdmField m_thicknessDirection; caf::PdmField m_boundingBoxVertical; caf::PdmField m_boundingBoxHorizontal; caf::PdmPtrField m_thicknessDirectionWellPath; caf::PdmChildField m_elasticProperties; caf::PdmField m_defaultPorosity; caf::PdmField m_defaultPermeability; caf::PdmField m_verticalStress; caf::PdmField m_verticalStressGradient; caf::PdmField m_stressDepth; caf::PdmField m_overburdenHeight; caf::PdmField m_overburdenPorosity; caf::PdmField m_overburdenPermeability; caf::PdmField m_overburdenFormation; caf::PdmField m_overburdenFacies; caf::PdmField m_overburdenFluidDensity; caf::PdmField m_underburdenHeight; caf::PdmField m_underburdenPorosity; caf::PdmField m_underburdenPermeability; caf::PdmField m_underburdenFormation; caf::PdmField m_underburdenFacies; caf::PdmField m_underburdenFluidDensity; caf::PdmField m_referenceTemperature; caf::PdmField m_referenceTemperatureGradient; caf::PdmField m_referenceTemperatureDepth; caf::PdmField m_relativePermeabilityFactorDefault; caf::PdmField m_poroElasticConstantDefault; caf::PdmField m_thermalExpansionCoeffientDefault; caf::PdmField m_useDetailedFluidLoss; caf::PdmField> m_fractureOrientation; caf::PdmField m_perforationLength; caf::PdmField m_formationDip; caf::PdmField m_hasBarrier; caf::PdmField m_distanceToBarrier; caf::PdmField m_barrierDip; caf::PdmField m_wellPenetrationLayer; };