#4096 Simplify code for loading case and time diff to use same method

This commit is contained in:
Gaute Lindkvist 2019-02-15 13:03:05 +01:00
parent fbd1486a4c
commit eb0c2e4737
2 changed files with 8 additions and 50 deletions

View File

@ -44,20 +44,20 @@ bool RigCaseCellResultCalculator::computeDifference(RigEclipseCaseData*
const RigEclipseResultAddress& address)
{
CVF_ASSERT(address.isValid());
CVF_ASSERT(address.hasDifferenceCase());
CVF_ASSERT(address.hasDifferenceCase() || address.isTimeLapse());
// Assume at this stage that data for the case is available
// It is up to the caller to make sure the case is read from file
RigEclipseCaseData* baseCase = nullptr;
RigEclipseCaseData* baseCase = sourceCase;
if (address.hasDifferenceCase())
{
{
auto eclipseCases = RiaApplication::instance()->project()->eclipseCases();
for (RimEclipseCase* c : eclipseCases)
{
if (c->caseId() == address.m_differenceCaseId)
{
if (c && c->eclipseCaseData())
if (c && c->caseId() == address.m_differenceCaseId && c->eclipseCaseData())
{
baseCase = c->eclipseCaseData();
}

View File

@ -1083,7 +1083,7 @@ size_t RigCaseCellResultsData::findOrLoadKnownScalarResult(const RigEclipseResul
RiaDefines::ResultCatType type = resVarAddr.m_resultCatType;
QString resultName = resVarAddr.m_resultName;
if (resVarAddr.hasDifferenceCase())
if (resVarAddr.hasDifferenceCase() || resVarAddr.isTimeLapse())
{
if (!RigCaseCellResultCalculator::computeDifference(this->m_ownerCaseData, RiaDefines::MATRIX_MODEL, resVarAddr))
{
@ -1092,48 +1092,6 @@ size_t RigCaseCellResultsData::findOrLoadKnownScalarResult(const RigEclipseResul
return scalarResultIndex;
}
else if (resVarAddr.isTimeLapse())
{
RigEclipseResultAddress noneTimeLapseAddress(resVarAddr);
noneTimeLapseAddress.m_timeLapseBaseFrameIdx = RigEclipseResultAddress::NO_TIME_LAPSE;
size_t sourceResultIdx = this->findOrLoadKnownScalarResult(noneTimeLapseAddress);
if (sourceResultIdx != cvf::UNDEFINED_SIZE_T)
{
std::vector< std::vector<double> > & srcFrames = m_cellScalarResults[sourceResultIdx];
std::vector< std::vector<double> > & dstFrames = m_cellScalarResults[scalarResultIndex];
size_t baseFrameIdx = resVarAddr.m_timeLapseBaseFrameIdx;
size_t frameCount = srcFrames.size();
if (!(baseFrameIdx < frameCount ))
{
dstFrames.clear();
return scalarResultIndex;
}
std::vector<double>& srcBaseVals = srcFrames[baseFrameIdx];
dstFrames.resize(frameCount);
for (size_t fIdx = 0; fIdx < frameCount; ++fIdx)
{
std::vector<double>& srcVals = srcFrames[fIdx];
std::vector<double>& dstVals = dstFrames[fIdx];
dstVals.resize(srcVals.size(), std::numeric_limits<double>::infinity());
size_t valCount = srcVals.size();
//#pragma omp parallel for
for (long vIdx = 0; vIdx < static_cast<long>(valCount); ++vIdx)
{
dstVals[vIdx] = srcVals[vIdx] - srcBaseVals[vIdx];
}
}
}
return scalarResultIndex;
}
// Load dependency data sets