2022-04-26 15:03:45 +02:00
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
//
|
|
|
|
|
// Copyright (C) 2022 Equinor 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 <http://www.gnu.org/licenses/gpl.html>
|
|
|
|
|
// for more details.
|
|
|
|
|
//
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
#include "RimSummaryAddressModifier.h"
|
|
|
|
|
|
2023-11-01 14:18:40 +01:00
|
|
|
#include "RiaLogging.h"
|
|
|
|
|
#include "RiaStdStringTools.h"
|
|
|
|
|
|
2022-04-26 15:03:45 +02:00
|
|
|
#include "RifEclipseSummaryAddress.h"
|
|
|
|
|
|
|
|
|
|
#include "RimEnsembleCurveSet.h"
|
|
|
|
|
#include "RimSummaryCurve.h"
|
|
|
|
|
#include "RimSummaryPlot.h"
|
|
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
///
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
2023-11-01 14:18:40 +01:00
|
|
|
RifEclipseSummaryAddress RimSummaryAddressModifier::replaceObjectName( const RifEclipseSummaryAddress& sourceAdr,
|
|
|
|
|
std::string objectName,
|
|
|
|
|
RimSummaryAddressCollection::CollectionContentType contentType )
|
2022-04-26 15:03:45 +02:00
|
|
|
{
|
2023-11-01 14:18:40 +01:00
|
|
|
auto adr = sourceAdr;
|
|
|
|
|
|
|
|
|
|
if ( contentType == RimSummaryAddressCollection::CollectionContentType::WELL )
|
|
|
|
|
{
|
|
|
|
|
adr.setWellName( objectName );
|
|
|
|
|
}
|
|
|
|
|
else if ( contentType == RimSummaryAddressCollection::CollectionContentType::GROUP )
|
|
|
|
|
{
|
|
|
|
|
adr.setGroupName( objectName );
|
|
|
|
|
}
|
|
|
|
|
else if ( contentType == RimSummaryAddressCollection::CollectionContentType::REGION )
|
|
|
|
|
{
|
|
|
|
|
int intValue = RiaStdStringTools::toInt( objectName );
|
|
|
|
|
if ( intValue == -1 )
|
|
|
|
|
{
|
|
|
|
|
QString errorText = QString( "Failed to convert region text to region integer value "
|
|
|
|
|
"for region text : %1" )
|
|
|
|
|
.arg( QString::fromStdString( objectName ) );
|
|
|
|
|
|
|
|
|
|
RiaLogging::error( errorText );
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
adr.setRegion( intValue );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return adr;
|
2022-04-26 15:03:45 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
///
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
2023-11-01 14:18:40 +01:00
|
|
|
std::vector<RiaSummaryCurveAddress> RimSummaryAddressModifier::curveAddresses( const std::vector<CurveAddressProvider>& curveAddressProviders )
|
2022-04-26 15:03:45 +02:00
|
|
|
{
|
2023-11-01 14:18:40 +01:00
|
|
|
std::vector<RiaSummaryCurveAddress> addresses;
|
|
|
|
|
|
|
|
|
|
for ( auto& provider : curveAddressProviders )
|
|
|
|
|
{
|
|
|
|
|
std::visit(
|
|
|
|
|
[&addresses]( auto&& arg )
|
|
|
|
|
{
|
|
|
|
|
auto curveAdr = RimSummaryAddressModifier::curveAddress( arg );
|
|
|
|
|
addresses.push_back( curveAdr );
|
|
|
|
|
},
|
|
|
|
|
provider );
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return addresses;
|
2022-04-26 15:03:45 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
///
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
2023-11-01 14:18:40 +01:00
|
|
|
void RimSummaryAddressModifier::applyAddressesToCurveAddressProviders( const std::vector<CurveAddressProvider>& curveAddressProviders,
|
|
|
|
|
const std::vector<RiaSummaryCurveAddress>& addresses )
|
2022-04-26 15:03:45 +02:00
|
|
|
{
|
2023-11-01 14:18:40 +01:00
|
|
|
if ( curveAddressProviders.size() != addresses.size() ) return;
|
|
|
|
|
|
|
|
|
|
for ( size_t i = 0; i < curveAddressProviders.size(); i++ )
|
2022-04-26 15:03:45 +02:00
|
|
|
{
|
2023-11-01 14:18:40 +01:00
|
|
|
auto provider = curveAddressProviders[i];
|
|
|
|
|
const auto& address = addresses[i];
|
2022-04-26 15:03:45 +02:00
|
|
|
|
2023-11-01 14:18:40 +01:00
|
|
|
std::visit( [address]( auto&& arg ) { RimSummaryAddressModifier::setCurveAddress( arg, address ); }, provider );
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
///
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
std::vector<RimSummaryAddressModifier::CurveAddressProvider> RimSummaryAddressModifier::createAddressProviders( RimSummaryPlot* summaryPlot )
|
|
|
|
|
{
|
|
|
|
|
std::vector<CurveAddressProvider> providers;
|
|
|
|
|
|
|
|
|
|
for ( auto c : summaryPlot->allCurves() )
|
|
|
|
|
{
|
|
|
|
|
providers.push_back( c );
|
2022-04-26 15:03:45 +02:00
|
|
|
}
|
|
|
|
|
|
2023-11-01 14:18:40 +01:00
|
|
|
for ( auto cs : summaryPlot->curveSets() )
|
|
|
|
|
{
|
|
|
|
|
providers.push_back( cs );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return providers;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
///
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
std::vector<RifEclipseSummaryAddress> RimSummaryAddressModifier::allSummaryAddressesY( RimSummaryPlot* summaryPlot )
|
|
|
|
|
{
|
|
|
|
|
std::vector<RifEclipseSummaryAddress> addresses;
|
|
|
|
|
|
|
|
|
|
auto curveAddressProviders = createAddressProviders( summaryPlot );
|
|
|
|
|
for ( auto& provider : curveAddressProviders )
|
|
|
|
|
{
|
|
|
|
|
std::visit(
|
|
|
|
|
[&addresses]( auto&& arg )
|
|
|
|
|
{
|
|
|
|
|
auto curveAdr = RimSummaryAddressModifier::curveAddress( arg );
|
|
|
|
|
addresses.push_back( curveAdr.summaryAddressY() );
|
|
|
|
|
},
|
|
|
|
|
provider );
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return addresses;
|
2022-04-26 15:03:45 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
///
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
2023-11-01 14:18:40 +01:00
|
|
|
void RimSummaryAddressModifier::updateAddressesByObjectName( const std::vector<CurveAddressProvider>& curveAddressProviders,
|
|
|
|
|
const std::string& objectName,
|
|
|
|
|
RimSummaryAddressCollection::CollectionContentType contentType )
|
2022-04-26 15:03:45 +02:00
|
|
|
{
|
2023-11-01 14:18:40 +01:00
|
|
|
for ( auto& provider : curveAddressProviders )
|
|
|
|
|
{
|
|
|
|
|
std::visit(
|
|
|
|
|
[objectName, contentType]( auto&& arg )
|
|
|
|
|
{
|
|
|
|
|
const auto sourceAdr = RimSummaryAddressModifier::curveAddress( arg );
|
|
|
|
|
|
|
|
|
|
const auto sourceX = sourceAdr.summaryAddressX();
|
|
|
|
|
const auto sourceY = sourceAdr.summaryAddressY();
|
|
|
|
|
|
|
|
|
|
const auto newAdrX = RimSummaryAddressModifier::replaceObjectName( sourceX, objectName, contentType );
|
|
|
|
|
const auto newAdrY = RimSummaryAddressModifier::replaceObjectName( sourceY, objectName, contentType );
|
|
|
|
|
|
|
|
|
|
RimSummaryAddressModifier::setCurveAddress( arg, RiaSummaryCurveAddress( newAdrX, newAdrY ) );
|
|
|
|
|
},
|
|
|
|
|
provider );
|
|
|
|
|
};
|
2022-04-26 15:03:45 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
///
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
2023-11-01 14:18:40 +01:00
|
|
|
RiaSummaryCurveAddress RimSummaryAddressModifier::curveAddress( RimEnsembleCurveSet* curveSet )
|
2022-04-26 15:03:45 +02:00
|
|
|
{
|
2023-11-01 14:18:40 +01:00
|
|
|
if ( curveSet == nullptr ) return RiaSummaryCurveAddress( RifEclipseSummaryAddress() );
|
|
|
|
|
return curveSet->curveAddress();
|
|
|
|
|
}
|
2022-04-26 15:03:45 +02:00
|
|
|
|
2023-11-01 14:18:40 +01:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
///
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
RiaSummaryCurveAddress RimSummaryAddressModifier::curveAddress( RimSummaryCurve* curve )
|
|
|
|
|
{
|
|
|
|
|
if ( curve == nullptr ) return RiaSummaryCurveAddress( RifEclipseSummaryAddress() );
|
|
|
|
|
return curve->curveAddress();
|
2022-04-26 15:03:45 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
///
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
2023-11-01 14:18:40 +01:00
|
|
|
void RimSummaryAddressModifier::setCurveAddress( RimEnsembleCurveSet* curveSet, const RiaSummaryCurveAddress& curveAdr )
|
2022-04-26 15:03:45 +02:00
|
|
|
{
|
2023-11-01 14:18:40 +01:00
|
|
|
if ( curveSet )
|
|
|
|
|
{
|
|
|
|
|
curveSet->setCurveAddress( curveAdr );
|
|
|
|
|
}
|
2022-04-26 15:03:45 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
///
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
2023-11-01 14:18:40 +01:00
|
|
|
void RimSummaryAddressModifier::setCurveAddress( RimSummaryCurve* curve, const RiaSummaryCurveAddress& curveAdr )
|
2022-04-26 15:03:45 +02:00
|
|
|
{
|
2023-11-01 14:18:40 +01:00
|
|
|
if ( curve )
|
2022-04-26 15:03:45 +02:00
|
|
|
{
|
2023-11-01 14:18:40 +01:00
|
|
|
curve->setSummaryAddressX( curveAdr.summaryAddressX() );
|
|
|
|
|
curve->setSummaryAddressY( curveAdr.summaryAddressY() );
|
2022-04-26 15:03:45 +02:00
|
|
|
}
|
|
|
|
|
}
|