///////////////////////////////////////////////////////////////////////////////// // // Copyright (C) 2024- 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 "RimNamedObject.h" #include "cafAppEnum.h" #include "cafPdmField.h" #include "cafPdmObject.h" #include "cafPdmPtrField.h" #include "RigFloodingSettings.h" #include "Well/RigWellTargetMapping.h" class RimEclipseResultDefinition; class RimEclipseCase; class RimCellFilter; class RimDataFilterCollection; //================================================================================================== /// /// //================================================================================================== class RimWellTargetMapping : public RimNamedObject { CAF_PDM_HEADER_INIT; public: using FloodingType = caf::AppEnum; RimWellTargetMapping(); ~RimWellTargetMapping() override; void updateResultDefinition(); RimEclipseCase* ensembleStatisticsCase() const; void setDefaults(); protected: void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; void defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName ) override; void initAfterRead() override; QList calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override; private: void generateCandidates( RimEclipseCase* eclipseCase, bool setTimeStepInView = true ); void updateAllBoundaries(); void generateEnsembleStatistics(); cvf::Vec3st getResultGridCellCount() const; RimEclipseCase* firstCase() const; RimDataFilterCollection* dataFilterCollection() const; static std::vector findAvailableVolumesTypes( RimEclipseCase* eclipseCase ); RigWellTargetMapping::ClusteringLimits getClusteringLimits() const; void resetMinimumCellValuesToDefault(); void onGenerateButtonClicked(); caf::PdmField m_timeStep; caf::PdmField> m_volumeType; caf::PdmField> m_volumeResultType; caf::PdmField> m_volumesType; caf::PdmField m_oilFloodingType; caf::PdmField m_gasFloodingType; caf::PdmField m_userDefinedFloodingGas; caf::PdmField m_userDefinedFloodingOil; caf::PdmField m_saturationOil; caf::PdmField m_saturationGas; caf::PdmField m_pressure; caf::PdmField m_permeability; caf::PdmField m_transmissibility; caf::PdmField m_expandBoundingBoxXYPercent; caf::PdmField m_expandBoundingBoxZPercent; caf::PdmField m_maxIterations; caf::PdmField m_maxNumTargets; caf::PdmChildField m_resultDefinition; caf::PdmField m_cellCountI; caf::PdmField m_cellCountJ; caf::PdmField m_cellCountK; caf::PdmPtrField m_startDataFilter; caf::PdmPtrField m_dataFilter; // grow filter caf::PdmField m_avoidFaults; caf::PdmChildField m_ensembleStatisticsCase; double m_minimumSaturationOil; double m_maximumSaturationOil; double m_defaultSaturationOil; double m_minimumSaturationGas; double m_maximumSaturationGas; double m_defaultSaturationGas; double m_minimumPressure; double m_maximumPressure; double m_defaultPressure; double m_minimumPermeability; double m_maximumPermeability; double m_defaultPermeability; double m_minimumTransmissibility; double m_maximumTransmissibility; double m_defaultTransmissibility; };