#4195 Grid Cross Plot: Adjustments

This commit is contained in:
Magne Sjaastad
2019-03-12 22:49:31 +01:00
parent 0527fd8030
commit 75688703d4
7 changed files with 225 additions and 26 deletions

View File

@@ -403,7 +403,7 @@ bool RifReaderEclipseOutput::open(const QString& fileName, RigEclipseCaseData* e
} }
{ {
auto task = progress.task("Reading faults", 10); auto task = progress.task("Reading faults", 5);
if (isFaultImportEnabled()) if (isFaultImportEnabled())
{ {
@@ -417,9 +417,9 @@ bool RifReaderEclipseOutput::open(const QString& fileName, RigEclipseCaseData* e
} }
{ {
auto task = progress.task("Reading EQUIL", 10); auto task = progress.task("Reading EQUIL", 5);
importEquilData(fileSet); importEquilData(fileSet, eclipseCase);
} }
m_eclipseCase = eclipseCase; m_eclipseCase = eclipseCase;
@@ -632,7 +632,7 @@ void RifReaderEclipseOutput::importFaults(const QStringList& fileSet, cvf::Colle
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RifReaderEclipseOutput::importEquilData(const QStringList& fileSet) void RifReaderEclipseOutput::importEquilData(const QStringList& fileSet, RigEclipseCaseData* eclipseCase)
{ {
QString dataFileName; QString dataFileName;
@@ -675,7 +675,7 @@ void RifReaderEclipseOutput::importEquilData(const QStringList& fileSet)
equilItems.push_back(equilRec); equilItems.push_back(equilRec);
} }
m_eclipseCase->setEquilData(equilItems); eclipseCase->setEquilData(equilItems);
} }
} }
} }

View File

@@ -80,7 +80,7 @@ private:
RigWellResultPoint createWellResultPoint(const RigGridBase* grid, const well_conn_type* ert_connection, int ertBranchId, int ertSegmentId, const char* wellName); RigWellResultPoint createWellResultPoint(const RigGridBase* grid, const well_conn_type* ert_connection, int ertBranchId, int ertSegmentId, const char* wellName);
void importFaults(const QStringList& fileSet, cvf::Collection<RigFault>* faults); void importFaults(const QStringList& fileSet, cvf::Collection<RigFault>* faults);
void importEquilData(const QStringList& fileSet); void importEquilData(const QStringList& fileSet, RigEclipseCaseData* eclipseCase);
void openInitFile(); void openInitFile();

View File

