@@ -3304,6 +3304,119 @@ TEST_CASE( "serial_iterator", "[serial][adios2]" )
33043304 }
33053305}
33063306
3307+ void
3308+ stepBasedSingleIteration ( std::string const & file )
3309+ {
3310+ std::string config = R"END(
3311+ {
3312+ "adios2":
3313+ {
3314+ "new_attribute_layout": true,
3315+ "engine":
3316+ {
3317+ "usesteps": true
3318+ }
3319+ }
3320+ })END" ;
3321+ constexpr Extent::value_type extent = 1000 ;
3322+ {
3323+ Series writeSeries ( file, Access::CREATE, config );
3324+ writeSeries.setIterationEncoding ( IterationEncoding::stepBased );
3325+ auto iterations = writeSeries.writeIterations ();
3326+ auto iteration = writeSeries.iterations [ 0 ];
3327+ auto E_x = iteration.meshes [ " E" ][ " x" ];
3328+ E_x.resetDataset (
3329+ openPMD::Dataset ( openPMD::Datatype::INT, { 1000 } ) );
3330+ std::vector< int > data ( 1000 , 0 );
3331+ std::iota ( data.begin (), data.end (), 0 );
3332+ E_x.storeChunk ( data, { 0 }, { 1000 } );
3333+ writeSeries.flush ();
3334+ }
3335+
3336+ {
3337+ Series readSeries ( file, Access::READ_ONLY, config );
3338+
3339+ auto E_x = readSeries.iterations [ 0 ].meshes [ " E" ][ " x" ];
3340+ REQUIRE ( E_x.getDimensionality () == 1 );
3341+ REQUIRE ( E_x.getExtent ()[ 0 ] == extent );
3342+ auto chunk = E_x.loadChunk < int >( { 0 }, { extent } );
3343+ readSeries.flush ();
3344+ for ( size_t i = 0 ; i < extent; ++i )
3345+ {
3346+ REQUIRE ( chunk.get ()[ i ] == i );
3347+ }
3348+ }
3349+ }
3350+
3351+ TEST_CASE ( " stepBasedSingleIteration" , " [serial][adios2]" )
3352+ {
3353+ for ( auto const & t : testedFileExtensions () )
3354+ {
3355+ stepBasedSingleIteration ( " ../samples/stepBasedSingleIteration." + t );
3356+ }
3357+ }
3358+
3359+ #if openPMD_HAVE_ADIOS2
3360+ void
3361+ stepBasedSeries ( std::string const & file )
3362+ {
3363+ std::string config = R"END(
3364+ {
3365+ "adios2":
3366+ {
3367+ "new_attribute_layout": true,
3368+ "engine":
3369+ {
3370+ "usesteps": true
3371+ }
3372+ }
3373+ })END" ;
3374+ constexpr Extent::value_type extent = 1000 ;
3375+ {
3376+ Series writeSeries ( file, Access::CREATE, config );
3377+ if ( writeSeries.backend () == " ADIOS1" )
3378+ {
3379+ return ;
3380+ }
3381+ writeSeries.setIterationEncoding ( IterationEncoding::stepBased );
3382+ auto iterations = writeSeries.writeIterations ();
3383+ for ( size_t i = 0 ; i < 10 ; ++i )
3384+ {
3385+ auto iteration = iterations[ i ];
3386+ auto E_x = iteration.meshes [ " E" ][ " x" ];
3387+ E_x.resetDataset (
3388+ openPMD::Dataset ( openPMD::Datatype::INT, { 1000 } ) );
3389+ std::vector< int > data ( 1000 , i );
3390+ E_x.storeChunk ( data, { 0 }, { 1000 } );
3391+ iteration.close ();
3392+ }
3393+ }
3394+
3395+ Series readSeries ( file, Access::READ_ONLY, config );
3396+
3397+ size_t last_iteration_index = 0 ;
3398+ for ( auto iteration : readSeries.readIterations () )
3399+ {
3400+ auto E_x = iteration.meshes [ " E" ][ " x" ];
3401+ REQUIRE ( E_x.getDimensionality () == 1 );
3402+ REQUIRE ( E_x.getExtent ()[ 0 ] == extent );
3403+ auto chunk = E_x.loadChunk < int >( { 0 }, { extent } );
3404+ iteration.close ();
3405+ for ( size_t i = 0 ; i < extent; ++i )
3406+ {
3407+ REQUIRE ( chunk.get ()[ i ] == iteration.iterationIndex );
3408+ }
3409+ last_iteration_index = iteration.iterationIndex ;
3410+ }
3411+ REQUIRE ( last_iteration_index == 9 );
3412+ }
3413+
3414+ TEST_CASE ( " stepBasedSeries" , " [serial][adios2]" )
3415+ {
3416+ stepBasedSeries ( " ../samples/stepBasedSeries.bp" );
3417+ }
3418+ #endif
3419+
33073420void
33083421iterate_nonstreaming_series ( std::string const & file )
33093422{
0 commit comments