///////////////////////////////////////////////////////////////////////////////// // // Copyright (C) 2023 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 "RimCheckableNamedObject.h" #include "RimFaultReactivationEnums.h" #include "RimPolylinePickerInterface.h" #include "RimPolylinesDataInterface.h" #include "RimTimeStepFilter.h" #include "cafFilePath.h" #include "cafPdmChildArrayField.h" #include "cafPdmChildField.h" #include "cafPdmField.h" #include "cafPdmFieldCvfColor.h" #include "cafPdmObject.h" #include "cafPdmPtrField.h" #include "cvfColor3.h" #include "cvfStructGrid.h" #include "cvfVector3.h" #include #include #include #include #include class RicPolylineTargetsPickEventHandler; class RimEclipseCase; class RimGeoMechCase; class RimFaultInView; class RimParameterGroup; class RimPolylineTarget; class RimTimeStepFilter; class RivFaultReactivationModelPartMgr; class RigBasicPlane; class RigFaultReactivationModel; namespace cvf { class BoundingBox; class Plane; } // namespace cvf class RimFaultReactivationModel : public RimCheckableNamedObject, public RimPolylinePickerInterface, public RimPolylinesDataInterface { CAF_PDM_HEADER_INIT; using TimeStepFilterEnum = caf::AppEnum; using ElementSets = RimFaultReactivation::ElementSets; using StressSourceEnum = caf::AppEnum; public: RimFaultReactivationModel(); ~RimFaultReactivationModel() override; bool initSettings( QString& outErrmsg ); QString userDescription(); void setUserDescription( QString description ); std::pair validateModel() const; void setFaultInformation( RimFaultInView* fault, size_t cellIndex, cvf::StructGridInterface::FaceType face ); RimFaultInView* fault() const; void setTargets( cvf::Vec3d target1, cvf::Vec3d target2 ); RivFaultReactivationModelPartMgr* partMgr(); // polyline picker interface void insertTarget( const RimPolylineTarget* targetToInsertBefore, RimPolylineTarget* targetToInsert ) override; void deleteTarget( RimPolylineTarget* targetToDelete ) override; void updateEditorsAndVisualization() override; void updateVisualization() override; std::vector activeTargets() const override; bool pickingEnabled() const override; caf::PickEventHandler* pickEventHandler() const override; // polyline data interface cvf::ref polyLinesData() const override; cvf::ref model() const; bool showModel() const; QString baseDir() const; void setBaseDir( QString path ); std::vector selectedTimeSteps() const; std::vector selectedTimeStepIndexes() const; std::array materialParameters( ElementSets elementSet ) const; QStringList commandParameters() const; std::string outputOdbFilename() const; std::string inputFilename() const; std::string settingsFilename() const; std::string baseFilePath() const; void updateTimeSteps(); bool useGridVoidRatio() const; bool useGridPorePressure() const; bool useGridTemperature() const; bool useGridDensity() const; bool useGridElasticProperties() const; bool useLocalCoordinates() const; double seaBedDepth() const; double waterDensity() const; double frictionAngleDeg() const; double seabedTemperature() const; double lateralStressCoefficient() const; RimFaultReactivation::StressSource stressSource() const; RimEclipseCase* eclipseCase() const; RimGeoMechCase* geoMechCase() const; protected: caf::PdmFieldHandle* userDescriptionField() override; QList calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override; void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; std::string baseFilename() const; private: std::shared_ptr m_pickTargetsEventHandler; cvf::ref m_partMgr; caf::PdmField m_baseDir; caf::PdmField m_modelThickness; caf::PdmField m_userDescription; caf::PdmPtrField m_fault; caf::PdmPtrField m_geomechCase; caf::PdmChildArrayField m_targets; caf::PdmField m_modelPart1Color; caf::PdmField m_modelPart2Color; caf::PdmField m_showModelPlane; caf::PdmField m_modelExtentFromAnchor; caf::PdmField m_modelMinZ; caf::PdmField m_modelBelowSize; caf::PdmField m_faultExtendUpwards; caf::PdmField m_faultExtendDownwards; caf::PdmField m_faultZoneCells; caf::PdmField m_maxReservoirCellHeight; caf::PdmField m_minReservoirCellHeight; caf::PdmField m_cellHeightGrowFactor; caf::PdmField m_minReservoirCellWidth; caf::PdmField m_cellWidthGrowFactor; caf::PdmField m_useLocalCoordinates; caf::PdmField m_useGridPorePressure; caf::PdmField m_useGridVoidRatio; caf::PdmField m_useGridTemperature; caf::PdmField m_useGridDensity; caf::PdmField m_useGridElasticProperties; caf::PdmField m_stressSource; caf::PdmField m_waterDensity; caf::PdmField m_frictionAngleDeg; caf::PdmField m_seabedTemperature; caf::PdmField m_lateralStressCoefficient; caf::PdmField m_startCellIndex; caf::PdmField m_startCellFace; cvf::ref m_2Dmodel; caf::PdmField m_timeStepFilter; caf::PdmField> m_selectedTimeSteps; caf::PdmChildArrayField m_materialParameters; std::vector m_availableTimeSteps; };