@@ -18,6 +18,26 @@
#include "RimPlotAxisAnnotation.h" #include "RimPlotAxisAnnotation.h"
#include "RigEclipseCaseData.h"
#include "RigEquil.h"
#include "RimEclipseCase.h"
#include "RimRiuQwtPlotOwnerInterface.h"
#include "RimTools.h"
#include "RimViewWindow.h"
namespace caf
{
template<>
void RimPlotAxisAnnotation::ExportKeywordEnum::setUp()
{
addItem(RimPlotAxisAnnotation::PL_USER_DEFINED, "User Defined", "User Defined");
addItem(RimPlotAxisAnnotation::PL_EQUIL_WATER_OIL_CONTACT, "PL_EQUIL_WATER_OIL_CONTACT", "PL_EQUIL_WATER_OIL_CONTACT");
addItem(RimPlotAxisAnnotation::PL_EQUIL_GAS_OIL_CONTACT, "PL_EQUIL_GAS_OIL_CONTACT", "PL_EQUIL_GAS_OIL_CONTACT");
setDefault(RimPlotAxisAnnotation::PL_USER_DEFINED);
}
} // namespace caf
CAF_PDM_SOURCE_INIT(RimPlotAxisAnnotation, "RimPlotAxisAnnotation"); CAF_PDM_SOURCE_INIT(RimPlotAxisAnnotation, "RimPlotAxisAnnotation");
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -32,6 +52,11 @@ RimPlotAxisAnnotation::RimPlotAxisAnnotation()
CAF_PDM_InitFieldNoDefault(&m_name, "Name", "Name", "", "", ""); CAF_PDM_InitFieldNoDefault(&m_name, "Name", "Name", "", "", "");
CAF_PDM_InitFieldNoDefault(&m_value, "Value", "Value", "", "", ""); CAF_PDM_InitFieldNoDefault(&m_value, "Value", "Value", "", "", "");
CAF_PDM_InitFieldNoDefault(&m_annotationType, "AnnotationType", "AnnotationType", "", "", "");
CAF_PDM_InitFieldNoDefault(&m_sourceCase, "Associated3DCase", "Eclipse Case", "", "", "");
CAF_PDM_InitFieldNoDefault(&m_equilNum, "m_equilNum", "equil Num", "", "", "");
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -55,6 +80,17 @@ void RimPlotAxisAnnotation::setValue(double value)
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
QString RimPlotAxisAnnotation::name() const QString RimPlotAxisAnnotation::name() const
{ {
if (m_annotationType() == PL_EQUIL_WATER_OIL_CONTACT)
{
QString text = QString("WOC %1").arg(value());
return text;
}
else if (m_annotationType() == PL_EQUIL_GAS_OIL_CONTACT)
{
QString text = QString("GOC %1").arg(value());
return text;
}
return m_name(); return m_name();
} }
@@ -63,6 +99,15 @@ QString RimPlotAxisAnnotation::name() const
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
double RimPlotAxisAnnotation::value() const double RimPlotAxisAnnotation::value() const
{ {
if (m_annotationType() == PL_EQUIL_WATER_OIL_CONTACT)
{
return selectedItem().waterOilContactDepth();
}
else if (m_annotationType() == PL_EQUIL_GAS_OIL_CONTACT)
{
return selectedItem().gasOilContactDepth();
}
return m_value(); return m_value();
} }
@@ -81,3 +126,100 @@ caf::PdmFieldHandle* RimPlotAxisAnnotation::objectToggleField()
{ {
return &m_isActive; return &m_isActive;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimPlotAxisAnnotation::fieldChangedByUi(const caf::PdmFieldHandle* changedField,
const QVariant& oldValue,
const QVariant& newValue)
{
/*
RimViewWindow* viewWindow = nullptr;
this->firstAncestorOrThisOfType(viewWindow);
if (viewWindow)
{
viewWindow->loadDataAndUpdate();
}
*/
RimRiuQwtPlotOwnerInterface* parentPlot = nullptr;
this->firstAncestorOrThisOfType(parentPlot);
if (parentPlot)
{
parentPlot->updateAxisDisplay();
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QList<caf::PdmOptionItemInfo> RimPlotAxisAnnotation::calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions,
bool* useOptionsOnly)
{
QList<caf::PdmOptionItemInfo> options;
if (fieldNeedingOptions == &m_sourceCase)
{
RimTools::caseOptionItems(&options);
}
else if (fieldNeedingOptions == &m_equilNum)
{
for (const auto& eq : equilItems())
{
QString uiText = QString("%1").arg(eq.liveOilInitConstantRs());
options.push_back(caf::PdmOptionItemInfo(uiText, eq.liveOilInitConstantRs()));
}
}
return options;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimPlotAxisAnnotation::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering)
{
uiOrdering.add(&m_annotationType);
if (m_annotationType() == PL_USER_DEFINED)
{
uiOrdering.add(&m_name);
uiOrdering.add(&m_value);
}
else
{
uiOrdering.add(&m_sourceCase);
uiOrdering.add(&m_equilNum);
}
uiOrdering.skipRemainingFields();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RigEquil RimPlotAxisAnnotation::selectedItem() const
{
for (auto eq : equilItems())
{
if (eq.liveOilInitConstantRs() == m_equilNum())
{
return eq;
}
}
return RigEquil::defaultObject();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<RigEquil> RimPlotAxisAnnotation::equilItems() const
{
if (m_sourceCase && m_sourceCase->eclipseCaseData())
{
return m_sourceCase->eclipseCaseData()->equilData();
}
return std::vector<RigEquil>();
}

View File

@@ -21,9 +21,13 @@
#include "cafAppEnum.h" #include "cafAppEnum.h"
#include "cafPdmField.h" #include "cafPdmField.h"
#include "cafPdmObject.h" #include "cafPdmObject.h"
#include "cafPdmPtrField.h"
#include <QString> #include <QString>
class RimEclipseCase;
class RigEquil;
//================================================================================================== //==================================================================================================
/// ///
/// ///
@@ -33,6 +37,14 @@ class RimPlotAxisAnnotation : public caf::PdmObject
CAF_PDM_HEADER_INIT; CAF_PDM_HEADER_INIT;
public: public:
enum PlotAxisAnnotationType
{
PL_USER_DEFINED,
PL_EQUIL_WATER_OIL_CONTACT,
PL_EQUIL_GAS_OIL_CONTACT
};
typedef caf::AppEnum<PlotAxisAnnotationType> ExportKeywordEnum;
RimPlotAxisAnnotation(); RimPlotAxisAnnotation();
void setName(const QString& name); void setName(const QString& name);
@@ -44,9 +56,26 @@ public:
caf::PdmFieldHandle* userDescriptionField() override; caf::PdmFieldHandle* userDescriptionField() override;
caf::PdmFieldHandle* objectToggleField() override; caf::PdmFieldHandle* objectToggleField() override;
private: void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override;
caf::PdmField<bool> m_isActive;
QList<caf::PdmOptionItemInfo> calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions,
bool* useOptionsOnly) override;
protected:
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override;
private:
RigEquil selectedItem() const;
std::vector<RigEquil> equilItems() const;
private:
caf::PdmField<ExportKeywordEnum> m_annotationType;
caf::PdmField<bool> m_isActive;
caf::PdmField<QString> m_name; caf::PdmField<QString> m_name;
caf::PdmField<double> m_value; caf::PdmField<double> m_value;
caf::PdmPtrField<RimEclipseCase*> m_sourceCase;
caf::PdmField<int> m_equilNum;
}; };

View File

@@ -95,6 +95,7 @@ RimPlotAxisProperties::RimPlotAxisProperties()
m_annotations.uiCapability()->setUiHidden(true); m_annotations.uiCapability()->setUiHidden(true);
m_annotations.push_back(new RimPlotAxisAnnotation); m_annotations.push_back(new RimPlotAxisAnnotation);
m_annotations.push_back(new RimPlotAxisAnnotation);
updateOptionSensitivity(); updateOptionSensitivity();
} }

