1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
#include "vtkFLUENTReader.h"
#include "vtkMultiBlockDataSet.h"
#include "vtkNew.h"
#include "vtkUnstructuredGrid.h"
#include "vtkTestUtilities.h"
#include <array>
#define Check(expr, message) \
do \
{ \
if (!(expr)) \
{ \
vtkErrorWithObjectMacro(nullptr, "Test failed: \n" << message); \
return false; \
} \
} while (false)
namespace
{
bool TestFLUENTReaderMSH(const std::string& filename)
{
vtkNew<vtkFLUENTReader> reader;
reader->SetFileName(filename.c_str());
reader->Update();
vtkMultiBlockDataSet* set = reader->GetOutput();
Check(set->GetNumberOfBlocks() == 6, "Wrong number of blocks");
Check(set->GetNumberOfCells() == 34250, "Wrong number of cells in dataset");
Check(set->GetNumberOfPoints() == 11772, "Wrong number of points in dataset");
vtkUnstructuredGrid* grid = vtkUnstructuredGrid::SafeDownCast(set->GetBlock(1));
Check(grid, "Failed to retrieve zone block");
Check(grid->GetNumberOfPoints() == 1962, "Wrong number of points in zone block");
Check(grid->GetNumberOfCells() == 6850, "Wrong number of cells in zone block");
return true;
}
bool TestFLUENTReaderMSHSurface(const std::string& filename)
{
vtkNew<vtkFLUENTReader> reader;
reader->SetFileName(filename.c_str());
reader->Update();
vtkMultiBlockDataSet* set = reader->GetOutput();
Check(set->GetNumberOfBlocks() == 1, "Wrong number of blocks");
auto* grid = vtkUnstructuredGrid::SafeDownCast(set->GetBlock(0));
Check(grid, "Wrong block");
Check(grid->GetNumberOfPoints() == 1441, "Wrong number of points");
Check(grid->GetNumberOfCells() == 2882, "Wrong number of cells");
return true;
}
bool TestFLUENTReaderMSHSurfaceAscii(const std::string& filename)
{
vtkNew<vtkFLUENTReader> reader;
reader->SetFileName(filename.c_str());
reader->Update();
vtkMultiBlockDataSet* set = reader->GetOutput();
Check(set->GetNumberOfBlocks() == 1, "Wrong number of blocks");
auto* grid = vtkUnstructuredGrid::SafeDownCast(set->GetBlock(0));
Check(grid, "Wrong block");
Check(grid->GetNumberOfPoints() == 4, "Wrong number of points");
Check(grid->GetNumberOfCells() == 1, "Wrong number of cells");
return true;
}
// std::string friendly wrapper for vtkTestUtilities::ExpandDataFileName
std::string GetFilePath(int argc, char* argv[], const char* path)
{
char* fname = vtkTestUtilities::ExpandDataFileName(argc, argv, path);
std::string filename = fname;
delete[] fname;
return filename;
}
}
int TestFLUENTReader(int argc, char* argv[])
{
if (!::TestFLUENTReaderMSH(GetFilePath(argc, argv, "Data/3D_cylinder_vol.msh")))
{
return EXIT_FAILURE;
}
if (!::TestFLUENTReaderMSHSurface(GetFilePath(argc, argv, "Data/3D_cylinder_surf.msh")))
{
return EXIT_FAILURE;
}
// Note: fluent_quad.msh contains some variations in line formats so this is also a test
// about whether we can robustly read different formats
if (!::TestFLUENTReaderMSHSurfaceAscii(GetFilePath(argc, argv, "Data/fluent_quad.msh")))
{
return EXIT_FAILURE;
}
// TODO: add test for FLUENT Case files
return EXIT_SUCCESS;
}
|