mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#1957 Observed Data : Add handling of custom well name
This commit is contained in:
@@ -49,7 +49,7 @@ RifColumnBasedUserData::~RifColumnBasedUserData()
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
bool RifColumnBasedUserData::parse(const QString& data)
|
bool RifColumnBasedUserData::parse(const QString& data, const QString& customWellName, const QString& customWellGroupName)
|
||||||
{
|
{
|
||||||
m_allResultAddresses.clear();
|
m_allResultAddresses.clear();
|
||||||
m_timeSteps.clear();
|
m_timeSteps.clear();
|
||||||
@@ -129,6 +129,17 @@ bool RifColumnBasedUserData::parse(const QString& data)
|
|||||||
if (ci.isAVector)
|
if (ci.isAVector)
|
||||||
{
|
{
|
||||||
RifEclipseSummaryAddress sumAddress = ci.summaryAddress;
|
RifEclipseSummaryAddress sumAddress = ci.summaryAddress;
|
||||||
|
|
||||||
|
if (customWellName.size() > 0)
|
||||||
|
{
|
||||||
|
sumAddress.setWellName(customWellName.toStdString());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (customWellGroupName.size() > 0)
|
||||||
|
{
|
||||||
|
sumAddress.setWellGroupName(customWellGroupName.toStdString());
|
||||||
|
}
|
||||||
|
|
||||||
m_allResultAddresses.push_back(sumAddress);
|
m_allResultAddresses.push_back(sumAddress);
|
||||||
|
|
||||||
m_mapFromAddressToTimeStepIndex[sumAddress] = m_timeSteps.size() - 1;
|
m_mapFromAddressToTimeStepIndex[sumAddress] = m_timeSteps.size() - 1;
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ public:
|
|||||||
RifColumnBasedUserData();
|
RifColumnBasedUserData();
|
||||||
~RifColumnBasedUserData();
|
~RifColumnBasedUserData();
|
||||||
|
|
||||||
bool parse(const QString& data);
|
bool parse(const QString& data, const QString& customWellName, const QString& customWellGroupName);
|
||||||
|
|
||||||
virtual const std::vector<time_t>& timeSteps(const RifEclipseSummaryAddress& resultAddress) const override;
|
virtual const std::vector<time_t>& timeSteps(const RifEclipseSummaryAddress& resultAddress) const override;
|
||||||
|
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ RifKeywordVectorUserData::~RifKeywordVectorUserData()
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
bool RifKeywordVectorUserData::parse(const QString& data)
|
bool RifKeywordVectorUserData::parse(const QString& data, const QString& customWellName)
|
||||||
{
|
{
|
||||||
m_allResultAddresses.clear();
|
m_allResultAddresses.clear();
|
||||||
m_timeSteps.clear();
|
m_timeSteps.clear();
|
||||||
@@ -87,6 +87,9 @@ bool RifKeywordVectorUserData::parse(const QString& data)
|
|||||||
|
|
||||||
// Find all time vectors
|
// Find all time vectors
|
||||||
|
|
||||||
|
std::map<QString, size_t> mapFromOriginToTimeStepIndex;
|
||||||
|
|
||||||
|
|
||||||
for (size_t i = 0; i < keyValuePairVector.size(); i++)
|
for (size_t i = 0; i < keyValuePairVector.size(); i++)
|
||||||
{
|
{
|
||||||
const std::map<QString, QString>& keyValuePairs = keyValuePairVector[i];
|
const std::map<QString, QString>& keyValuePairs = keyValuePairVector[i];
|
||||||
@@ -136,7 +139,7 @@ bool RifKeywordVectorUserData::parse(const QString& data)
|
|||||||
|
|
||||||
QString originText = valueForKey(keyValuePairs, "ORIGIN");
|
QString originText = valueForKey(keyValuePairs, "ORIGIN");
|
||||||
|
|
||||||
m_mapFromOriginToTimeStepIndex[originText] = m_timeSteps.size() - 1;
|
mapFromOriginToTimeStepIndex[originText] = m_timeSteps.size() - 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -151,17 +154,23 @@ bool RifKeywordVectorUserData::parse(const QString& data)
|
|||||||
if (isVectorHeader(keyValuePairs))
|
if (isVectorHeader(keyValuePairs))
|
||||||
{
|
{
|
||||||
QString originText = valueForKey(keyValuePairs, "ORIGIN");
|
QString originText = valueForKey(keyValuePairs, "ORIGIN");
|
||||||
auto timeStepIndexIterator = m_mapFromOriginToTimeStepIndex.find(originText);
|
auto timeStepIndexIterator = mapFromOriginToTimeStepIndex.find(originText);
|
||||||
if (timeStepIndexIterator != m_mapFromOriginToTimeStepIndex.end())
|
if (timeStepIndexIterator != mapFromOriginToTimeStepIndex.end())
|
||||||
{
|
{
|
||||||
QString vectorText = valueForKey(keyValuePairs, "VECTOR");
|
QString vectorText = valueForKey(keyValuePairs, "VECTOR");
|
||||||
|
|
||||||
|
QString wellName = originText;
|
||||||
|
if (customWellName.size() > 0)
|
||||||
|
{
|
||||||
|
wellName = customWellName;
|
||||||
|
}
|
||||||
|
|
||||||
RifEclipseSummaryAddress addr(RifEclipseSummaryAddress::SUMMARY_WELL,
|
RifEclipseSummaryAddress addr(RifEclipseSummaryAddress::SUMMARY_WELL,
|
||||||
vectorText.toStdString(),
|
vectorText.toStdString(),
|
||||||
-1,
|
-1,
|
||||||
-1,
|
-1,
|
||||||
"",
|
"",
|
||||||
originText.toStdString(),
|
wellName.toStdString(),
|
||||||
-1,
|
-1,
|
||||||
"",
|
"",
|
||||||
-1,
|
-1,
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ public:
|
|||||||
RifKeywordVectorUserData();
|
RifKeywordVectorUserData();
|
||||||
~RifKeywordVectorUserData();
|
~RifKeywordVectorUserData();
|
||||||
|
|
||||||
bool parse(const QString& data);
|
bool parse(const QString& data, const QString& customWellName);
|
||||||
|
|
||||||
virtual const std::vector<time_t>& timeSteps(const RifEclipseSummaryAddress& resultAddress) const override;
|
virtual const std::vector<time_t>& timeSteps(const RifEclipseSummaryAddress& resultAddress) const override;
|
||||||
|
|
||||||
@@ -61,7 +61,6 @@ private:
|
|||||||
|
|
||||||
std::vector< std::vector<time_t> > m_timeSteps;
|
std::vector< std::vector<time_t> > m_timeSteps;
|
||||||
|
|
||||||
std::map<QString, size_t> m_mapFromOriginToTimeStepIndex;
|
|
||||||
std::map<RifEclipseSummaryAddress, size_t> m_mapFromAddressToVectorIndex;
|
std::map<RifEclipseSummaryAddress, size_t> m_mapFromAddressToVectorIndex;
|
||||||
std::map<RifEclipseSummaryAddress, size_t> m_mapFromAddressToTimeIndex;
|
std::map<RifEclipseSummaryAddress, size_t> m_mapFromAddressToTimeIndex;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -34,13 +34,14 @@ RimObservedData::RimObservedData()
|
|||||||
{
|
{
|
||||||
m_isObservedData = true;
|
m_isObservedData = true;
|
||||||
|
|
||||||
CAF_PDM_InitFieldNoDefault(&m_summaryCategory, "SummaryType", "Summary Type", "", "", "");
|
|
||||||
CAF_PDM_InitFieldNoDefault(&m_identifierName, "IdentifierName", "Identifier Name", "", "", "");
|
|
||||||
|
|
||||||
CAF_PDM_InitFieldNoDefault(&m_importedSummaryData, "ImportedSummaryData", "Imported Summary Data", "", "", "");
|
CAF_PDM_InitFieldNoDefault(&m_importedSummaryData, "ImportedSummaryData", "Imported Summary Data", "", "", "");
|
||||||
m_importedSummaryData.uiCapability()->setUiEditorTypeName(caf::PdmUiTextEditor::uiEditorTypeName());
|
m_importedSummaryData.uiCapability()->setUiEditorTypeName(caf::PdmUiTextEditor::uiEditorTypeName());
|
||||||
m_importedSummaryData.uiCapability()->setUiReadOnly(true);
|
m_importedSummaryData.uiCapability()->setUiReadOnly(true);
|
||||||
m_importedSummaryData.xmlCapability()->disableIO();
|
m_importedSummaryData.xmlCapability()->disableIO();
|
||||||
|
|
||||||
|
CAF_PDM_InitFieldNoDefault(&m_useCustomIdentifier, "UseCustomIdentifier", "Use Custom Identifier", "", "", "");
|
||||||
|
CAF_PDM_InitField(&m_summaryCategory, "SummaryType", caf::AppEnum<RifEclipseSummaryAddress::SummaryVarCategory>(RifEclipseSummaryAddress::SUMMARY_WELL), "Summary Type", "", "", "");
|
||||||
|
CAF_PDM_InitFieldNoDefault(&m_identifierName, "IdentifierName", "Identifier Name", "", "", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@@ -96,3 +97,67 @@ void RimObservedData::updateMetaData()
|
|||||||
|
|
||||||
m_importedSummaryData = QString::fromStdString(metaDataString);
|
m_importedSummaryData = QString::fromStdString(metaDataString);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
QString RimObservedData::customWellName() const
|
||||||
|
{
|
||||||
|
if (m_useCustomIdentifier() && m_summaryCategory() == RifEclipseSummaryAddress::SUMMARY_WELL)
|
||||||
|
{
|
||||||
|
return m_identifierName();
|
||||||
|
}
|
||||||
|
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
QString RimObservedData::customWellGroupName() const
|
||||||
|
{
|
||||||
|
if (m_useCustomIdentifier() && m_summaryCategory() == RifEclipseSummaryAddress::SUMMARY_WELL_GROUP)
|
||||||
|
{
|
||||||
|
return m_identifierName();
|
||||||
|
}
|
||||||
|
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
QList<caf::PdmOptionItemInfo> RimObservedData::calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly)
|
||||||
|
{
|
||||||
|
if (fieldNeedingOptions == &m_summaryCategory)
|
||||||
|
{
|
||||||
|
QList<caf::PdmOptionItemInfo> options;
|
||||||
|
|
||||||
|
using AddressAppEnum = caf::AppEnum<RifEclipseSummaryAddress::SummaryVarCategory>;
|
||||||
|
options.push_back(caf::PdmOptionItemInfo(AddressAppEnum::uiText(RifEclipseSummaryAddress::SUMMARY_WELL), RifEclipseSummaryAddress::SUMMARY_WELL));
|
||||||
|
options.push_back(caf::PdmOptionItemInfo(AddressAppEnum::uiText(RifEclipseSummaryAddress::SUMMARY_WELL_GROUP), RifEclipseSummaryAddress::SUMMARY_WELL_GROUP));
|
||||||
|
|
||||||
|
return options;
|
||||||
|
}
|
||||||
|
|
||||||
|
return RimSummaryCase::calculateValueOptions(fieldNeedingOptions, useOptionsOnly);
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RimObservedData::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue)
|
||||||
|
{
|
||||||
|
if (changedField == &m_useCustomIdentifier ||
|
||||||
|
changedField == &m_summaryCategory ||
|
||||||
|
changedField == &m_identifierName)
|
||||||
|
{
|
||||||
|
createSummaryReaderInterface();
|
||||||
|
|
||||||
|
updateMetaData();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
RimSummaryCase::fieldChangedByUi(changedField, oldValue, newValue);
|
||||||
|
}
|
||||||
|
|||||||
@@ -44,9 +44,18 @@ public:
|
|||||||
|
|
||||||
void updateMetaData();
|
void updateMetaData();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
QString customWellName() const;
|
||||||
|
QString customWellGroupName() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual QList<caf::PdmOptionItemInfo> calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly) override;
|
||||||
|
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
caf::PdmField<caf::AppEnum<RifEclipseSummaryAddress::SummaryVarCategory> > m_summaryCategory;
|
caf::PdmField<caf::AppEnum<RifEclipseSummaryAddress::SummaryVarCategory> > m_summaryCategory;
|
||||||
caf::PdmField<QString> m_identifierName;
|
caf::PdmField<QString> m_identifierName;
|
||||||
|
caf::PdmField<bool> m_useCustomIdentifier;
|
||||||
|
|
||||||
caf::PdmField<QString> m_importedSummaryData;
|
caf::PdmField<QString> m_importedSummaryData;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ void RimObservedEclipseUserData::createSummaryReaderInterface()
|
|||||||
if (RifKeywordVectorParser::canBeParsed(fileContents))
|
if (RifKeywordVectorParser::canBeParsed(fileContents))
|
||||||
{
|
{
|
||||||
RifKeywordVectorUserData* keywordVectorUserData = new RifKeywordVectorUserData();
|
RifKeywordVectorUserData* keywordVectorUserData = new RifKeywordVectorUserData();
|
||||||
if (keywordVectorUserData->parse(fileContents))
|
if (keywordVectorUserData->parse(fileContents, customWellName()))
|
||||||
{
|
{
|
||||||
m_summeryReader = keywordVectorUserData;
|
m_summeryReader = keywordVectorUserData;
|
||||||
}
|
}
|
||||||
@@ -82,7 +82,7 @@ void RimObservedEclipseUserData::createSummaryReaderInterface()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
RifColumnBasedUserData* columnBaseUserData = new RifColumnBasedUserData();
|
RifColumnBasedUserData* columnBaseUserData = new RifColumnBasedUserData();
|
||||||
if (!columnBaseUserData->parse(fileContents))
|
if (!columnBaseUserData->parse(fileContents, customWellName(), customWellGroupName()))
|
||||||
{
|
{
|
||||||
columnBaseUserData = nullptr;
|
columnBaseUserData = nullptr;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ public:
|
|||||||
bool isObservedData();
|
bool isObservedData();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue);
|
||||||
void updateTreeItemName();
|
void updateTreeItemName();
|
||||||
|
|
||||||
caf::PdmField<QString> m_shortName;
|
caf::PdmField<QString> m_shortName;
|
||||||
@@ -60,7 +61,5 @@ protected:
|
|||||||
bool m_isObservedData;
|
bool m_isObservedData;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Overridden PDM methods
|
|
||||||
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue);
|
|
||||||
virtual void initAfterRead() override;
|
virtual void initAfterRead() override;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -644,7 +644,7 @@ TEST(RifKeywordBasedRsmspecParserTest, TestTimeSteps)
|
|||||||
|
|
||||||
RifColumnBasedUserData columnBasedUserdata;
|
RifColumnBasedUserData columnBasedUserdata;
|
||||||
|
|
||||||
columnBasedUserdata.parse(data);
|
columnBasedUserdata.parse(data, "", "");
|
||||||
std::vector<time_t> timeSteps = columnBasedUserdata.timeSteps(address);
|
std::vector<time_t> timeSteps = columnBasedUserdata.timeSteps(address);
|
||||||
|
|
||||||
QDateTime startDate = QDateTime::fromString("01012004", "ddMMyyyy");
|
QDateTime startDate = QDateTime::fromString("01012004", "ddMMyyyy");
|
||||||
|
|||||||
Reference in New Issue
Block a user