View File

@@ -29,8 +29,8 @@ RigEquil::RigEquil(double datumDepth,
double waterOilContactCapillaryPressure, double waterOilContactCapillaryPressure,
double gasOilContactDepth, double gasOilContactDepth,
double gasOilContactCapillaryPressure, double gasOilContactCapillaryPressure,
bool liveOilInitConstantRs, int liveOilInitConstantRs,
bool wetGasInitConstantRv, int wetGasInitConstantRv,
int initializationTargetAccuracy) int initializationTargetAccuracy)
: datum_depth(datumDepth) : datum_depth(datumDepth)
, datum_depth_ps(datumDepthPressure) , datum_depth_ps(datumDepthPressure)
@@ -74,12 +74,12 @@ double RigEquil::gasOilContactCapillaryPressure() const
return this->gas_oil_contact_capillary_pressure; return this->gas_oil_contact_capillary_pressure;
} }
bool RigEquil::liveOilInitConstantRs() const int RigEquil::liveOilInitConstantRs() const
{ {
return this->live_oil_init_proc; return this->live_oil_init_proc;
} }
bool RigEquil::wetGasInitConstantRv() const int RigEquil::wetGasInitConstantRv() const
{ {
return this->wet_gas_init_proc; return this->wet_gas_init_proc;
} }
@@ -89,6 +89,32 @@ int RigEquil::initializationTargetAccuracy() const
return this->init_target_accuracy; return this->init_target_accuracy;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RigEquil RigEquil::defaultObject()
{
double datumDepth = 0.0;
double datuDepthPressure = 0.0;
double waterOilContactDepth = 0.0;
double waterOilContactCapillaryPressure = 0.0;
double gasOilContactDepth = 0.0;
double gasOilContactCapillaryPressure = 0.0;
int liveOilInitConstantRs = -1;
int wetGasInitConstantRv = -1;
int initializationTargetAccuracy = -5;
return RigEquil(datumDepth,
datuDepthPressure,
waterOilContactDepth,
waterOilContactCapillaryPressure,
gasOilContactDepth,
gasOilContactCapillaryPressure,
liveOilInitConstantRs,
wetGasInitConstantRv,
initializationTargetAccuracy);
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -100,8 +126,8 @@ RigEquil RigEquil::parseString(const QString& keywordData)
double waterOilContactCapillaryPressure = 0.0; double waterOilContactCapillaryPressure = 0.0;
double gasOilContactDepth = 0.0; double gasOilContactDepth = 0.0;
double gasOilContactCapillaryPressure = 0.0; double gasOilContactCapillaryPressure = 0.0;
bool liveOilInitConstantRs = false; int liveOilInitConstantRs = 0;
bool wetGasInitConstantRv = false; int wetGasInitConstantRv = 0;
int initializationTargetAccuracy = -5; int initializationTargetAccuracy = -5;
QString line(keywordData); QString line(keywordData);
@@ -135,11 +161,11 @@ RigEquil RigEquil::parseString(const QString& keywordData)
} }
if (items.size() > 6) if (items.size() > 6)
{ {
liveOilInitConstantRs = items.at(6).toInt() > 0 ? true : false; liveOilInitConstantRs = items.at(6).toInt();
} }
if (items.size() > 7) if (items.size() > 7)
{ {
wetGasInitConstantRv = items.at(7).toInt() > 0 ? true : false; wetGasInitConstantRv = items.at(7).toInt();
} }
if (items.size() > 8) if (items.size() > 8)
{ {

View File

@@ -34,8 +34,8 @@ public:
double waterOilContactCapillaryPressure, double waterOilContactCapillaryPressure,
double gasOilContactDepth, double gasOilContactDepth,
double gasOilContactCapillaryPressure, double gasOilContactCapillaryPressure,
bool liveOilInitConstantRs, int liveOilInitConstantRs,
bool wetGasInitConstantRv, int wetGasInitConstantRv,
int initializationTargetAccuracy); int initializationTargetAccuracy);
double datumDepth() const; double datumDepth() const;
@@ -45,10 +45,11 @@ public:
double gasOilContactDepth() const; double gasOilContactDepth() const;
double gasOilContactCapillaryPressure() const; double gasOilContactCapillaryPressure() const;
bool liveOilInitConstantRs() const; int liveOilInitConstantRs() const;
bool wetGasInitConstantRv() const; int wetGasInitConstantRv() const;
int initializationTargetAccuracy() const; int initializationTargetAccuracy() const;
static RigEquil defaultObject();
static RigEquil parseString(const QString& keywordData); static RigEquil parseString(const QString& keywordData);
private: private:
@@ -59,7 +60,7 @@ private:
double gas_oil_contact_depth; double gas_oil_contact_depth;
double gas_oil_contact_capillary_pressure; double gas_oil_contact_capillary_pressure;
bool live_oil_init_proc; int live_oil_init_proc;
bool wet_gas_init_proc; int wet_gas_init_proc;
int init_target_accuracy; int init_target_accuracy;
}; };