mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#8354 RFT file open : Inconsistent data might lead to crash
Use try/catch to avoid crash from RFT file reader. Avoid reading data when considering if menu items should be visible.
This commit is contained in:
parent
f028491bb9
commit
2800f1f189
@ -73,7 +73,30 @@ RimSimWellInView* RicWellLogTools::selectedSimulationWell( int* branchIndex )
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
bool RicWellLogTools::wellHasRftData( const QString& wellName )
|
bool RicWellLogTools::hasRftData()
|
||||||
|
{
|
||||||
|
RimEclipseResultCase* resultCase;
|
||||||
|
std::vector<RimCase*> cases;
|
||||||
|
RimProject::current()->allCases( cases );
|
||||||
|
|
||||||
|
for ( RimCase* rimCase : cases )
|
||||||
|
{
|
||||||
|
if ( ( resultCase = dynamic_cast<RimEclipseResultCase*>( rimCase ) ) )
|
||||||
|
{
|
||||||
|
if ( resultCase->rftReader() )
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
bool RicWellLogTools::hasRftDataForWell( const QString& wellName )
|
||||||
{
|
{
|
||||||
RimEclipseResultCase* resultCase;
|
RimEclipseResultCase* resultCase;
|
||||||
std::vector<RimCase*> cases;
|
std::vector<RimCase*> cases;
|
||||||
|
@ -42,7 +42,8 @@ class RicWellLogTools
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static RimSimWellInView* selectedSimulationWell( int* branchIndex );
|
static RimSimWellInView* selectedSimulationWell( int* branchIndex );
|
||||||
static bool wellHasRftData( const QString& wellName );
|
static bool hasRftData();
|
||||||
|
static bool hasRftDataForWell( const QString& wellName );
|
||||||
static bool isWellPathOrSimWellSelectedInView();
|
static bool isWellPathOrSimWellSelectedInView();
|
||||||
static void addWellLogChannelsToPlotTrack( RimWellLogTrack* plotTrack,
|
static void addWellLogChannelsToPlotTrack( RimWellLogTrack* plotTrack,
|
||||||
const std::vector<RimWellLogFileChannel*>& wellLogFileChannels );
|
const std::vector<RimWellLogFileChannel*>& wellLogFileChannels );
|
||||||
|
@ -44,7 +44,7 @@ bool RicAdd3dWellLogRftCurveFeature::isCommandEnabled()
|
|||||||
RimWellPath* wellPath = caf::SelectionManager::instance()->selectedItemAncestorOfType<RimWellPath>();
|
RimWellPath* wellPath = caf::SelectionManager::instance()->selectedItemAncestorOfType<RimWellPath>();
|
||||||
if ( wellPath )
|
if ( wellPath )
|
||||||
{
|
{
|
||||||
return RicWellLogTools::wellHasRftData( wellPath->name() );
|
return RicWellLogTools::hasRftData();
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -57,6 +57,8 @@ void RicAdd3dWellLogRftCurveFeature::onActionTriggered( bool isChecked )
|
|||||||
RimWellPath* selectedWellPath = caf::SelectionManager::instance()->selectedItemAncestorOfType<RimWellPath>();
|
RimWellPath* selectedWellPath = caf::SelectionManager::instance()->selectedItemAncestorOfType<RimWellPath>();
|
||||||
if ( !selectedWellPath ) return;
|
if ( !selectedWellPath ) return;
|
||||||
|
|
||||||
|
if ( !RicWellLogTools::hasRftDataForWell( selectedWellPath->name() ) ) return;
|
||||||
|
|
||||||
Rim3dWellLogRftCurve* rim3dWellLogRftCurve = new Rim3dWellLogRftCurve();
|
Rim3dWellLogRftCurve* rim3dWellLogRftCurve = new Rim3dWellLogRftCurve();
|
||||||
selectedWellPath->add3dWellLogCurve( rim3dWellLogRftCurve );
|
selectedWellPath->add3dWellLogCurve( rim3dWellLogRftCurve );
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ bool RicNewWellLogRftCurveFeature::isCommandEnabled()
|
|||||||
|
|
||||||
if ( simulationWell != nullptr )
|
if ( simulationWell != nullptr )
|
||||||
{
|
{
|
||||||
return RicWellLogTools::wellHasRftData( simulationWell->name() );
|
return RicWellLogTools::hasRftData();
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@ -56,11 +56,19 @@ void RifReaderEclipseRft::open()
|
|||||||
|
|
||||||
RiaLogging::info( QString( "Opening file '%1'" ).arg( m_fileName ) );
|
RiaLogging::info( QString( "Opening file '%1'" ).arg( m_fileName ) );
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Use try/catch, as inconsistent RFT data might lead to exceptions
|
||||||
|
// https://github.com/OPM/ResInsight/issues/8354
|
||||||
m_ecl_rft_file = ecl_rft_file_alloc_case( RiaStringEncodingTools::toNativeEncoded( m_fileName ).data() );
|
m_ecl_rft_file = ecl_rft_file_alloc_case( RiaStringEncodingTools::toNativeEncoded( m_fileName ).data() );
|
||||||
|
}
|
||||||
|
catch ( ... )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
if ( m_ecl_rft_file == nullptr )
|
if ( m_ecl_rft_file == nullptr )
|
||||||
{
|
{
|
||||||
RiaLogging::warning( QString( "Libecl could not find/open file '%'" ).arg( m_fileName ) );
|
RiaLogging::warning( QString( "Libecl could not find/open file '%1" ).arg( m_fileName ) );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user