From ec9135b658e18e80c621a63d86df24ff983794be Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Sun, 11 Oct 2026 15:49:28 +0200 Subject: [PATCH] #14903: Ignore empty restart files in opm-common reader --- .../FileInterface/RifReaderOpmCommon.cpp | 5 +++- .../UnitTests/RifReaderOpmCommon-Test.cpp | 26 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/ApplicationLibCode/FileInterface/RifReaderOpmCommon.cpp b/ApplicationLibCode/FileInterface/RifReaderOpmCommon.cpp index eb9d45b262..f433c9158f 100644 --- a/ApplicationLibCode/FileInterface/RifReaderOpmCommon.cpp +++ b/ApplicationLibCode/FileInterface/RifReaderOpmCommon.cpp @@ -911,6 +911,9 @@ void RifReaderOpmCommon::setupInitAndRestartAccess() m_restartFile = std::make_unique( m_restartFileName ); + // An empty restart file, e.g. while the simulation is starting, reports step 0 without any arrays + if ( m_restartFile->size() == 0 ) m_restartFile = nullptr; + const bool isLoggingEnabled = RiaPreferencesSystem::current()->isLoggingActivatedForKeyword( "RifReaderOpmCommon" ); if ( isLoggingEnabled ) RiaLogging::logElapsedTime( "Import of meta data from " + m_restartFileName, startTime ); } @@ -1096,7 +1099,7 @@ void RifReaderOpmCommon::buildMetaData( RigEclipseCaseData* eclipseCaseData, caf } auto task = progress.task( "Handling well information", 10 ); - if ( loadWellDataEnabled() && !m_restartFileName.empty() ) + if ( loadWellDataEnabled() && m_restartFile != nullptr ) { auto startTime = RiaLogging::currentTime(); diff --git a/ApplicationLibCode/UnitTests/RifReaderOpmCommon-Test.cpp b/ApplicationLibCode/UnitTests/RifReaderOpmCommon-Test.cpp index 395254df27..4b90e1d2f6 100644 --- a/ApplicationLibCode/UnitTests/RifReaderOpmCommon-Test.cpp +++ b/ApplicationLibCode/UnitTests/RifReaderOpmCommon-Test.cpp @@ -23,8 +23,13 @@ #include "RiaEclipseUnitTools.h" #include "RiaTestDataDirectory.h" +#include "RigEclipseCaseData.h" + #include "opm/io/eclipse/ERst.hpp" +#include +#include + #include #include @@ -91,3 +96,24 @@ TEST( RifReaderOpmCommon, RestartDataSize ) EXPECT_EQ( 0, RifReaderOpmCommon::restartDataSize( restartFile, "XXXX", reportStep ) ); EXPECT_THROW( RifReaderOpmCommon::restartDataSize( restartFile, "PRESSURE", 99 ), std::invalid_argument ); } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +TEST( RifReaderOpmCommon, EmptyRestartFile ) +{ + QTemporaryDir tempDir; + ASSERT_TRUE( tempDir.isValid() ); + + const QString sourceGrid = QString( TEST_MODEL_DIR ) + "/TEST10K_FLT_LGR_NNC/TEST10K_FLT_LGR_NNC.EGRID"; + const QString gridFile = tempDir.filePath( "EMPTY_RESTART.EGRID" ); + ASSERT_TRUE( QFile::copy( sourceGrid, gridFile ) ); + + QFile restartFile( tempDir.filePath( "EMPTY_RESTART.UNRST" ) ); + ASSERT_TRUE( restartFile.open( QIODevice::WriteOnly ) ); + restartFile.close(); + + cvf::ref caseData = new RigEclipseCaseData( nullptr ); + cvf::ref reader = new RifReaderOpmCommon; + EXPECT_TRUE( reader->open( gridFile, caseData.p() ) ); +}