#2776 Error bars. Moved eclipse address parsing to RifEclipseSummaryAddress class

This commit is contained in:
Bjørn Erik Jensen
2018-05-28 11:20:20 +02:00
parent 312d302848
commit 10b3d0f6db
10 changed files with 425 additions and 97 deletions

View File

@@ -21,6 +21,7 @@
#include "RiaStdStringTools.h"
#include <QTextStream>
#include <QStringList>
#include "cvfAssert.h"
@@ -102,27 +103,364 @@ RifEclipseSummaryAddress::RifEclipseSummaryAddress(SummaryVarCategory category,
}
//--------------------------------------------------------------------------------------------------
///
/// Column header text format: [<ER|ERR|ERROR>:]<VECTOR>:<CATEGORY_PARAM_NAME1>[:<CATEGORY_PARAM_NAME2>][....]
//--------------------------------------------------------------------------------------------------
RifEclipseSummaryAddress RifEclipseSummaryAddress::fieldVarAddress(const std::string& fieldVarName)
RifEclipseSummaryAddress RifEclipseSummaryAddress::fromEclipseTextAddress(const std::string& textAddress)
{
RifEclipseSummaryAddress fieldAddr;
fieldAddr.m_variableCategory = SUMMARY_FIELD;
fieldAddr.m_quantityName = fieldVarName;
QStringList names = QString().fromStdString(textAddress).split(QRegExp("[:,]"));
return fieldAddr;
bool isErrorResult = false;
if (names.size() > 1 && names[0].trimmed().startsWith("ER", Qt::CaseInsensitive))
{
isErrorResult = true;
names.pop_front();
}
else if (names.empty())
{
return RifEclipseSummaryAddress();
}
std::string quantityName = names[0].trimmed().toStdString();
names.pop_front();
SummaryVarCategory category = identifyCategory(quantityName);
RifEclipseSummaryAddress address;
switch (category)
{
case SUMMARY_FIELD:
address = fieldAddress(quantityName);
break;
case SUMMARY_AQUIFER:
if (names.size() > 0) address = aquiferAddress(quantityName,
RiaStdStringTools::toInt(names[0].toStdString()));
break;
case SUMMARY_NETWORK:
address = networkAddress(quantityName);
break;
case SUMMARY_MISC:
address = miscAddress(quantityName);
break;
case SUMMARY_REGION:
if (names.size() > 0) address = regionAddress(quantityName,
RiaStdStringTools::toInt(names[0].toStdString()));
break;
case SUMMARY_REGION_2_REGION:
if (names.size() > 0)
{
QStringList regions = names[0].trimmed().split("-");
if (regions.size() == 2)
{
address = regionToRegionAddress(quantityName,
RiaStdStringTools::toInt(regions[0].toStdString()),
RiaStdStringTools::toInt(regions[1].toStdString()));
}
}
break;
case SUMMARY_WELL_GROUP:
if (names.size() > 0) address = wellGroupAddress(quantityName,
names[0].toStdString());
break;
case SUMMARY_WELL:
if (names.size() > 0) address = wellAddress(quantityName,
names[0].toStdString());
break;
case SUMMARY_WELL_COMPLETION:
if (names.size() > 3) address = wellCompletionAddress(quantityName,
names[0].toStdString(),
RiaStdStringTools::toInt(names[1].toStdString()),
RiaStdStringTools::toInt(names[2].toStdString()),
RiaStdStringTools::toInt(names[3].toStdString()));
break;
case SUMMARY_WELL_LGR:
if (names.size() > 1) address = wellLgrAddress(quantityName,
names[0].toStdString(),
names[1].toStdString());
break;
case SUMMARY_WELL_COMPLETION_LGR:
if (names.size() > 4) address = wellCompletionLgrAddress(quantityName,
names[0].toStdString(),
names[1].toStdString(),
RiaStdStringTools::toInt(names[2].toStdString()),
RiaStdStringTools::toInt(names[3].toStdString()),
RiaStdStringTools::toInt(names[4].toStdString()));
break;
case SUMMARY_WELL_SEGMENT:
if (names.size() > 1) address = wellSegmentAddress(quantityName,
names[0].toStdString(),
RiaStdStringTools::toInt(names[1].toStdString()));
break;
case SUMMARY_BLOCK:
if (names.size() > 2) address = blockAddress(quantityName,
RiaStdStringTools::toInt(names[0].toStdString()),
RiaStdStringTools::toInt(names[1].toStdString()),
RiaStdStringTools::toInt(names[2].toStdString()));
break;
case SUMMARY_BLOCK_LGR:
if (names.size() > 3) address = blockLgrAddress(quantityName,
names[0].toStdString(),
RiaStdStringTools::toInt(names[1].toStdString()),
RiaStdStringTools::toInt(names[2].toStdString()),
RiaStdStringTools::toInt(names[3].toStdString()));
break;
case SUMMARY_CALCULATED:
address = calculatedAddress(quantityName);
break;
case SUMMARY_IMPORTED:
case SUMMARY_INVALID:
address = importedAddress(quantityName);
break;
default:
break;
}
if (isErrorResult) address.setAsErrorResult();
return address;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifEclipseSummaryAddress RifEclipseSummaryAddress::calculatedCurveAddress(const std::string& curveName)
RifEclipseSummaryAddress::SummaryVarCategory RifEclipseSummaryAddress::identifyCategory(const std::string& quantityName)
{
RifEclipseSummaryAddress fieldAddr;
fieldAddr.m_variableCategory = SUMMARY_CALCULATED;
fieldAddr.m_quantityName = curveName;
if (quantityName.size() == 0) return RifEclipseSummaryAddress::SUMMARY_INVALID;
return fieldAddr;
if (!RiaStdStringTools::containsOnlyLettersAndDigits(quantityName)) return RifEclipseSummaryAddress::SUMMARY_INVALID;
if (quantityName.size() > 2 && quantityName[0] == 'R' && quantityName[2] == 'F')
{
return RifEclipseSummaryAddress::SUMMARY_REGION_2_REGION;
}
char firstLetter = quantityName.at(0);
if (firstLetter == 'A') return RifEclipseSummaryAddress::SUMMARY_AQUIFER;
if (firstLetter == 'B') return RifEclipseSummaryAddress::SUMMARY_BLOCK;
if (firstLetter == 'C') return RifEclipseSummaryAddress::SUMMARY_WELL_COMPLETION;
if (firstLetter == 'F') return RifEclipseSummaryAddress::SUMMARY_FIELD;
if (firstLetter == 'G') return RifEclipseSummaryAddress::SUMMARY_WELL_GROUP;
if (firstLetter == 'N') return RifEclipseSummaryAddress::SUMMARY_NETWORK;
if (firstLetter == 'R') return RifEclipseSummaryAddress::SUMMARY_REGION;
if (firstLetter == 'S') return RifEclipseSummaryAddress::SUMMARY_WELL_SEGMENT;
if (firstLetter == 'W') return RifEclipseSummaryAddress::SUMMARY_WELL;
if (quantityName.size() < 2) return RifEclipseSummaryAddress::SUMMARY_INVALID;
std::string firstTwoLetters = quantityName.substr(0, 2);
if (firstTwoLetters == "LB") return RifEclipseSummaryAddress::SUMMARY_BLOCK_LGR;
if (firstTwoLetters == "LC") return RifEclipseSummaryAddress::SUMMARY_WELL_COMPLETION_LGR;
if (firstTwoLetters == "LW") return RifEclipseSummaryAddress::SUMMARY_WELL_LGR;
return RifEclipseSummaryAddress::SUMMARY_INVALID;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifEclipseSummaryAddress RifEclipseSummaryAddress::fieldAddress(const std::string& quantityName)
{
RifEclipseSummaryAddress addr;
addr.m_variableCategory = SUMMARY_FIELD;
addr.m_quantityName = quantityName;
return addr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifEclipseSummaryAddress RifEclipseSummaryAddress::aquiferAddress(const std::string& quantityName, int aquiferNumber)
{
RifEclipseSummaryAddress addr;
addr.m_variableCategory = SUMMARY_AQUIFER;
addr.m_quantityName = quantityName;
addr.m_aquiferNumber = aquiferNumber;
return addr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifEclipseSummaryAddress RifEclipseSummaryAddress::networkAddress(const std::string& quantityName)
{
RifEclipseSummaryAddress addr;
addr.m_variableCategory = SUMMARY_NETWORK;
addr.m_quantityName = quantityName;
return addr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifEclipseSummaryAddress RifEclipseSummaryAddress::miscAddress(const std::string& quantityName)
{
RifEclipseSummaryAddress addr;
addr.m_variableCategory = SUMMARY_MISC;
addr.m_quantityName = quantityName;
return addr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifEclipseSummaryAddress RifEclipseSummaryAddress::regionAddress(const std::string& quantityName, int regionNumber)
{
RifEclipseSummaryAddress addr;
addr.m_variableCategory = SUMMARY_REGION;
addr.m_quantityName = quantityName;
addr.m_regionNumber = regionNumber;
return addr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifEclipseSummaryAddress RifEclipseSummaryAddress::regionToRegionAddress(const std::string& quantityName, int regionNumber, int region2Number)
{
RifEclipseSummaryAddress addr;
addr.m_variableCategory = SUMMARY_REGION_2_REGION;
addr.m_quantityName = quantityName;
addr.m_regionNumber = regionNumber;
addr.m_regionNumber2 = region2Number;
return addr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifEclipseSummaryAddress RifEclipseSummaryAddress::wellGroupAddress(const std::string& quantityName, const std::string& wellGroupName)
{
RifEclipseSummaryAddress addr;
addr.m_variableCategory = SUMMARY_WELL_GROUP;
addr.m_quantityName = quantityName;
addr.m_wellGroupName = wellGroupName;
return addr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifEclipseSummaryAddress RifEclipseSummaryAddress::wellAddress(const std::string& quantityName, const std::string& wellName)
{
RifEclipseSummaryAddress addr;
addr.m_variableCategory = SUMMARY_WELL;
addr.m_quantityName = quantityName;
addr.m_wellName = wellName;
return addr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifEclipseSummaryAddress RifEclipseSummaryAddress::wellCompletionAddress(const std::string& quantityName, const std::string& wellName, int i, int j, int k)
{
RifEclipseSummaryAddress addr;
addr.m_variableCategory = SUMMARY_WELL_COMPLETION;
addr.m_quantityName = quantityName;
addr.m_wellName = wellName;
addr.m_cellI = i;
addr.m_cellJ = j;
addr.m_cellK = k;
return addr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifEclipseSummaryAddress RifEclipseSummaryAddress::wellLgrAddress(const std::string& quantityName, const std::string& lgrName, const std::string& wellName)
{
RifEclipseSummaryAddress addr;
addr.m_variableCategory = SUMMARY_WELL_LGR;
addr.m_quantityName = quantityName;
addr.m_lgrName = lgrName;
addr.m_wellName = wellName;
return addr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifEclipseSummaryAddress RifEclipseSummaryAddress::wellCompletionLgrAddress(const std::string& quantityName, const std::string& lgrName, const std::string& wellName, int i, int j, int k)
{
RifEclipseSummaryAddress addr;
addr.m_variableCategory = SUMMARY_WELL_COMPLETION_LGR;
addr.m_quantityName = quantityName;
addr.m_lgrName = lgrName;
addr.m_wellName = wellName;
addr.m_cellI = i;
addr.m_cellJ = j;
addr.m_cellK = k;
return addr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifEclipseSummaryAddress RifEclipseSummaryAddress::wellSegmentAddress(const std::string& quantityName, const std::string& wellName, int segmentNumber)
{
RifEclipseSummaryAddress addr;
addr.m_variableCategory = SUMMARY_WELL_SEGMENT;
addr.m_quantityName = quantityName;
addr.m_wellName = wellName;
addr.m_wellSegmentNumber = segmentNumber;
return addr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifEclipseSummaryAddress RifEclipseSummaryAddress::blockAddress(const std::string& quantityName, int i, int j, int k)
{
RifEclipseSummaryAddress addr;
addr.m_variableCategory = SUMMARY_BLOCK;
addr.m_quantityName = quantityName;
addr.m_cellI = i;
addr.m_cellJ = j;
addr.m_cellK = k;
return addr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifEclipseSummaryAddress RifEclipseSummaryAddress::blockLgrAddress(const std::string& quantityName, const std::string& lgrName, int i, int j, int k)
{
RifEclipseSummaryAddress addr;
addr.m_variableCategory = SUMMARY_BLOCK_LGR;
addr.m_quantityName = quantityName;
addr.m_lgrName = lgrName;
addr.m_cellI = i;
addr.m_cellJ = j;
addr.m_cellK = k;
return addr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifEclipseSummaryAddress RifEclipseSummaryAddress::calculatedAddress(const std::string& quantityName)
{
RifEclipseSummaryAddress addr;
addr.m_variableCategory = SUMMARY_CALCULATED;
addr.m_quantityName = quantityName;
return addr;
}
//--------------------------------------------------------------------------------------------------
@@ -130,11 +468,10 @@ RifEclipseSummaryAddress RifEclipseSummaryAddress::calculatedCurveAddress(const
//--------------------------------------------------------------------------------------------------
RifEclipseSummaryAddress RifEclipseSummaryAddress::importedAddress(const std::string& quantityName)
{
RifEclipseSummaryAddress fieldAddr;
fieldAddr.m_variableCategory = SUMMARY_IMPORTED;
fieldAddr.m_quantityName = quantityName;
return fieldAddr;
RifEclipseSummaryAddress addr;
addr.m_variableCategory = SUMMARY_IMPORTED;
addr.m_quantityName = quantityName;
return addr;
}
//--------------------------------------------------------------------------------------------------
@@ -323,14 +660,13 @@ std::string RifEclipseSummaryAddress::formatUiTextIJK() const
//--------------------------------------------------------------------------------------------------
std::tuple<int, int, int> RifEclipseSummaryAddress::ijkTupleFromUiText(const std::string &s)
{
auto firstSep = s.find(',');
auto lastSep = s.find(',', firstSep + 1);
CVF_ASSERT(firstSep != std::string::npos && lastSep != std::string::npos);
auto textI = s.substr(0, firstSep);
auto textJ = s.substr(firstSep + 1, lastSep - firstSep - 1);
auto textK = s.substr(lastSep + 1);
QStringList ijk = QString().fromStdString(s).trimmed().split(QRegExp("[ ,.:;]"));
if (ijk.size() != 3) return std::make_tuple(-1, -1, -1);
return std::make_tuple(RiaStdStringTools::toInt(textI), RiaStdStringTools::toInt(textJ), RiaStdStringTools::toInt(textK));
return std::make_tuple(RiaStdStringTools::toInt(ijk[0].trimmed().toStdString()),
RiaStdStringTools::toInt(ijk[1].trimmed().toStdString()),
RiaStdStringTools::toInt(ijk[2].trimmed().toStdString()));
}
//--------------------------------------------------------------------------------------------------