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