///////////////////////////////////////////////////////////////////////////////// // // Copyright (C) 2021 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 "RimWellIAModelBox.h" #include "cafPdmChildArrayField.h" #include "cafPdmField.h" #include "cafPdmFieldCvfVec3d.h" #include "cafPdmObject.h" #include "cafPdmProxyValueField.h" #include "cafPdmPtrField.h" #include "cvfVector3.h" #include #include #include #include #include #include class RimGeoMechCase; class RimParameterGroup; class RimGenericParameter; class RimWellPath; class RimWellIAModelData; class RimWellIASettings : public RimCheckableNamedObject { CAF_PDM_HEADER_INIT; public: RimWellIASettings(); ~RimWellIASettings() override; bool initSettings( QString& outErrmsg ); void setGeoMechCase( RimGeoMechCase* geomechCase ); RimGeoMechCase* geomechCase() const; QString geomechCaseFilename() const; QString geomechCaseName() const; QDateTime geostaticDate() const; void setOutputBaseDirectory( QString baseDir ); QString outputBaseDirectory() const; QString outputOdbFilename() const; QString outputDrillingOdbFilename() const; bool showBox() const; void setShowBox( bool show ); const std::list inputParameterGroups() const; const std::list resinsightParameterGroups() const; void setDepthInterval( double startMD, double endMD ); double startMD(); double endMD(); QString jsonInputFilename() const; QString csvInputFilename() const; QStringList commandParameters() const; RimWellPath* wellPath() const; bool modelBoxValid() const; std::vector modelBoxVertices() const; std::vector modelData() const; bool extractModelData(); void updateVisualization(); protected: QList calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override; void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; caf::PdmFieldHandle* userDescriptionField() override; QString fullName() const; private: std::vector timeStepDates(); void initCsvParameters(); bool updateResInsightParameters(); void generateModelBox(); void resetModelData(); void resetResInsightParameters(); void addCsvGroup( QString name, QStringList timeSteps, double defaultValue = 0.0 ); std::vector extractDisplacements( std::vector corners, int timeStep ); private: caf::PdmProxyValueField m_nameProxy; caf::PdmPtrField m_geomechCase; caf::PdmField m_baseDir; caf::PdmField m_showBox; caf::PdmField m_boxValid; caf::PdmField m_startMD; caf::PdmField m_endMD; caf::PdmField m_bufferXY; caf::PdmField m_geostaticDate; caf::PdmChildArrayField m_parameters; std::vector m_parametersRI; caf::PdmChildArrayField m_csvParameters; RimWellIAModelBox m_modelbox; std::vector m_modelData; enum class CSV_GROUPNAME { FORMATION_PRESSURE = 0, CASING_PRESSURE = 1, TEMPERATURE = 2 }; const std::vector m_csvGroupNames{ "Formation Pressure", "Casing Pressure", "Temperature" }; };