//============================================================================ // Copyright (c) Kitware, Inc. // All rights reserved. // See LICENSE.txt 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. // // Copyright 2014 Sandia Corporation. // Copyright 2014 UT-Battelle, LLC. // Copyright 2014 Los Alamos National Security. // // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, // the U.S. Government retains certain rights in this software. // // Under the terms of Contract DE-AC52-06NA25396 with Los Alamos National // Laboratory (LANL), the U.S. Government retains certain rights in // this software. //============================================================================ #include #include #include #include #include #include using vtkm::cont::testing::MakeTestDataSet; template class TestingTetrahedralize { public: // // Create a uniform 3D structured cell set as input // Add a field which is the index type which is (i+j+k) % 2 to alternate tetrahedralization pattern // Points are all the same, but each hexahedron cell becomes 5 tetrahedral cells // void TestStructured() const { std::cout << "Testing TetrahedralizeStructured" << std::endl; typedef vtkm::cont::CellSetStructured<3> CellSetType; typedef vtkm::cont::CellSetSingleType<> OutCellSetType; // Create the input uniform cell set vtkm::cont::DataSet dataSet = MakeTestDataSet().Make3DUniformDataSet0(); CellSetType cellSet; dataSet.GetCellSet(0).CopyTo(cellSet); // Convert uniform hexahedra to tetrahedra vtkm::worklet::Tetrahedralize tetrahedralize; OutCellSetType outCellSet = tetrahedralize.Run(cellSet, DeviceAdapter()); // Create the output dataset with same coordinate system vtkm::cont::DataSet outDataSet; outDataSet.AddCoordinateSystem(dataSet.GetCoordinateSystem(0)); outDataSet.AddCellSet(outCellSet); VTKM_TEST_ASSERT(test_equal(outCellSet.GetNumberOfCells(), cellSet.GetNumberOfCells() * 5), "Wrong result for Tetrahedralize filter"); } // // Create an explicit 3D cell set as input and fill // Points are all the same, but each cell becomes tetrahedra // void TestExplicit() const { std::cout << "Testing TetrahedralizeExplicit" << std::endl; typedef vtkm::cont::CellSetExplicit<> CellSetType; typedef vtkm::cont::CellSetSingleType<> OutCellSetType; // Create the input explicit cell set vtkm::cont::DataSet dataSet = MakeTestDataSet().Make3DExplicitDataSet5(); CellSetType cellSet; dataSet.GetCellSet(0).CopyTo(cellSet); vtkm::cont::ArrayHandle outCellsPerCell; // Convert explicit cells to tetrahedra vtkm::worklet::Tetrahedralize tetrahedralize; OutCellSetType outCellSet = tetrahedralize.Run(cellSet, DeviceAdapter()); // Create the output dataset explicit cell set with same coordinate system vtkm::cont::DataSet outDataSet; outDataSet.AddCoordinateSystem(dataSet.GetCoordinateSystem(0)); outDataSet.AddCellSet(outCellSet); VTKM_TEST_ASSERT(test_equal(outCellSet.GetNumberOfCells(), 11), "Wrong result for Tetrahedralize filter"); } void operator()() const { TestStructured(); TestExplicit(); } }; int UnitTestTetrahedralize(int, char *[]) { return vtkm::cont::testing::Testing::Run( TestingTetrahedralize()); }