///////////////////////////////////////////////////////////////////////////////// // // Copyright (C) 2017 Statoil 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 "RigCompletionDataGridCell.h" #include #include #include #include //================================================================================================== /// //================================================================================================== enum WellConnectionState { OPEN, SHUT, AUTO, }; //================================================================================================== /// //================================================================================================== enum CellDirection { DIR_I, DIR_J, DIR_K, DIR_UNDEF, }; //================================================================================================== /// //================================================================================================== struct RigCompletionMetaData { RigCompletionMetaData( const QString& name, const QString& comment ) : name( name ) , comment( comment ) { } QString name; QString comment; }; //================================================================================================== /// //================================================================================================== class RigCompletionData { public: enum CompletionType { FISHBONES, FRACTURE, PERFORATION, FISHBONES_ICD, PERFORATION_ICD, PERFORATION_AICD, PERFORATION_ICV, CT_UNDEFINED }; RigCompletionData( const QString& wellName, const RigCompletionDataGridCell& cellIndex, double orderingValue ); ~RigCompletionData(); RigCompletionData( const RigCompletionData& other ); bool operator<( const RigCompletionData& other ) const; RigCompletionData& operator=( const RigCompletionData& other ); static bool isPerforationValve( CompletionType type ); static bool isValve( CompletionType type ); static bool isWsegValveTypes( CompletionType type ); void setFromFracture( double transmissibility, double skinFactor, double diameter ); void setSecondOrderingValue( double orderingValue ); void setDiameter( double diameter ); void setTransmissibility( double transmissibility ); void setTransAndWPImultBackgroundDataFromFishbone( double transmissibility, double skinFactor, double diameter, CellDirection direction, bool isMainBore ); void setTransAndWPImultBackgroundDataFromPerforation( double transmissibility, double skinFactor, double diameter, double dFactor, double kh, CellDirection direction ); void setCombinedValuesExplicitTrans( double transmissibility, double kh, double dFactor, double skinFactor, double diameter, CellDirection celldirection, CompletionType completionType ); void setCombinedValuesImplicitTransWPImult( double wpimult, double kh, double dFactor, double skinFactor, double diameter, CellDirection celldirection, CompletionType completionType ); bool isNonDarcyFlow() const; void setDFactor( double dFactor ); void setKh( double kh ); void addMetadata( const QString& name, const QString& comment ); static double defaultValue(); static bool isDefaultValue( double num ); const std::vector& metadata() const; const QString& wellName() const; const RigCompletionDataGridCell& completionDataGridCell() const; WellConnectionState connectionState() const; double saturation() const; double transmissibility() const; double diameter() const; // TODO: should be ft or m double kh() const; double skinFactor() const; double dFactor() const; CellDirection direction() const; size_t count() const; double wpimult() const; CompletionType completionType() const; bool isMainBore() const; double firstOrderingValue() const; double secondOrderingValue() const; void setSourcePdmObject( const caf::PdmObject* object ); const caf::PdmObject* sourcePdmObject() const; std::vector m_metadata; private: QString m_wellName; RigCompletionDataGridCell m_cellIndex; WellConnectionState m_connectionState; double m_saturation; // TODO: remove, always use default in Eclipse? double m_transmissibility; double m_diameter; double m_kh; // TODO: Remove, always use default in Eclipse? double m_skinFactor; double m_dFactor; // TODO: Remove, always use default in Eclipse? CellDirection m_direction; bool m_isMainBore; // to use mainbore for Eclipse calculation size_t m_count; // TODO: Remove, usage replaced by WPImult double m_wpimult; CompletionType m_completionType; double m_firstOrderingValue; double m_secondOrderingValue; caf::PdmPointer m_sourcePdmObject; private: static void copy( RigCompletionData& target, const RigCompletionData& from ); };