@@ -3249,6 +3249,119 @@ TEST_CASE( "serial_iterator", "[serial][adios2]" )
32493249 }
32503250}
32513251
3252+ void
3253+ stepBasedSingleIteration ( std::string const & file )
3254+ {
3255+ std::string config = R"END(
3256+ {
3257+ "adios2":
3258+ {
3259+ "new_attribute_layout": true,
3260+ "engine":
3261+ {
3262+ "usesteps": true
3263+ }
3264+ }
3265+ })END" ;
3266+ constexpr Extent::value_type extent = 1000 ;
3267+ {
3268+ Series writeSeries ( file, Access::CREATE, config );
3269+ writeSeries.setIterationEncoding ( IterationEncoding::stepBased );
3270+ auto iterations = writeSeries.writeIterations ();
3271+ auto iteration = writeSeries.iterations [ 0 ];
3272+ auto E_x = iteration.meshes [ " E" ][ " x" ];
3273+ E_x.resetDataset (
3274+ openPMD::Dataset ( openPMD::Datatype::INT, { 1000 } ) );
3275+ std::vector< int > data ( 1000 , 0 );
3276+ std::iota ( data.begin (), data.end (), 0 );
3277+ E_x.storeChunk ( data, { 0 }, { 1000 } );
3278+ writeSeries.flush ();
3279+ }
3280+
3281+ {
3282+ Series readSeries ( file, Access::READ_ONLY, config );
3283+
3284+ auto E_x = readSeries.iterations [ 0 ].meshes [ " E" ][ " x" ];
3285+ REQUIRE ( E_x.getDimensionality () == 1 );
3286+ REQUIRE ( E_x.getExtent ()[ 0 ] == extent );
3287+ auto chunk = E_x.loadChunk < int >( { 0 }, { extent } );
3288+ readSeries.flush ();
3289+ for ( size_t i = 0 ; i < extent; ++i )
3290+ {
3291+ REQUIRE ( chunk.get ()[ i ] == i );
3292+ }
3293+ }
3294+ }
3295+
3296+ TEST_CASE ( " stepBasedSingleIteration" , " [serial][adios2]" )
3297+ {
3298+ for ( auto const & t : testedFileExtensions () )
3299+ {
3300+ stepBasedSingleIteration ( " ../samples/stepBasedSingleIteration." + t );
3301+ }
3302+ }
3303+
3304+ #if openPMD_HAVE_ADIOS2
3305+ void
3306+ stepBasedSeries ( std::string const & file )
3307+ {
3308+ std::string config = R"END(
3309+ {
3310+ "adios2":
3311+ {
3312+ "new_attribute_layout": true,
3313+ "engine":
3314+ {
3315+ "usesteps": true
3316+ }
3317+ }
3318+ })END" ;
3319+ constexpr Extent::value_type extent = 1000 ;
3320+ {
3321+ Series writeSeries ( file, Access::CREATE, config );
3322+ if ( writeSeries.backend () == " ADIOS1" )
3323+ {
3324+ return ;
3325+ }
3326+ writeSeries.setIterationEncoding ( IterationEncoding::stepBased );
3327+ auto iterations = writeSeries.writeIterations ();
3328+ for ( size_t i = 0 ; i < 10 ; ++i )
3329+ {
3330+ auto iteration = iterations[ i ];
3331+ auto E_x = iteration.meshes [ " E" ][ " x" ];
3332+ E_x.resetDataset (
3333+ openPMD::Dataset ( openPMD::Datatype::INT, { 1000 } ) );
3334+ std::vector< int > data ( 1000 , i );
3335+ E_x.storeChunk ( data, { 0 }, { 1000 } );
3336+ iteration.close ();
3337+ }
3338+ }
3339+
3340+ Series readSeries ( file, Access::READ_ONLY, config );
3341+
3342+ size_t last_iteration_index = 0 ;
3343+ for ( auto iteration : readSeries.readIterations () )
3344+ {
3345+ auto E_x = iteration.meshes [ " E" ][ " x" ];
3346+ REQUIRE ( E_x.getDimensionality () == 1 );
3347+ REQUIRE ( E_x.getExtent ()[ 0 ] == extent );
3348+ auto chunk = E_x.loadChunk < int >( { 0 }, { extent } );
3349+ iteration.close ();
3350+ for ( size_t i = 0 ; i < extent; ++i )
3351+ {
3352+ REQUIRE ( chunk.get ()[ i ] == iteration.iterationIndex );
3353+ }
3354+ last_iteration_index = iteration.iterationIndex ;
3355+ }
3356+ REQUIRE ( last_iteration_index == 9 );
3357+ }
3358+
3359+ TEST_CASE ( " stepBasedSeries" , " [serial][adios2]" )
3360+ {
3361+ stepBasedSeries ( " ../samples/stepBasedSeries.bp" );
3362+ }
3363+ #endif
3364+
32523365void
32533366iterate_nonstreaming_series ( std::string const & file )
32543367{
0 commit comments