Commit 90bd6dc1 authored by Joachim Pouderoux's avatar Joachim Pouderoux

Add test and fix reader

parent a5e481dc
ExternalData_Expand_Arguments(VTKData _
"DATA{${VTK_TEST_INPUT_DIR}/XDMF/,REGEX:.*}"
)
vtk_add_test_cxx(${vtk-module}CxxTests tests
NO_DATA NO_VALID
XdmfTestVTKIO.cxx
TestTemporalXdmfReaderWriter.cxx,NO_VALID
XdmfTestVTKIO.cxx,NO_VALID
)
vtk_test_cxx_executable(${vtk-module}CxxTests tests)
/*=========================================================================
Program: Visualization Toolkit
Module: TestTemporalXdmfReaderWriter.cxx
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
// Description:
// This tests temporal reading and writing of static meshes using
// vtkXdmfReader and vtkXdmfWriter.
#include "vtkInformation.h"
#include "vtkMultiBlockDataSet.h"
#include "vtkNew.h"
#include "vtkPointData.h"
#include "vtkStreamingDemandDrivenPipeline.h"
#include "vtkTestUtilities.h"
#include "vtkThreshold.h"
#include "vtkUnstructuredGrid.h"
#include "vtkXdmfReader.h"
#include "vtkXdmfWriter.h"
#include "vtksys/SystemTools.hxx"
#define ASSERT_TEST(_cond_, _msg_) \
if (!(_cond_)) { std::cerr << _msg_ << std::endl; return VTK_ERROR; }
int TestStaticMesh(vtkXdmfReader* reader)
{
reader->UpdateInformation();
vtkInformation* outInfo = reader->GetExecutive()->GetOutputInformation(0);
int steps = (outInfo->Has(vtkStreamingDemandDrivenPipeline::TIME_STEPS())) ?
outInfo->Length(vtkStreamingDemandDrivenPipeline::TIME_STEPS()) : 0;
ASSERT_TEST(steps == 3, "Read data does not have 3 time steps as expected!");
double* timeSteps =
outInfo->Get(vtkStreamingDemandDrivenPipeline::TIME_STEPS());
vtkPoints* geometryAtT0 = 0;
vtkCellArray* topologyAtT0 = 0;
for (int i = 0; i < steps; i++)
{
double updateTime = timeSteps[i];
outInfo->Set(vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEP(),
updateTime);
reader->Update();
vtkMultiBlockDataSet* mb =
vtkMultiBlockDataSet::SafeDownCast(reader->GetOutputDataObject(0));
ASSERT_TEST(mb, "Root data is not a multiblock data set as expected!");
ASSERT_TEST(mb->GetNumberOfBlocks() == 2, "Root multiblock data is supposed to have 2 blocks!");
vtkUnstructuredGrid* grid =
vtkUnstructuredGrid::SafeDownCast(mb->GetBlock(0));
ASSERT_TEST(grid, "Block 0 is not an unstructured grid as expected!");
if (i == 0)
{
geometryAtT0 = grid->GetPoints();
topologyAtT0 = grid->GetCells();
}
ASSERT_TEST(grid->GetPoints() == geometryAtT0, "Geometry is not static over time as expected!");
ASSERT_TEST(grid->GetCells() == topologyAtT0, "Topology is not static over time as expected!");
}
return 0;
}
int TestTemporalXdmfReaderWriter(int argc, char *argv[])
{
// Read the input data file
char *filePath = vtkTestUtilities::ExpandDataFileName(argc, argv,
"Data/XDMF/temporalStaticMeshes.xmf");
vtkNew<vtkXdmfReader> reader;
reader->SetFileName(filePath);
if (TestStaticMesh(reader.Get()) == VTK_ERROR)
{
std::cerr << "Error while reading " << reader->GetFileName() << std::endl;
return VTK_ERROR;
}
// Write the input data to a new Xdmf file
std::string outFilePath = "temporalStaticMeshesTest.xmf";
vtkNew<vtkXdmfWriter> writer;
writer->SetFileName(outFilePath.c_str());
writer->WriteAllTimeStepsOn();
writer->MeshStaticOverTimeOn();
writer->SetInputConnection(reader->GetOutputPort());
writer->Write();
// Test written file
vtkNew<vtkXdmfReader> reader2;
reader2->SetFileName(outFilePath.c_str());
if (TestStaticMesh(reader2.Get()) == VTK_ERROR)
{
std::cerr << "Error while reading " << reader2->GetFileName() << std::endl;
return VTK_ERROR;
}
return 0;
}
......@@ -353,7 +353,7 @@ vtkDataObject* vtkXdmfHeavyData::ReadUniformData(XdmfGrid* xmfGrid, int blockId)
vtkXdmfReader::XdmfReaderCachedData& cache =
vtkXdmfReader::SafeDownCast(this->Reader)->GetDataSetCache();
vtkXdmfReader::XdmfDataSetTopoGeoPath cachedData = cache[blockId];
vtkXdmfReader::XdmfDataSetTopoGeoPath& cachedData = cache[blockId];
if (caching &&
(cachedData.topologyPath == topoFilename) && (cachedData.geometryPath == geomFilename))
{
......
......@@ -647,12 +647,12 @@ void vtkXdmfDomain::CollectNonLeafMetaData(XdmfGrid* xmfGrid,
XdmfTime* xmfTime = xmfGrid->GetTime();
if (xmfTime && xmfTime->GetTimeType() != XDMF_TIME_UNSET)
{
int step = static_cast<int>(this->TimeSteps.size());
if (this->TimeSteps.find(xmfTime->GetValue()) == this->TimeSteps.end())
{
this->TimeSteps[xmfTime->GetValue()] = step;//this->TimeSteps.insert(xmfTime->GetValue());
this->TimeStepsRev[step] = xmfTime->GetValue();
}
int step = static_cast<int>(this->TimeSteps.size());
if (this->TimeSteps.find(xmfTime->GetValue()) == this->TimeSteps.end())
{
this->TimeSteps[xmfTime->GetValue()] = step;
this->TimeStepsRev[step] = xmfTime->GetValue();
}
}
}
}
......@@ -742,7 +742,7 @@ void vtkXdmfDomain::CollectLeafMetaData(XdmfGrid* xmfGrid, vtkIdType silParent)
int step = static_cast<int>(this->TimeSteps.size());
if (this->TimeSteps.find(xmfTime->GetValue()) == this->TimeSteps.end())
{
this->TimeSteps[xmfTime->GetValue()] = step;//this->TimeSteps.insert(xmfTime->GetValue());
this->TimeSteps[xmfTime->GetValue()] = step;
this->TimeStepsRev[step] = xmfTime->GetValue();
}
}
......
......@@ -260,8 +260,8 @@ public:
// Returns the time value at the given index.
XdmfFloat64 GetTimeForIndex(int index)
{
std::map<int, XdmfFloat64>::iterator iter = this->TimeStepsRev.find(index);
return (iter != this->TimeStepsRev.end()) ? iter->second : 0.0;
std::map<int, XdmfFloat64>::iterator iter = this->TimeStepsRev.find(index);
return (iter != this->TimeStepsRev.end()) ? iter->second : 0.0;
}
//---------------------------------------------------------------------------
......
70249b3970291bca08b61b20614af6da
bbb4f0d6a1e35eca6bc0daf99554dd2d
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment