Skip to content
Snippets Groups Projects
Commit 38295312 authored by Lars Bilke's avatar Lars Bilke
Browse files

Added tests for mapped int properties.

parent f38e1627
No related branches found
No related tags found
No related merge requests found
......@@ -114,6 +114,23 @@ int VtkMappedMeshSource::RequestData(vtkInformation *,
output->GetCellData()->AddArray(dataArray.GetPointer());
}
// int
for(std::vector<std::string>::const_iterator it = propertyNames.begin(); it != propertyNames.end(); ++it)
{
boost::optional<MeshLib::PropertyVector<int> const &> propertyVector(properties.getPropertyVector<int>(*it));
if(!propertyVector)
continue;
vtkNew<VtkMappedElementDataArrayTemplate<int> > dataArray;
dataArray->SetPropertyVector(const_cast<MeshLib::PropertyVector<int> &>(*propertyVector));
dataArray->SetName(it->c_str());
if(propertyVector->getMeshItemType() == MeshLib::MeshItemType::Node)
output->GetPointData()->AddArray(dataArray.GetPointer());
else if(propertyVector->getMeshItemType() == MeshLib::MeshItemType::Cell)
output->GetCellData()->AddArray(dataArray.GetPointer());
}
return 1;
}
......
......@@ -23,7 +23,7 @@
#include "VtkMappedElementDataArrayTemplate.h"
TEST(InSituLibDoubleArray, Init)
TEST(InSituLibMappedArrays, Double)
{
const size_t mesh_size = 5;
const double length = 1.0;
......@@ -46,8 +46,41 @@ TEST(InSituLibDoubleArray, Init)
ASSERT_EQ(dataArray->GetNumberOfComponents(), 1);
ASSERT_EQ(dataArray->GetNumberOfTuples(), size);
// First array entry
ASSERT_EQ(dataArray->GetValueReference(0), 1.0);
double* range = dataArray->GetRange(0);
ASSERT_EQ(range[0], 1.0);
ASSERT_EQ(range[1], 1.0 + mesh->getNElements() - 1.0);
delete mesh;
}
TEST(InSituLibMappedArrays, Int)
{
const size_t mesh_size = 5;
const double length = 1.0;
MeshLib::Mesh* mesh = MeshLib::MeshGenerator::generateRegularHexMesh(length, mesh_size);
ASSERT_TRUE(mesh != nullptr);
const std::size_t size(mesh_size*mesh_size*mesh_size);
std::string const prop_name("TestProperty");
boost::optional<MeshLib::PropertyVector<int> &> properties(
mesh->getProperties().createNewPropertyVector<int>(prop_name,
MeshLib::MeshItemType::Cell));
(*properties).resize(size);
std::iota((*properties).begin(), (*properties).end(), 1);
vtkNew<InSituLib::VtkMappedElementDataArrayTemplate<int> > dataArray;
dataArray->SetPropertyVector(*properties);
ASSERT_EQ(dataArray->GetNumberOfComponents(), 1);
ASSERT_EQ(dataArray->GetNumberOfTuples(), size);
ASSERT_EQ(dataArray->GetValueReference(0), 1);
double* range = dataArray->GetRange(0);
ASSERT_EQ(range[0], 1);
ASSERT_EQ(range[1], 1 + mesh->getNElements() - 1);
delete mesh;
}
\ No newline at end of file
......@@ -59,6 +59,22 @@ class InSituMesh : public ::testing::Test
);
(*cell_double_properties).resize(mesh->getNElements());
std::iota((*cell_double_properties).begin(), (*cell_double_properties).end(), 1);
std::string const point_int_prop_name("PointIntProperty");
boost::optional<MeshLib::PropertyVector<int> &> point_int_properties(
mesh->getProperties().createNewPropertyVector<int>(point_int_prop_name,
MeshLib::MeshItemType::Node)
);
(*point_int_properties).resize(mesh->getNNodes());
std::iota((*point_int_properties).begin(), (*point_int_properties).end(), 1);
std::string const cell_int_prop_name("CellIntProperty");
boost::optional<MeshLib::PropertyVector<int> &> cell_int_properties(
mesh->getProperties().createNewPropertyVector<int>(cell_int_prop_name,
MeshLib::MeshItemType::Cell)
);
(*cell_int_properties).resize(mesh->getNElements());
std::iota((*cell_int_properties).begin(), (*cell_int_properties).end(), 1);
}
~InSituMesh()
......@@ -114,7 +130,7 @@ TEST_F(InSituMesh, MappedMeshSourceRoundtrip)
ASSERT_EQ((subdivisions+1)*(subdivisions+1)*(subdivisions+1), output->GetNumberOfPoints());
ASSERT_EQ(subdivisions*subdivisions*subdivisions, output->GetNumberOfCells());
// Point data array
// Point data arrays
vtkDataArray* pointDoubleArray = output->GetPointData()->GetScalars("PointDoubleProperty");
ASSERT_EQ(pointDoubleArray->GetSize(), mesh->getNNodes());
ASSERT_EQ(pointDoubleArray->GetComponent(0, 0), 1.0);
......@@ -122,13 +138,27 @@ TEST_F(InSituMesh, MappedMeshSourceRoundtrip)
ASSERT_EQ(range[0], 1.0);
ASSERT_EQ(range[1], 1.0 + mesh->getNNodes() - 1.0);
// Cell data array
vtkDataArray* pointIntArray = output->GetPointData()->GetScalars("PointIntProperty");
ASSERT_EQ(pointIntArray->GetSize(), mesh->getNNodes());
ASSERT_EQ(pointIntArray->GetComponent(0, 0), 1.0);
range = pointIntArray->GetRange(0);
ASSERT_EQ(range[0], 1.0);
ASSERT_EQ(range[1], 1 + mesh->getNNodes() - 1);
// Cell data arrays
vtkDataArray* cellDoubleArray = output->GetCellData()->GetScalars("CellDoubleProperty");
ASSERT_EQ(cellDoubleArray->GetSize(), mesh->getNElements());
ASSERT_EQ(cellDoubleArray->GetComponent(0, 0), 1.0);
double* range2 = cellDoubleArray->GetRange(0);
ASSERT_EQ(range2[0], 1.0);
ASSERT_EQ(range2[1], 1.0 + mesh->getNElements() - 1.0);
range = cellDoubleArray->GetRange(0);
ASSERT_EQ(range[0], 1.0);
ASSERT_EQ(range[1], 1.0 + mesh->getNElements() - 1.0);
vtkDataArray* cellIntArray = output->GetCellData()->GetScalars("CellIntProperty");
ASSERT_EQ(cellIntArray->GetSize(), mesh->getNElements());
ASSERT_EQ(cellIntArray->GetComponent(0, 0), 1.0);
range = cellIntArray->GetRange(0);
ASSERT_EQ(range[0], 1.0);
ASSERT_EQ(range[1], 1 + mesh->getNElements() - 1);
// -- Write VTK mesh to file (in all combinations of binary, appended and compressed)
// atm vtkXMLWriter::Appended does not work, see http://www.paraview.org/Bug/view.php?id=13382
......@@ -152,7 +182,9 @@ TEST_F(InSituMesh, MappedMeshSourceRoundtrip)
ASSERT_EQ(vtkMesh->GetNumberOfPoints(), output->GetNumberOfPoints());
ASSERT_EQ(vtkMesh->GetNumberOfCells(), output->GetNumberOfCells());
ASSERT_EQ(vtkMesh->GetPointData()->GetScalars("PointDoubleProperty")->GetNumberOfTuples(), pointDoubleArray->GetNumberOfTuples());
ASSERT_EQ(vtkMesh->GetPointData()->GetScalars("PointIntProperty")->GetNumberOfTuples(), pointIntArray->GetNumberOfTuples());
ASSERT_EQ(vtkMesh->GetCellData()->GetScalars("CellDoubleProperty")->GetNumberOfTuples(), cellDoubleArray->GetNumberOfTuples());
ASSERT_EQ(vtkMesh->GetCellData()->GetScalars("CellIntProperty")->GetNumberOfTuples(), cellIntArray->GetNumberOfTuples());
// Both OGS meshes should be identical
MeshLib::Mesh* newMesh = MeshLib::VtkMeshConverter::convertUnstructuredGrid(vtkMesh);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment