From 77abcfe855f4dc0d67af48de2f370a1927eeec1b Mon Sep 17 00:00:00 2001 From: Peter Petrik Date: Thu, 9 Jan 2020 12:29:25 +0100 Subject: [PATCH] fix #196 support timeunits for old ASCII dat format --- mdal/frmts/mdal_ascii_dat.cpp | 11 ++++++++--- .../quad_and_triangle_vertex_scalar_old3.dat | 15 +++++++++++++++ tests/test_ascii_dat.cpp | 15 ++++++++++++++- 3 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 tests/data/ascii_dat/quad_and_triangle_vertex_scalar_old3.dat diff --git a/mdal/frmts/mdal_ascii_dat.cpp b/mdal/frmts/mdal_ascii_dat.cpp index 07b2f729..ce26163f 100644 --- a/mdal/frmts/mdal_ascii_dat.cpp +++ b/mdal/frmts/mdal_ascii_dat.cpp @@ -57,7 +57,8 @@ bool MDAL::DriverAsciiDat::canReadOldFormat( const std::string &line ) const { return MDAL::contains( line, "SCALAR" ) || MDAL::contains( line, "VECTOR" ) || - MDAL::contains( line, "TS" ); + MDAL::contains( line, "TS" ) || + MDAL::contains( line, "TIMEUNITS" ); } bool MDAL::DriverAsciiDat::canReadNewFormat( const std::string &line ) const @@ -85,7 +86,7 @@ void MDAL::DriverAsciiDat::loadOldFormat( std::ifstream &in, ); group->setIsScalar( !isVector ); group->setDataLocation( MDAL_DataLocation::DataOnVertices2D ); - + MDAL::RelativeTimestamp::Unit timeUnits = MDAL::RelativeTimestamp::hours; do { // Replace tabs by spaces, @@ -114,10 +115,14 @@ void MDAL::DriverAsciiDat::loadOldFormat( std::ifstream &in, { // just ignore - we know the type from earlier... } + else if ( cardType == "TIMEUNITS" && items.size() >= 2 ) + { + timeUnits = MDAL::parseDurationTimeUnit( items[1] ); + } else if ( cardType == "TS" && items.size() >= 2 ) { double rawTime = toDouble( items[ 1 ] ); - MDAL::RelativeTimestamp t( rawTime, MDAL::RelativeTimestamp::hours ); + MDAL::RelativeTimestamp t( rawTime, timeUnits ); readVertexTimestep( mesh, group, t, isVector, false, in ); } else diff --git a/tests/data/ascii_dat/quad_and_triangle_vertex_scalar_old3.dat b/tests/data/ascii_dat/quad_and_triangle_vertex_scalar_old3.dat new file mode 100644 index 00000000..f922609d --- /dev/null +++ b/tests/data/ascii_dat/quad_and_triangle_vertex_scalar_old3.dat @@ -0,0 +1,15 @@ +SCALAR +TIMEUNITS Seconds +ND 5 +TS 0 +1 +2 +3 +4 +5 +TS 3600 +6 +7 +8 +9 +10 diff --git a/tests/test_ascii_dat.cpp b/tests/test_ascii_dat.cpp index c320edf3..42b458c7 100644 --- a/tests/test_ascii_dat.cpp +++ b/tests/test_ascii_dat.cpp @@ -315,7 +315,7 @@ TEST( MeshAsciiDatTest, QuadAndTriangleVertexScalarFile ) TEST( MeshAsciiDatTest, QuadAndTriangleVertexScalarOldFile ) { - for ( int i = 0; i < 3; ++i ) + for ( int i = 0; i < 4; ++i ) { std::string name = "quad_and_triangle_vertex_scalar_old" + std::to_string( i ); MeshH m = mesh(); @@ -361,6 +361,19 @@ TEST( MeshAsciiDatTest, QuadAndTriangleVertexScalarOldFile ) value = getValue( ds, 1 ); EXPECT_DOUBLE_EQ( 2, value ); + ds = MDAL_G_dataset( g, 1 ); + double time = MDAL_D_time( ds ); + if ( i == 3 ) + { + // With timeunits + EXPECT_DOUBLE_EQ( time, 1.0 ); + } + else + { + // default timeunits + EXPECT_DOUBLE_EQ( time, 3600.0 ); + } + MDAL_CloseMesh( m ); } }