mirror of
https://github.com/OPM/ResInsight.git
synced 2026-10-27 07:30:20 -05:00
Introduce RimDataFilterCollection on RimEclipseCase to hold filter configuration that is shared across all views of the case. Each RimEclipseView gets a RimDataFilterInViewCollection of RimDataFilterInView wrappers that auto-sync with the case-level list and expose an independent on/off toggle per view. The wrapper's applyToCellVisibility delegates to the wrapped RimCellFilter via the existing unified virtual, so property, range, and combined filters all work uniformly. RimDataFilterCollection is built on caf::PdmObjectCollection<RimCellFilter> and emits a filtersChanged signal on add/remove/reorder/child changes. The wrapper collection mirrors RimSurfaceInViewCollection's sync pattern: new wrappers default to checked, removed sources drop their wrappers, and the wrapper list follows the case order. Per-view wrappers feed into RivReservoirViewPartMgr::computePropertyVisibility after the existing view-level property-filter loop. The RicNew*Feature commands now route into a selected RimDataFilterCollection, and the existing combined-filter path is generalized to allow combined filters living under either a per-view RimEclipsePropertyFilterCollection or the new case-level collection. Several Asserted ancestor lookups in RimEclipsePropertyFilter, RimCellFilter and RimEclipseResultDefinition that assumed a Rim3dView ancestor were relaxed to the non-asserting variant with graceful fallbacks, so case-level filters can be created and edited without a host view. Backwards compatible: empty Data Filter collection is a no-op, existing per-view RimEclipsePropertyFilterCollection and RimCellFilterCollection paths are unchanged. GeoMech parity deferred.
206 lines
7.6 KiB
C++
206 lines
7.6 KiB
C++
/////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Copyright (C) 2011- Statoil ASA
|
|
// Copyright (C) 2013- Ceetron Solutions AS
|
|
// Copyright (C) 2011-2012 Ceetron AS
|
|
//
|
|
// 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 <http://www.gnu.org/licenses/gpl.html>
|
|
// for more details.
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#pragma once
|
|
|
|
#include "RiaPorosityModel.h"
|
|
|
|
#include "RiaDefines.h"
|
|
#include "RimCase.h"
|
|
|
|
#include "RifReaderSettings.h"
|
|
|
|
#include "cafPdmChildArrayField.h"
|
|
#include "cafPdmChildField.h"
|
|
#include "cafPdmField.h"
|
|
#include "cafPdmObject.h"
|
|
|
|
#include "cvfColor3.h"
|
|
#include "cvfObject.h"
|
|
|
|
#include <memory>
|
|
#include <set>
|
|
|
|
class QString;
|
|
|
|
class RimWellTargetMapping;
|
|
class RigCaseCellResultsData;
|
|
class RigEclipseCaseData;
|
|
class RigFormationNames;
|
|
class RigGridBase;
|
|
class RigMainGrid;
|
|
class RigVirtualPerforationTransmissibilities;
|
|
class RimCaseCollection;
|
|
class RimDataFilterCollection;
|
|
class RimEclipseContourMapView;
|
|
class RimEclipseContourMapViewCollection;
|
|
class RimEclipseInputPropertyCollection;
|
|
class RimEclipseView;
|
|
class RimIdenticalGridCaseGroup;
|
|
class RimReservoirCellResultsStorage;
|
|
class RimEclipseResultAddressCollection;
|
|
class RimEclipseViewCollection;
|
|
class RimResultNameAlias;
|
|
|
|
//==================================================================================================
|
|
//
|
|
// Interface for reservoirs.
|
|
//
|
|
//==================================================================================================
|
|
class RimEclipseCase : public RimCase
|
|
{
|
|
CAF_PDM_HEADER_INIT;
|
|
|
|
public:
|
|
RimEclipseCase();
|
|
~RimEclipseCase() override;
|
|
|
|
std::vector<RimEclipseView*> reservoirViews() const;
|
|
RimEclipseViewCollection* viewCollection() const;
|
|
|
|
std::vector<QString> filesContainingFaults() const;
|
|
void setFilesContainingFaults( const std::vector<QString>& val );
|
|
|
|
bool ensureReservoirCaseIsOpen();
|
|
bool openReservoirCase();
|
|
virtual void closeReservoirCase();
|
|
virtual bool openEclipseGridFile() = 0;
|
|
virtual void reloadEclipseGridFile();
|
|
virtual bool importAsciiInputProperties( const QStringList& fileNames );
|
|
|
|
RigEclipseCaseData* eclipseCaseData();
|
|
const RigEclipseCaseData* eclipseCaseData() const;
|
|
void ensureDeckIsParsedForEquilData();
|
|
cvf::Color3f defaultWellColor( const QString& wellName );
|
|
|
|
const RigMainGrid* mainGrid() const;
|
|
bool isGridSizeEqualTo( const RimEclipseCase* otherCase ) const;
|
|
|
|
RigCaseCellResultsData* results( RiaDefines::PorosityModelType porosityModel );
|
|
const RigCaseCellResultsData* results( RiaDefines::PorosityModelType porosityModel ) const;
|
|
|
|
RimReservoirCellResultsStorage* resultsStorage( RiaDefines::PorosityModelType porosityModel );
|
|
const RimReservoirCellResultsStorage* resultsStorage( RiaDefines::PorosityModelType porosityModel ) const;
|
|
|
|
RimEclipseView* createAndAddReservoirView( bool useGlobalViewCollection = false );
|
|
RimEclipseView* createAndAddReservoirView( RimEclipseViewCollection* viewColl );
|
|
RimEclipseView* createCopyAndAddView( const RimEclipseView* sourceView );
|
|
|
|
const RigVirtualPerforationTransmissibilities* computeAndGetVirtualPerforationTransmissibilities();
|
|
|
|
virtual QString locationOnDisc() const { return QString(); }
|
|
|
|
RimCaseCollection* parentCaseCollection();
|
|
RimEclipseContourMapViewCollection* contourMapCollection() const;
|
|
RimEclipseInputPropertyCollection* inputPropertyCollection() const;
|
|
RimDataFilterCollection* dataFilterCollection() const;
|
|
|
|
QStringList timeStepStrings() const override;
|
|
QString timeStepName( int frameIdx ) const override;
|
|
std::vector<QDateTime> timeStepDates() const override;
|
|
|
|
cvf::BoundingBox reservoirBoundingBox() override;
|
|
cvf::BoundingBox activeCellsBoundingBox() const override;
|
|
cvf::BoundingBox allCellsBoundingBox() const override;
|
|
cvf::Vec3d displayModelOffset() const override;
|
|
|
|
double characteristicCellSize() const override;
|
|
|
|
std::set<QString> sortedSimWellNames() const;
|
|
|
|
void loadAndSynchronizeInputProperties( bool importGridOrFaultData );
|
|
|
|
void ensureFaultDataIsComputed();
|
|
bool ensureNncDataIsComputed();
|
|
void createDisplayModelAndUpdateAllViews();
|
|
void computeActiveCellsBoundingBox();
|
|
|
|
void setReaderSettings( RifReaderSettings& readerSettings );
|
|
RifReaderSettings readerSettings() const;
|
|
|
|
void addWellTargetMapping( RimWellTargetMapping* wellTargetMapping );
|
|
|
|
void updateResultAddressCollection();
|
|
|
|
void setReservoirData( RigEclipseCaseData* eclipseCase );
|
|
|
|
void addResultAlias( const QString& resultName, const QString& aliasName );
|
|
void clearResultAliases();
|
|
|
|
void updateFormationNamesData() override;
|
|
|
|
protected:
|
|
void initAfterRead() override;
|
|
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
|
|
void childFieldChangedByUi( const caf::PdmFieldHandle* changedChildField ) override;
|
|
void defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = "" ) override;
|
|
|
|
void resultAliasUiOrdering( caf::PdmUiOrdering& uiOrdering );
|
|
|
|
void syncResultAliases();
|
|
|
|
// Internal methods
|
|
protected:
|
|
void computeCachedData();
|
|
std::vector<QString> additionalFiles() const;
|
|
RimEclipseViewCollection* globalViewCollection() const;
|
|
void addViewsFromViewCollection( std::vector<RimEclipseView*>& views, const RimEclipseViewCollection* viewColl ) const;
|
|
|
|
private:
|
|
void createTimeStepFormatString();
|
|
std::vector<Rim3dView*> allSpecialViews() const override;
|
|
std::vector<RimEclipseContourMapView*> contourMapViews() const;
|
|
|
|
void buildResultChildNodes();
|
|
|
|
const RigFormationNames* effectiveFormationNames() const;
|
|
|
|
protected:
|
|
caf::PdmField<bool> m_flipXAxis;
|
|
caf::PdmField<bool> m_flipYAxis;
|
|
caf::PdmChildField<RimEclipseInputPropertyCollection*> m_inputPropertyCollection;
|
|
|
|
caf::PdmChildArrayField<RimResultNameAlias*> m_resultAliasList;
|
|
|
|
RifReaderSettings m_readerSettings;
|
|
|
|
private:
|
|
caf::PdmField<bool> m_releaseResultMemory;
|
|
|
|
cvf::ref<RigEclipseCaseData> m_rigEclipseCase;
|
|
QString m_timeStepFormatString;
|
|
std::map<QString, cvf::Color3f> m_wellToColorMap;
|
|
|
|
caf::PdmChildArrayField<RimEclipseResultAddressCollection*> m_resultAddressCollections;
|
|
|
|
caf::PdmChildField<RimReservoirCellResultsStorage*> m_matrixModelResults;
|
|
caf::PdmChildField<RimReservoirCellResultsStorage*> m_fractureModelResults;
|
|
caf::PdmChildField<RimEclipseViewCollection*> m_viewCollection;
|
|
caf::PdmChildField<RimDataFilterCollection*> m_dataFilterCollection;
|
|
|
|
caf::PdmChildArrayField<RimWellTargetMapping*> m_wellTargetMappings;
|
|
|
|
caf::PdmField<std::vector<caf::FilePath>> m_filesContainingFaults;
|
|
|
|
// Obsolete fields:
|
|
caf::PdmChildArrayField<RimEclipseView*> m_reservoirViews_OBSOLETE;
|
|
caf::PdmChildField<RimEclipseContourMapViewCollection*> m_contourMapCollection_OBSOLETE;
|
|
};
|