///////////////////////////////////////////////////////////////////////////////// // // 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 "RimDepthTrackPlot.h" #include "RiaFractureModelDefines.h" #include "cafPdmField.h" #include "cafPdmPtrField.h" #include class RimWellLogExtractionCurve; class RimFractureModel; class RimFractureModelPlot : public RimDepthTrackPlot { CAF_PDM_HEADER_INIT; public: RimFractureModelPlot(); void setFractureModel( RimFractureModel* fractureModel ); RimFractureModel* fractureModel(); void getPorosityValues( std::vector& values ) const; void getFaciesValues( std::vector& values ) const; void getCurvePropertyValues( RiaDefines::CurveProperty curveProperty, std::vector& values ) const; std::vector calculateTrueVerticalDepth() const; std::vector calculatePorosity() const; std::vector calculateVerticalPermeability() const; std::vector calculateHorizontalPermeability() const; std::vector calculateReservoirPressure() const; std::vector calculateStress() const; std::vector calculateInitialStress() const; std::vector calculateStressGradient() const; std::vector calculateYoungsModulus() const; std::vector calculatePoissonsRatio() const; std::vector calculateKIc() const; std::vector calculateFluidLossCoefficient() const; std::vector calculateSpurtLoss() const; std::vector calculateProppandEmbedment() const; std::vector calculateImmobileFluidSaturation() const; std::vector calculateTemperature() const; std::vector calculateRelativePermeabilityFactor() const; std::vector calculatePoroElasticConstant() const; std::vector calculateThermalExpansionCoefficient() const; void calculateTemperature( std::vector& temperatures ) const; protected: std::vector findCurveAndComputeLayeredAverage( RiaDefines::CurveProperty curveProperty ) const; std::vector findCurveXValuesByProperty( RiaDefines::CurveProperty curveProperty ) const; std::vector findCurveAndComputeTopOfLayer( RiaDefines::CurveProperty curveProperty ) const; void calculateLayers( std::vector>& layerBoundaryDepths, std::vector>& layerBoundaryIndexes ) const; RimWellLogExtractionCurve* findCurveByProperty( RiaDefines::CurveProperty curveProperty ) const; bool calculateStressWithGradients( std::vector& stress, std::vector& stressGradients, std::vector& initialStress ) const; static double findValueAtTopOfLayer( const std::vector& values, const std::vector>& layerBoundaryIndexes, size_t layerNo ); static double findValueAtBottomOfLayer( const std::vector& values, const std::vector>& layerBoundaryIndexes, size_t layerNo ); static void computeAverageByLayer( const std::vector>& layerBoundaryIndexes, const std::vector& inputVector, std::vector& result ); static void extractTopOfLayerValues( const std::vector>& layerBoundaryIndexes, const std::vector& inputVector, std::vector& result ); void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; void onLoadDataAndUpdate() override; private: void applyDataSource(); caf::PdmPtrField m_fractureModel; };