diff --git a/opm/output/eclipse/EclipseWriter.hpp b/opm/output/eclipse/EclipseWriter.hpp index 77ddadf3f..cf77e4d8e 100644 --- a/opm/output/eclipse/EclipseWriter.hpp +++ b/opm/output/eclipse/EclipseWriter.hpp @@ -56,7 +56,7 @@ public: * * If NNC is given to the constructor, writes TRANNNC keyword. */ - void writeInit(); + void writeInit(const std::vector& simProps = {}); /*! * \brief Write a reservoir state and summary information to disk. diff --git a/src/opm/output/eclipse/EclipseWriter.cpp b/src/opm/output/eclipse/EclipseWriter.cpp index c89aa1dee..81779fc2c 100644 --- a/src/opm/output/eclipse/EclipseWriter.cpp +++ b/src/opm/output/eclipse/EclipseWriter.cpp @@ -480,7 +480,9 @@ EclipseWriter::Impl::Impl( std::shared_ptr< const EclipseState > eclipseState, , ert_phase_mask( ertPhaseMask( eclipseState->getTableManager() ) ) {} -void EclipseWriter::writeInit() { + +void EclipseWriter::writeInit(const std::vector& simProps) { + if( !this->impl->output_enabled ) return; @@ -536,6 +538,15 @@ void EclipseWriter::writeInit() { } + for (const auto& prop : simProps) { + auto data = prop.data; + convertFromSiTo( data, + units, + prop.dim ); + restrictAndReorderToActiveCells(data, gridToEclipseIdx.size(), gridToEclipseIdx.data()); + fortio.writeKeyword( prop.name , data ); + } + if( this->impl->nnc.hasNNC() ) { std::vector tran; for( NNCdata nd : this->impl->nnc.nncdata() ) diff --git a/tests/test_EclipseWriter.cpp b/tests/test_EclipseWriter.cpp index cc7cee9fb..fc2fb42b2 100644 --- a/tests/test_EclipseWriter.cpp +++ b/tests/test_EclipseWriter.cpp @@ -26,6 +26,7 @@ #include #include +#include #include #include @@ -36,12 +37,15 @@ #include #include #include +#include +#include // ERT stuff #include #include -#include -#include +#include +#include +#include #include @@ -141,11 +145,12 @@ void checkEgridFile( const EclipseGrid& eclGrid ) { fortio_fclose(egridFile); } -void checkInitFile( const Deck& deck ) { +void checkInitFile( const Deck& deck, const std::vector& simProps) { // use ERT directly to inspect the INIT file produced by EclipseWriter - auto initFile = fortio_open_reader("FOO.INIT", /*isFormated=*/0, ECL_ENDIAN_FLIP); + ERT::ert_unique_ptr initFile(ecl_file_open( "FOO.INIT" , 0 )); - while( auto* eclKeyword = ecl_kw_fread_alloc(initFile) ) { + for (int i=0; i < ecl_file_get_size( initFile.get() ); i++) { + ecl_kw_type * eclKeyword = ecl_file_iget_kw( initFile.get( ) , i ); std::string keywordName(ecl_kw_get_header(eclKeyword)); if (keywordName == "PORO") { @@ -165,11 +170,11 @@ void checkInitFile( const Deck& deck ) { compareErtData(sourceData, resultData, 1e-4); } - - ecl_kw_free(eclKeyword); } - fortio_fclose(initFile); + for (const auto& prop : simProps) { + BOOST_CHECK( ecl_file_has_kw( initFile.get() , prop.name.c_str()) ); + } } void checkRestartFile( int timeStepIdx ) { @@ -216,9 +221,6 @@ void checkRestartFile( int timeStepIdx ) { BOOST_AUTO_TEST_CASE(EclipseWriterIntegration) { - - test_work_area_type * test_area = test_work_area_alloc("TEST_EclipseWriterIntegration"); - const char *deckString = "RUNSPEC\n" "UNIFOUT\n" @@ -262,27 +264,35 @@ BOOST_AUTO_TEST_CASE(EclipseWriterIntegration) auto& eclGrid = *es->getInputGrid(); { + ERT::TestArea ta("test_ecl_writer"); EclipseWriter eclWriter( es, 3 * 3 * 3, nullptr, NNC()); auto start_time = util_make_datetime( 0, 0, 0, 10, 10, 2008 ); auto first_step = util_make_datetime( 0, 0, 0, 10, 11, 2008 ); - eclWriter.writeInit(); + std::vector tranx(3*3*3); + std::vector trany(3*3*3); + std::vector tranz(3*3*3); + std::vector simProps{{"TRANX" , UnitSystem::measure::transmissibility, tranx}, + {"TRANY" , UnitSystem::measure::transmissibility, trany}, + {"TRANZ" , UnitSystem::measure::transmissibility, tranz}}; + + ta.setStore( true ); + std::cout << "Working in: " << ta.getCwd() << std::endl; + eclWriter.writeInit( ); + eclWriter.writeInit( simProps ); data::Wells wells; for( int i = 0; i < 5; ++i ) { eclWriter.writeTimeStep( i, - first_step - start_time, - createBlackoilState( i, 3 * 3 * 3 ), - wells, false); + first_step - start_time, + createBlackoilState( i, 3 * 3 * 3 ), + wells, false); checkRestartFile( i ); } + checkInitFile( *deck , simProps); + checkEgridFile( eclGrid ); } - - checkEgridFile( eclGrid ); - checkInitFile( *deck ); - - test_work_area_free(test_area); }