From 5aba6e1beac3dcc7ef3d061add5014cb27dbe6e9 Mon Sep 17 00:00:00 2001 From: Kenneth Moreland Date: Mon, 13 Mar 2023 13:38:01 -0600 Subject: [PATCH] Remove unlicensed data Some of the test data sets are derived from data sets that are commonly distributed to test visualization algorithms and are featured in numerous papers. However, I am unable to track down the original source let alone identify what license, if any, they were released under. To avoid any complications with data ownership, remove these data sets and replace them with in house data sets that we explicitly own. --- data/data/curvilinear/kitchen.vtk | 3 + data/data/rectilinear/fishtank.vtk | 3 - .../rectilinear/fishtank_double_ascii.vtk | 3 - .../fishtank_double_big_endian.vtk | 3 - data/data/rectilinear/fusion.vtk | 3 - data/data/rectilinear/magField.vtk | 3 - data/data/uniform/rotate-vectors.vtk | 3 + .../particle_advection/ParticleAdvection.cxx | 10 +- examples/streamline_mpi/StreamlineMPI.cxx | 6 +- .../flow/testing/UnitTestStreamlineFilter.cxx | 96 +++--- .../UnitTestWorkletParticleAdvection.cxx | 66 ++-- vtkm/io/testing/UnitTestVTKDataSetReader.cxx | 307 +++++------------- 12 files changed, 187 insertions(+), 319 deletions(-) create mode 100644 data/data/curvilinear/kitchen.vtk delete mode 100644 data/data/rectilinear/fishtank.vtk delete mode 100644 data/data/rectilinear/fishtank_double_ascii.vtk delete mode 100644 data/data/rectilinear/fishtank_double_big_endian.vtk delete mode 100644 data/data/rectilinear/fusion.vtk delete mode 100644 data/data/rectilinear/magField.vtk create mode 100644 data/data/uniform/rotate-vectors.vtk diff --git a/data/data/curvilinear/kitchen.vtk b/data/data/curvilinear/kitchen.vtk new file mode 100644 index 000000000..c9455842d --- /dev/null +++ b/data/data/curvilinear/kitchen.vtk @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:29d6de0eb33dfb792405d3903b1ede382cac417c29bb5d7e17e60be384db42cc +size 1940269 diff --git a/data/data/rectilinear/fishtank.vtk b/data/data/rectilinear/fishtank.vtk deleted file mode 100644 index e1ab1c481..000000000 --- a/data/data/rectilinear/fishtank.vtk +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ef3dfd79f0c8d18780d0749014d71c0226134041283d33de0bcd994e343dd421 -size 2001070 diff --git a/data/data/rectilinear/fishtank_double_ascii.vtk b/data/data/rectilinear/fishtank_double_ascii.vtk deleted file mode 100644 index fce0d5b9c..000000000 --- a/data/data/rectilinear/fishtank_double_ascii.vtk +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2bb3d36ea5ecef5e7ef1057d0dddebbc590424915083091ead3dac2928000524 -size 2904465 diff --git a/data/data/rectilinear/fishtank_double_big_endian.vtk b/data/data/rectilinear/fishtank_double_big_endian.vtk deleted file mode 100644 index 7ecfbc133..000000000 --- a/data/data/rectilinear/fishtank_double_big_endian.vtk +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bffad7dae3dd6ef018ad7a9e109464ced0f3b9bc15cf1fb5d555f6d0d00b621f -size 3001624 diff --git a/data/data/rectilinear/fusion.vtk b/data/data/rectilinear/fusion.vtk deleted file mode 100644 index 5c5212da1..000000000 --- a/data/data/rectilinear/fusion.vtk +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2cbdf56fd5445ddc5b6bc05507b8825fb8d74fe1ccce894bde03e5ff2ecf5fb6 -size 525141 diff --git a/data/data/rectilinear/magField.vtk b/data/data/rectilinear/magField.vtk deleted file mode 100644 index a79db3589..000000000 --- a/data/data/rectilinear/magField.vtk +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b947d66dbae99a1ebb392b200a9ea0d380cfccb7fcb3a3739615d0dde558d2f1 -size 238166 diff --git a/data/data/uniform/rotate-vectors.vtk b/data/data/uniform/rotate-vectors.vtk new file mode 100644 index 000000000..f1d45e33e --- /dev/null +++ b/data/data/uniform/rotate-vectors.vtk @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:13241631e0d65d17d7bad2be44b52c0352797135fb585647f5c821e439ff9817 +size 862894 diff --git a/examples/particle_advection/ParticleAdvection.cxx b/examples/particle_advection/ParticleAdvection.cxx index cc2885918..f56240897 100644 --- a/examples/particle_advection/ParticleAdvection.cxx +++ b/examples/particle_advection/ParticleAdvection.cxx @@ -16,11 +16,11 @@ #include // Example computing streamlines. -// An example vector field is available in the vtk-m data directory: magField.vtk +// An example vector field is available in the vtk-m data directory: rotate-vectors.vtk // Example usage: -// this will advect 200 particles 50 steps using a step size of 0.01 +// this will advect 200 particles 50 steps using a step size of 0.05 // -// Particle_Advection /magField.vtk vec 200 50 0.01 output.vtk +// Particle_Advection /rotate-vectors.vtk rotate 200 50 0.05 output.vtk // int main(int argc, char** argv) @@ -28,10 +28,10 @@ int main(int argc, char** argv) auto opts = vtkm::cont::InitializeOptions::DefaultAnyDevice; auto config = vtkm::cont::Initialize(argc, argv, opts); - if (argc < 8) + if (argc < 7) { std::cerr << "Usage: " << argv[0] - << "dataFile varName numSeeds numSteps stepSize outputFile [options]" << std::endl; + << " dataFile varName numSeeds numSteps stepSize outputFile [options]" << std::endl; std::cerr << "where options are: " << std::endl << config.Usage << std::endl; return -1; } diff --git a/examples/streamline_mpi/StreamlineMPI.cxx b/examples/streamline_mpi/StreamlineMPI.cxx index aec518cec..273340898 100644 --- a/examples/streamline_mpi/StreamlineMPI.cxx +++ b/examples/streamline_mpi/StreamlineMPI.cxx @@ -76,11 +76,11 @@ void LoadData(std::string& fname, std::vector& dataSets, in } // Example computing streamlines. -// An example vector field is available in the vtk-m data directory: magField.vtk +// An example vector field is available in the vtk-m data directory: rotate-vectors.vtk // Example usage: -// this will advect 200 particles 50 steps using a step size of 0.01 +// this will advect 200 particles 50 steps using a step size of 0.05 // -// Particle_Advection /magField.vtk vec 200 50 0.01 output.vtk +// Particle_Advection /rotate-vectors.vtk vec 200 50 0.05 output.vtk // int main(int argc, char** argv) diff --git a/vtkm/filter/flow/testing/UnitTestStreamlineFilter.cxx b/vtkm/filter/flow/testing/UnitTestStreamlineFilter.cxx index 34116f632..7928e6e1c 100644 --- a/vtkm/filter/flow/testing/UnitTestStreamlineFilter.cxx +++ b/vtkm/filter/flow/testing/UnitTestStreamlineFilter.cxx @@ -513,24 +513,25 @@ void ValidateEndPoints(const CellSetType& cellSet, } } -void TestStreamlineFile(const std::string& fname, +void TestStreamlineFile(const std::string& fileName, + const std::string& fieldName, const std::vector& pts, vtkm::FloatDefault stepSize, vtkm::Id maxSteps, const std::vector& endPts, bool useSL) { - vtkm::io::VTKDataSetReader reader(fname); + vtkm::io::VTKDataSetReader reader(fileName); vtkm::cont::DataSet ds; try { ds = reader.ReadDataSet(); - VTKM_TEST_ASSERT(ds.HasField("vec")); + VTKM_TEST_ASSERT(ds.HasField(fieldName)); } catch (vtkm::io::ErrorIO& e) { std::string message("Error reading: "); - message += fname; + message += fileName; message += ", "; message += e.GetMessage(); @@ -550,7 +551,7 @@ void TestStreamlineFile(const std::string& fname, streamline.SetStepSize(stepSize); streamline.SetNumberOfSteps(maxSteps); streamline.SetSeeds(seedArray); - streamline.SetActiveField("vec"); + streamline.SetActiveField(fieldName); output = streamline.Execute(ds); } else @@ -559,7 +560,7 @@ void TestStreamlineFile(const std::string& fname, particleAdvection.SetStepSize(stepSize); particleAdvection.SetNumberOfSteps(maxSteps); particleAdvection.SetSeeds(seedArray); - particleAdvection.SetActiveField("vec"); + particleAdvection.SetActiveField(fieldName); output = particleAdvection.Execute(ds); } @@ -604,48 +605,59 @@ void TestStreamlineFilters() for (auto useSL : flags) TestAMRStreamline(useSL); - //Fusion test. - std::vector fusionPts, fusionEndPts; - fusionPts.push_back(vtkm::Vec3f(0.8f, 0.6f, 0.6f)); - fusionPts.push_back(vtkm::Vec3f(0.8f, 0.8f, 0.6f)); - fusionPts.push_back(vtkm::Vec3f(0.8f, 0.8f, 0.3f)); - //End point values were generated in VisIt. - fusionEndPts.push_back(vtkm::Vec3f(0.5335789918f, 0.87112802267f, 0.6723330020f)); - fusionEndPts.push_back(vtkm::Vec3f(0.5601879954f, 0.91389900446f, 0.43989110522f)); - fusionEndPts.push_back(vtkm::Vec3f(0.7004770041f, 0.63193398714f, 0.64524400234f)); - vtkm::FloatDefault fusionStep = 0.005f; - std::string fusionFile = vtkm::cont::testing::Testing::DataPath("rectilinear/fusion.vtk"); + { + //Rotate test. + std::vector startPoints, endPoints; + startPoints.push_back(vtkm::Vec3f(0.4f, 0.3f, -0.2f)); + startPoints.push_back(vtkm::Vec3f(-0.4f, 0.0f, -0.84f)); + startPoints.push_back(vtkm::Vec3f(0.0f, 0.0f, 0.41f)); + //End point values were generated in VisIt. + endPoints.push_back(vtkm::Vec3f(-0.341196f, 0.474331f, 0.142614f)); + endPoints.push_back(vtkm::Vec3f(-0.342764f, -0.713572f, -0.746209f)); + endPoints.push_back(vtkm::Vec3f(-0.617492f, -0.0167f, 0.104733f)); + vtkm::FloatDefault stepSize = 0.1f; + std::string file = vtkm::cont::testing::Testing::DataPath("uniform/rotate-vectors.vtk"); - for (auto useSL : flags) - TestStreamlineFile(fusionFile, fusionPts, fusionStep, 1000, fusionEndPts, useSL); + for (auto useSL : flags) + { + TestStreamlineFile(file, "rotate", startPoints, stepSize, 1000, endPoints, useSL); + } + } - //Fishtank test. - std::vector fishPts, fishEndPts; - fishPts.push_back(vtkm::Vec3f(0.75f, 0.5f, 0.01f)); - fishPts.push_back(vtkm::Vec3f(0.4f, 0.2f, 0.7f)); - fishPts.push_back(vtkm::Vec3f(0.5f, 0.3f, 0.8f)); - //End point values were generated in VisIt. - fishEndPts.push_back(vtkm::Vec3f(0.7734669447f, 0.4870159328f, 0.8979591727f)); - fishEndPts.push_back(vtkm::Vec3f(0.7257543206f, 0.1277695596f, 0.7468645573f)); - fishEndPts.push_back(vtkm::Vec3f(0.8347796798f, 0.1276152730f, 0.4985143244f)); - vtkm::FloatDefault fishStep = 0.001f; - std::string fishFile = vtkm::cont::testing::Testing::DataPath("rectilinear/fishtank.vtk"); + { + //Kitchen test. + std::vector startPoints, endPoints; + startPoints.push_back(vtkm::Vec3f(6.0f, 1.0f, 2.0f)); + startPoints.push_back(vtkm::Vec3f(1.3f, 2.4f, 1.3f)); + startPoints.push_back(vtkm::Vec3f(1.0f, 3.0f, 2.0f)); + //End point values were generated in VisIt. + endPoints.push_back(vtkm::Vec3f(4.42419f, 0.956935f, 1.89111f)); + endPoints.push_back(vtkm::Vec3f(0.217019f, 3.65243f, 2.49638f)); + endPoints.push_back(vtkm::Vec3f(0.753178f, 0.410568f, 1.11006f)); + vtkm::FloatDefault stepSize = 0.2f; + std::string file = vtkm::cont::testing::Testing::DataPath("curvilinear/kitchen.vtk"); - for (auto useSL : flags) - TestStreamlineFile(fishFile, fishPts, fishStep, 100, fishEndPts, useSL); + for (auto useSL : flags) + { + TestStreamlineFile(file, "velocity", startPoints, stepSize, 2000, endPoints, useSL); + } + } - //ARMWind corner case of particle near boundary. - std::string amrWindFile = - vtkm::cont::testing::Testing::DataPath("rectilinear/amr_wind_flowfield.vtk"); - vtkm::FloatDefault amrWindStep = 0.001f; - std::vector amrWindPts, amrWindEndPts; + { + //ARMWind corner case of particle near boundary. + std::string file = vtkm::cont::testing::Testing::DataPath("rectilinear/amr_wind_flowfield.vtk"); + vtkm::FloatDefault stepSize = 0.001f; + std::vector startPoints, endPoints; - amrWindPts.push_back( - vtkm::Vec3f(0.053217993470017745f, 0.034506499099396459f, 0.057097713925011492f)); - amrWindEndPts.push_back(vtkm::Vec3f(0.05712112784f, 0.03450008854f, 0.02076501213f)); + startPoints.push_back( + vtkm::Vec3f(0.053217993470017745f, 0.034506499099396459f, 0.057097713925011492f)); + endPoints.push_back(vtkm::Vec3f(0.05712112784f, 0.03450008854f, 0.02076501213f)); - for (auto useSL : flags) - TestStreamlineFile(amrWindFile, amrWindPts, amrWindStep, 10000, amrWindEndPts, useSL); + for (auto useSL : flags) + { + TestStreamlineFile(file, "vec", startPoints, stepSize, 10000, endPoints, useSL); + } + } } } diff --git a/vtkm/filter/flow/testing/UnitTestWorkletParticleAdvection.cxx b/vtkm/filter/flow/testing/UnitTestWorkletParticleAdvection.cxx index fafcbea42..1ac75c5a7 100644 --- a/vtkm/filter/flow/testing/UnitTestWorkletParticleAdvection.cxx +++ b/vtkm/filter/flow/testing/UnitTestWorkletParticleAdvection.cxx @@ -839,15 +839,16 @@ void ValidateResult(const ResultType& res, } -void TestParticleAdvectionFile(const std::string& fname, +void TestParticleAdvectionFile(const std::string& fileName, + const std::string& fieldName, const std::vector& pts, vtkm::FloatDefault stepSize, vtkm::Id maxSteps, const std::vector& endPts) { - VTKM_LOG_S(vtkm::cont::LogLevel::Info, "Testing particle advection on file " << fname); - vtkm::io::VTKDataSetReader reader(fname); + VTKM_LOG_S(vtkm::cont::LogLevel::Info, "Testing particle advection on file " << fileName); + vtkm::io::VTKDataSetReader reader(fileName); vtkm::cont::DataSet ds; try { @@ -856,7 +857,7 @@ void TestParticleAdvectionFile(const std::string& fname, catch (vtkm::io::ErrorIO& e) { std::string message("Error reading: "); - message += fname; + message += fileName; message += ", "; message += e.GetMessage(); @@ -869,8 +870,8 @@ void TestParticleAdvectionFile(const std::string& fname, using RK4Type = vtkm::worklet::flow::RK4Integrator; using Stepper = vtkm::worklet::flow::Stepper; - VTKM_TEST_ASSERT(ds.HasField("vec"), "Data set missing a field named 'vec'"); - vtkm::cont::Field& field = ds.GetField("vec"); + VTKM_TEST_ASSERT(ds.HasField(fieldName), "Data set missing a field named ", fieldName); + vtkm::cont::Field& field = ds.GetField(fieldName); auto fieldData = field.GetData(); FieldHandle fieldArray; @@ -923,32 +924,35 @@ void TestParticleAdvection() TestWorkletsBasic(); TestParticleWorkletsWithDataSetTypes(); - //Fusion test. - std::vector fusionPts, fusionEndPts; - fusionPts.push_back(vtkm::Vec3f(0.8f, 0.6f, 0.6f)); - fusionPts.push_back(vtkm::Vec3f(0.8f, 0.8f, 0.6f)); - fusionPts.push_back(vtkm::Vec3f(0.8f, 0.8f, 0.3f)); - //End point values were generated in VisIt. - fusionEndPts.push_back(vtkm::Vec3f(0.5335789918f, 0.87112802267f, 0.6723330020f)); - fusionEndPts.push_back(vtkm::Vec3f(0.5601879954f, 0.91389900446f, 0.43989110522f)); - fusionEndPts.push_back(vtkm::Vec3f(0.7004770041f, 0.63193398714f, 0.64524400234f)); - vtkm::FloatDefault fusionStep = 0.005f; - std::string fusionFile = vtkm::cont::testing::Testing::DataPath("rectilinear/fusion.vtk"); - TestParticleAdvectionFile(fusionFile, fusionPts, fusionStep, 1000, fusionEndPts); + { + //Rotate test. + std::vector startPoints, endPoints; + startPoints.push_back(vtkm::Vec3f(0.4f, 0.3f, -0.2f)); + startPoints.push_back(vtkm::Vec3f(-0.4f, 0.0f, -0.84f)); + startPoints.push_back(vtkm::Vec3f(0.0f, 0.0f, 0.41f)); + //End point values were generated in VisIt. + endPoints.push_back(vtkm::Vec3f(-0.341196f, 0.474331f, 0.142614f)); + endPoints.push_back(vtkm::Vec3f(-0.342764f, -0.713572f, -0.746209f)); + endPoints.push_back(vtkm::Vec3f(-0.617492f, -0.0167f, 0.104733f)); + vtkm::FloatDefault stepSize = 0.1f; + std::string file = vtkm::cont::testing::Testing::DataPath("uniform/rotate-vectors.vtk"); + TestParticleAdvectionFile(file, "rotate", startPoints, stepSize, 1000, endPoints); + } - //Fishtank test. - std::vector fishPts, fishEndPts; - fishPts.push_back(vtkm::Vec3f(0.75f, 0.5f, 0.01f)); - fishPts.push_back(vtkm::Vec3f(0.4f, 0.2f, 0.7f)); - fishPts.push_back(vtkm::Vec3f(0.5f, 0.3f, 0.8f)); - //End point values were generated in VisIt. - fishEndPts.push_back(vtkm::Vec3f(0.7734669447f, 0.4870159328f, 0.8979591727f)); - fishEndPts.push_back(vtkm::Vec3f(0.7257543206f, 0.1277695596f, 0.7468645573f)); - fishEndPts.push_back(vtkm::Vec3f(0.8347796798f, 0.1276152730f, 0.4985143244f)); - - vtkm::FloatDefault fishStep = 0.001f; - std::string fishFile = vtkm::cont::testing::Testing::DataPath("rectilinear/fishtank.vtk"); - TestParticleAdvectionFile(fishFile, fishPts, fishStep, 100, fishEndPts); + { + //Kitchen test. + std::vector startPoints, endPoints; + startPoints.push_back(vtkm::Vec3f(6.0f, 1.0f, 2.0f)); + startPoints.push_back(vtkm::Vec3f(1.3f, 2.4f, 1.3f)); + startPoints.push_back(vtkm::Vec3f(1.0f, 3.0f, 2.0f)); + //End point values were generated in VisIt. + endPoints.push_back(vtkm::Vec3f(4.42419f, 0.956935f, 1.89111f)); + endPoints.push_back(vtkm::Vec3f(0.217019f, 3.65243f, 2.49638f)); + endPoints.push_back(vtkm::Vec3f(0.753178f, 0.410568f, 1.11006f)); + vtkm::FloatDefault stepSize = 0.2f; + std::string file = vtkm::cont::testing::Testing::DataPath("curvilinear/kitchen.vtk"); + TestParticleAdvectionFile(file, "velocity", startPoints, stepSize, 2000, endPoints); + } } int UnitTestWorkletParticleAdvection(int argc, char* argv[]) diff --git a/vtkm/io/testing/UnitTestVTKDataSetReader.cxx b/vtkm/io/testing/UnitTestVTKDataSetReader.cxx index 7270ddffc..edefc4ca7 100644 --- a/vtkm/io/testing/UnitTestVTKDataSetReader.cxx +++ b/vtkm/io/testing/UnitTestVTKDataSetReader.cxx @@ -368,250 +368,115 @@ void TestReadingStructuredGridBin() "Incorrect cellset type"); } -void TestReadingFishTank() +void TestReadingRotate() { - std::string fishtank = vtkm::cont::testing::Testing::DataPath("rectilinear/fishtank.vtk"); - vtkm::cont::DataSet ds = readVTKDataSet(fishtank.c_str()); - - // This is information you can glean by running 'strings' on fishtank.vtk: - VTKM_TEST_ASSERT(ds.GetCellSet().IsType>(), - "Incorrect cellset type"); - VTKM_TEST_ASSERT(ds.GetNumberOfPoints() == 50 * 50 * 50, "Incorrect number of points"); - VTKM_TEST_ASSERT(ds.GetCellSet().GetNumberOfPoints() == 50 * 50 * 50, - "Incorrect number of points (from cell set)"); - VTKM_TEST_ASSERT(ds.GetNumberOfFields() == 3, "Incorrect number of fields"); - VTKM_TEST_ASSERT(ds.HasField("vec"), "The vtk file has a field 'vec', but the dataset does not."); - VTKM_TEST_ASSERT(ds.HasField("vec_magnitude"), - "The vtk file has a field 'vec_magnitude', but the dataset does not."); - - // I believe the coordinate system is implicitly given by the first element of X_COORDINATES: - VTKM_TEST_ASSERT(ds.GetNumberOfCoordinateSystems() == 1, - "Need one and only one coordinate system."); - // In order to get the data from the coordinate system, I used the following workflow: - // First, I deleted all ascii header lines just past 'X_COORDINATES 50 float'. - // Once this is done, I can get the binary data from - // $ od -tfF --endian=big fishtank_copy.vtk - // The result is: - // 0 0.020408163 ... 0.9591837 0.97959185 1 - // So monotone increasing, bound [0,1]. - const vtkm::cont::CoordinateSystem& coordinateSystem = ds.GetCoordinateSystem(); - vtkm::Vec ranges = coordinateSystem.GetRange(); - vtkm::Range xRange = ranges[0]; - VTKM_TEST_ASSERT(xRange.Min == 0); - VTKM_TEST_ASSERT(xRange.Max == 1); - // Do the same past 'Y_COORDINATES 50 float'. - // You get exactly the same as the x data. - vtkm::Range yRange = ranges[1]; - VTKM_TEST_ASSERT(yRange.Min == 0); - VTKM_TEST_ASSERT(yRange.Max == 1); - // And finally, do it past 'Z_COORDINATES 50 float': - vtkm::Range zRange = ranges[2]; - VTKM_TEST_ASSERT(zRange.Min == 0); - VTKM_TEST_ASSERT(zRange.Max == 1); - - // Now delete the text up to LOOKUP TABLE default. - // I see: - // 0 0 0 0 3.5267966 . . . - // This is a vector magnitude, so all values must be >= 0. - // A cursory glance shows that 124.95 is a large value, so we can sanity check the data with the bounds - // [0, ~130]. - // And if we open the file in Paraview, we can observe the bounds [0, 156.905]. - const vtkm::cont::Field& vec_magnitude = ds.GetField("vec_magnitude"); - VTKM_TEST_ASSERT(vec_magnitude.GetName() == "vec_magnitude"); - VTKM_TEST_ASSERT(vec_magnitude.IsPointField()); - - vtkm::Range mag_range; - vec_magnitude.GetRange(&mag_range); - VTKM_TEST_ASSERT(mag_range.Min == 0); - VTKM_TEST_ASSERT(mag_range.Max <= 156.906); - - // This info was gleaned from the Paraview Information panel: - const vtkm::cont::Field& vec = ds.GetField("vec"); - VTKM_TEST_ASSERT(vec.GetName() == "vec"); - VTKM_TEST_ASSERT(vec.IsPointField()); - // Bounds from Information panel: - // [-65.3147, 86.267], [-88.0325, 78.7217], [-67.0969, 156.867] - const vtkm::cont::ArrayHandle& vecRanges = vec.GetRange(); - VTKM_TEST_ASSERT(vecRanges.GetNumberOfValues() == 3); - auto vecRangesReadPortal = vecRanges.ReadPortal(); - - auto xVecRange = vecRangesReadPortal.Get(0); - VTKM_TEST_ASSERT(xVecRange.Min >= -65.3148 && xVecRange.Min <= -65.3146); - VTKM_TEST_ASSERT(xVecRange.Max >= 86.26 && xVecRange.Min <= 86.268); - - auto yVecRange = vecRangesReadPortal.Get(1); - VTKM_TEST_ASSERT(yVecRange.Min >= -88.0326 && yVecRange.Min <= -88.0324); - VTKM_TEST_ASSERT(yVecRange.Max >= 78.721); - VTKM_TEST_ASSERT(yVecRange.Max <= 78.7218); - - auto zVecRange = vecRangesReadPortal.Get(2); - VTKM_TEST_ASSERT(zVecRange.Min >= -67.097 && zVecRange.Min <= -67.096); - VTKM_TEST_ASSERT(zVecRange.Max >= 156.866 && zVecRange.Max <= 156.868); -} - -void TestReadingDoublePrecisionFishTank() -{ - std::string fishtank = - vtkm::cont::testing::Testing::DataPath("rectilinear/fishtank_double_big_endian.vtk"); - vtkm::cont::DataSet ds = readVTKDataSet(fishtank.c_str()); - - // This is information you can glean by running 'strings' on fishtank.vtk: - VTKM_TEST_ASSERT(ds.GetCellSet().IsType>(), - "Incorrect cellset type"); - VTKM_TEST_ASSERT(ds.GetNumberOfPoints() == 50 * 50 * 50, "Incorrect number of points"); - VTKM_TEST_ASSERT(ds.GetCellSet().GetNumberOfPoints() == 50 * 50 * 50, - "Incorrect number of points (from cell set)"); - - VTKM_TEST_ASSERT(ds.HasField("vec"), "The vtk file has a field 'vec', but the dataset does not."); - - - VTKM_TEST_ASSERT(ds.GetNumberOfCoordinateSystems() == 1, - "fishtank has one and only one coordinate system."); - // See the single precision version for info: - const vtkm::cont::CoordinateSystem& coordinateSystem = ds.GetCoordinateSystem(); - vtkm::Vec ranges = coordinateSystem.GetRange(); - vtkm::Range xRange = ranges[0]; - VTKM_TEST_ASSERT(xRange.Min == 0); - VTKM_TEST_ASSERT(xRange.Max == 1); - vtkm::Range yRange = ranges[1]; - VTKM_TEST_ASSERT(yRange.Min == 0); - VTKM_TEST_ASSERT(yRange.Max == 1); - vtkm::Range zRange = ranges[2]; - VTKM_TEST_ASSERT(zRange.Min == 0); - VTKM_TEST_ASSERT(zRange.Max == 1); - - // This info was gleaned from the Paraview Information panel: - const vtkm::cont::Field& vec = ds.GetField("vec"); - VTKM_TEST_ASSERT(vec.GetName() == "vec"); - VTKM_TEST_ASSERT(vec.IsPointField()); - // Bounds from Information panel: - // [-65.3147, 86.267], [-88.0325, 78.7217], [-67.0969, 156.867] - const vtkm::cont::ArrayHandle& vecRanges = vec.GetRange(); - VTKM_TEST_ASSERT(vecRanges.GetNumberOfValues() == 3); - auto vecRangesReadPortal = vecRanges.ReadPortal(); - - auto xVecRange = vecRangesReadPortal.Get(0); - VTKM_TEST_ASSERT(xVecRange.Min >= -65.3148 && xVecRange.Min <= -65.3146); - VTKM_TEST_ASSERT(xVecRange.Max >= 86.26 && xVecRange.Min <= 86.268); - - auto yVecRange = vecRangesReadPortal.Get(1); - VTKM_TEST_ASSERT(yVecRange.Min >= -88.0326 && yVecRange.Min <= -88.0324); - VTKM_TEST_ASSERT(yVecRange.Max >= 78.721); - VTKM_TEST_ASSERT(yVecRange.Max <= 78.7218); - - auto zVecRange = vecRangesReadPortal.Get(2); - VTKM_TEST_ASSERT(zVecRange.Min >= -67.097 && zVecRange.Min <= -67.096); - VTKM_TEST_ASSERT(zVecRange.Max >= 156.866 && zVecRange.Max <= 156.868); -} - -void TestReadingASCIIFishTank() -{ - std::string fishtank = - vtkm::cont::testing::Testing::DataPath("rectilinear/fishtank_double_ascii.vtk"); - vtkm::cont::DataSet ds = readVTKDataSet(fishtank.c_str()); - VTKM_TEST_ASSERT(ds.GetCellSet().IsType>(), - "Incorrect cellset type"); - VTKM_TEST_ASSERT(ds.GetNumberOfPoints() == 50 * 50 * 50, "Incorrect number of points"); - VTKM_TEST_ASSERT(ds.GetCellSet().GetNumberOfPoints() == 50 * 50 * 50, - "Incorrect number of points (from cell set)"); - VTKM_TEST_ASSERT(ds.HasField("vec"), "The vtk file has a field 'vec', but the dataset does not."); - VTKM_TEST_ASSERT(ds.GetNumberOfCoordinateSystems() == 1, - "fishtank has one and only one coordinate system."); - const vtkm::cont::CoordinateSystem& coordinateSystem = ds.GetCoordinateSystem(); - vtkm::Vec ranges = coordinateSystem.GetRange(); - vtkm::Range xRange = ranges[0]; - VTKM_TEST_ASSERT(xRange.Min == 0); - VTKM_TEST_ASSERT(xRange.Max == 1); - vtkm::Range yRange = ranges[1]; - VTKM_TEST_ASSERT(yRange.Min == 0); - VTKM_TEST_ASSERT(yRange.Max == 1); - vtkm::Range zRange = ranges[2]; - VTKM_TEST_ASSERT(zRange.Min == 0); - VTKM_TEST_ASSERT(zRange.Max == 1); - - const vtkm::cont::Field& vec = ds.GetField("vec"); - VTKM_TEST_ASSERT(vec.GetName() == "vec"); - VTKM_TEST_ASSERT(vec.IsPointField()); - // Bounds from Paraview information panel: - // [-65.3147, 86.267], [-88.0325, 78.7217], [-67.0969, 156.867] - const vtkm::cont::ArrayHandle& vecRanges = vec.GetRange(); - VTKM_TEST_ASSERT(vecRanges.GetNumberOfValues() == 3); - auto vecRangesReadPortal = vecRanges.ReadPortal(); - auto xVecRange = vecRangesReadPortal.Get(0); - VTKM_TEST_ASSERT(xVecRange.Min >= -65.3148 && xVecRange.Min <= -65.3146); - VTKM_TEST_ASSERT(xVecRange.Max >= 86.26 && xVecRange.Min <= 86.268); - - auto yVecRange = vecRangesReadPortal.Get(1); - VTKM_TEST_ASSERT(yVecRange.Min >= -88.0326 && yVecRange.Min <= -88.0324); - VTKM_TEST_ASSERT(yVecRange.Max >= 78.721); - VTKM_TEST_ASSERT(yVecRange.Max <= 78.7218); - - auto zVecRange = vecRangesReadPortal.Get(2); - VTKM_TEST_ASSERT(zVecRange.Min >= -67.097 && zVecRange.Min <= -67.096); - VTKM_TEST_ASSERT(zVecRange.Max >= 156.866 && zVecRange.Max <= 156.868); -} - -void TestReadingFusion() -{ - std::string fusion = vtkm::cont::testing::Testing::DataPath("rectilinear/fusion.vtk"); + std::string fusion = vtkm::cont::testing::Testing::DataPath("uniform/rotate-vectors.vtk"); vtkm::cont::DataSet ds = readVTKDataSet(fusion.c_str()); VTKM_TEST_ASSERT(ds.GetCellSet().IsType>(), "Incorrect cellset type"); - VTKM_TEST_ASSERT(ds.GetNumberOfPoints() == 32 * 32 * 32, "Incorrect number of points"); - VTKM_TEST_ASSERT(ds.GetCellSet().GetNumberOfPoints() == 32 * 32 * 32, + VTKM_TEST_ASSERT(ds.GetNumberOfPoints() == 33 * 33 * 33, "Incorrect number of points"); + VTKM_TEST_ASSERT(ds.GetCellSet().GetNumberOfPoints() == 33 * 33 * 33, "Incorrect number of points (from cell set)"); - VTKM_TEST_ASSERT(ds.HasField("vec_magnitude"), - "The vtk file has a field 'vec_magnitude', but the dataset does not."); - VTKM_TEST_ASSERT(ds.HasField("vec"), "The vtk file has a field 'vec', but the dataset does not."); - VTKM_TEST_ASSERT(ds.GetNumberOfCoordinateSystems() == 1, - "The vtk file has a field 'vec', but the dataset does not."); + VTKM_TEST_ASSERT(ds.HasField("rotate"), + "The vtk file has a field 'rotate', but the dataset does not."); // Taken from Paraview + clicking Data Axes Grid: const vtkm::cont::CoordinateSystem& coordinateSystem = ds.GetCoordinateSystem(); vtkm::Vec ranges = coordinateSystem.GetRange(); vtkm::Range xRange = ranges[0]; - VTKM_TEST_ASSERT(xRange.Min == 0); + VTKM_TEST_ASSERT(xRange.Min == -1); VTKM_TEST_ASSERT(xRange.Max == 1); vtkm::Range yRange = ranges[1]; - VTKM_TEST_ASSERT(yRange.Min == 0); + VTKM_TEST_ASSERT(yRange.Min == -1); VTKM_TEST_ASSERT(yRange.Max == 1); vtkm::Range zRange = ranges[2]; - VTKM_TEST_ASSERT(zRange.Min == 0); + VTKM_TEST_ASSERT(zRange.Min == -1); VTKM_TEST_ASSERT(zRange.Max == 1); // Paraview Information Panel of this file: - // vec_magnitude [0, 3.73778] - vtkm::cont::Field vec_magnitude = ds.GetField("vec_magnitude"); - VTKM_TEST_ASSERT(vec_magnitude.GetName() == "vec_magnitude"); - VTKM_TEST_ASSERT(vec_magnitude.IsPointField()); - - vtkm::Range mag_range; - vec_magnitude.GetRange(&mag_range); - VTKM_TEST_ASSERT(mag_range.Min == 0); - VTKM_TEST_ASSERT(mag_range.Max <= 3.73779); - VTKM_TEST_ASSERT(mag_range.Max >= 3.73777); - - vtkm::cont::Field vec = ds.GetField("vec"); - VTKM_TEST_ASSERT(vec.GetName() == "vec"); + // rotate double [-1.29845, 1.25443], [-1.34447, 1.22820], [-0.32387, 0.33180] + vtkm::cont::Field vec = ds.GetField("rotate"); + VTKM_TEST_ASSERT(vec.GetName() == "rotate"); VTKM_TEST_ASSERT(vec.IsPointField()); const vtkm::cont::ArrayHandle& vecRanges = vec.GetRange(); VTKM_TEST_ASSERT(vecRanges.GetNumberOfValues() == 3); auto vecRangesReadPortal = vecRanges.ReadPortal(); - // vec float [-3.41054, 3.40824], [-3.41018, 3.41036], [-0.689022, 0.480726] auto xVecRange = vecRangesReadPortal.Get(0); - VTKM_TEST_ASSERT(test_equal(xVecRange.Min, -3.41054)); - VTKM_TEST_ASSERT(test_equal(xVecRange.Max, 3.40824)); + VTKM_TEST_ASSERT(test_equal(xVecRange.Min, -1.29845)); + VTKM_TEST_ASSERT(test_equal(xVecRange.Max, 1.25443)); auto yVecRange = vecRangesReadPortal.Get(1); - VTKM_TEST_ASSERT(test_equal(yVecRange.Min, -3.41018)); - VTKM_TEST_ASSERT(test_equal(yVecRange.Max, 3.41036)); + VTKM_TEST_ASSERT(test_equal(yVecRange.Min, -1.34447)); + VTKM_TEST_ASSERT(test_equal(yVecRange.Max, 1.22820)); auto zVecRange = vecRangesReadPortal.Get(2); - VTKM_TEST_ASSERT(test_equal(zVecRange.Min, -0.689022)); - VTKM_TEST_ASSERT(test_equal(zVecRange.Max, 0.480726)); + VTKM_TEST_ASSERT(test_equal(zVecRange.Min, -0.32387)); + VTKM_TEST_ASSERT(test_equal(zVecRange.Max, 0.33180)); +} + +void TestReadingKitchen() +{ + std::string fusion = vtkm::cont::testing::Testing::DataPath("curvilinear/kitchen.vtk"); + vtkm::cont::DataSet ds = readVTKDataSet(fusion.c_str()); + + VTKM_TEST_ASSERT(ds.GetCellSet().IsType>(), + "Incorrect cellset type"); + VTKM_TEST_ASSERT(ds.GetNumberOfPoints() == 28 * 24 * 17, "Incorrect number of points"); + VTKM_TEST_ASSERT(ds.GetCellSet().GetNumberOfPoints() == 28 * 24 * 17, + "Incorrect number of points (from cell set)"); + VTKM_TEST_ASSERT(ds.HasField("h1"), "The vtk file has a field 'h1', but the dataset does not."); + VTKM_TEST_ASSERT(ds.HasField("velocity"), + "The vtk file has a field 'velocity', but the dataset does not."); + + // Paraview Information Panel of this file: + // Bounds: [0.01, 7], [0.01, 5], [0.01, 2.5] + const vtkm::cont::CoordinateSystem& coordinateSystem = ds.GetCoordinateSystem(); + vtkm::Vec ranges = coordinateSystem.GetRange(); + vtkm::Range xRange = ranges[0]; + VTKM_TEST_ASSERT(test_equal(xRange.Min, 0.01)); + VTKM_TEST_ASSERT(test_equal(xRange.Max, 7)); + vtkm::Range yRange = ranges[1]; + VTKM_TEST_ASSERT(test_equal(yRange.Min, 0.01)); + VTKM_TEST_ASSERT(test_equal(yRange.Max, 5)); + vtkm::Range zRange = ranges[2]; + VTKM_TEST_ASSERT(test_equal(zRange.Min, 0.01)); + VTKM_TEST_ASSERT(test_equal(zRange.Max, 2.5)); + + // h1 float [0, 26823.6] + vtkm::cont::Field h1 = ds.GetField("h1"); + VTKM_TEST_ASSERT(h1.GetName() == "h1"); + VTKM_TEST_ASSERT(h1.IsPointField()); + const vtkm::cont::ArrayHandle& h1Ranges = h1.GetRange(); + VTKM_TEST_ASSERT(h1Ranges.GetNumberOfValues() == 1); + auto h1RangesReadPortal = h1Ranges.ReadPortal(); + + auto h1Range = h1RangesReadPortal.Get(0); + VTKM_TEST_ASSERT(test_equal(h1Range.Min, 0)); + VTKM_TEST_ASSERT(test_equal(h1Range.Max, 26823.6)); + + // velocity float [-0.34942, 0.26521], [-0.31407, 0.31543], [-0.45072, 0.28649] + vtkm::cont::Field vec = ds.GetField("velocity"); + VTKM_TEST_ASSERT(vec.GetName() == "velocity"); + VTKM_TEST_ASSERT(vec.IsPointField()); + const vtkm::cont::ArrayHandle& vecRanges = vec.GetRange(); + VTKM_TEST_ASSERT(vecRanges.GetNumberOfValues() == 3); + auto vecRangesReadPortal = vecRanges.ReadPortal(); + + auto xVecRange = vecRangesReadPortal.Get(0); + VTKM_TEST_ASSERT(test_equal(xVecRange.Min, -0.34942)); + VTKM_TEST_ASSERT(test_equal(xVecRange.Max, 0.26521)); + + auto yVecRange = vecRangesReadPortal.Get(1); + + VTKM_TEST_ASSERT(test_equal(yVecRange.Min, -0.31407)); + VTKM_TEST_ASSERT(test_equal(yVecRange.Max, 0.31543)); + + auto zVecRange = vecRangesReadPortal.Get(2); + VTKM_TEST_ASSERT(test_equal(zVecRange.Min, -0.45072)); + VTKM_TEST_ASSERT(test_equal(zVecRange.Max, 0.28649)); } void TestSkppingStringFields(Format format) @@ -668,14 +533,10 @@ void TestReadingVTKDataSet() TestReadingStructuredGridASCII(); std::cout << "Test reading VTK StructuredGrid file in BINARY" << std::endl; TestReadingStructuredGridBin(); - std::cout << "Test reading float precision fishtank" << std::endl; - TestReadingFishTank(); - std::cout << "Test reading double precision fishtank" << std::endl; - TestReadingDoublePrecisionFishTank(); - std::cout << "Test ASCII fishtank" << std::endl; - TestReadingASCIIFishTank(); - std::cout << "Test reading fusion" << std::endl; - TestReadingFusion(); + std::cout << "Test reading rotate" << std::endl; + TestReadingRotate(); + std::cout << "Test reading kitchen" << std::endl; + TestReadingKitchen(); std::cout << "Test skipping string fields in ASCII files" << std::endl; TestSkppingStringFields(FORMAT_ASCII);