File: TestRedistributeDataSetFilterImplicitArray.cxx

package info (click to toggle)
vtk9 9.5.2%2Bdfsg3-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 205,984 kB
  • sloc: cpp: 2,336,570; ansic: 327,116; python: 111,200; yacc: 4,104; java: 3,977; sh: 3,032; xml: 2,771; perl: 2,189; lex: 1,787; makefile: 181; javascript: 165; objc: 153; tcl: 59
file content (79 lines) | stat: -rw-r--r-- 2,345 bytes parent folder | download | duplicates (3)
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
// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
// SPDX-License-Identifier: BSD-3-Clause
#include <vtkDataSet.h>
#include <vtkImageData.h>
#include <vtkImplicitArray.h>
#include <vtkMPIController.h>
#include <vtkPointData.h>
#include <vtkRedistributeDataSetFilter.h>

#include <cstdlib>

namespace
{
bool RedistributeImageData(vtkMultiProcessController* controller);
}

int TestRedistributeDataSetFilterImplicitArray(int argc, char* argv[])
{
  int res = EXIT_SUCCESS;
#if VTK_MODULE_ENABLE_VTK_ParallelMPI
  vtkNew<vtkMPIController> controller;
#else
  vtkNew<vtkDummyController> controller;
#endif
  controller->Initialize(&argc, &argv);
  vtkMultiProcessController::SetGlobalController(controller);
  if (!::RedistributeImageData(controller))
  {
    std::cout << "Could not redistribute image data" << std::endl;
    res = EXIT_FAILURE;
  }
  controller->Finalize();
  return res;
}

namespace
{

struct Backend42
{
  double operator()(int) const { return 42.0; }
};

bool RedistributeImageData(vtkMultiProcessController* controller)
{
  int nPix = 100;
  int halfCells = nPix / 2;
  vtkNew<vtkImageData> baseGrid;
  vtkNew<vtkImplicitArray<Backend42>> vortex;
  vortex->SetName("42");
  baseGrid->GetPointData()->AddArray(vortex);
  if (controller->GetLocalProcessId() == 0)
  {
    baseGrid->SetExtent(-halfCells / 2, halfCells, -halfCells, halfCells, -halfCells, halfCells);
    baseGrid->SetSpacing(1.0 / nPix, 1.0 / nPix, 1.0 / nPix);
    vortex->SetNumberOfComponents(3);
    vortex->SetNumberOfTuples(baseGrid->GetNumberOfPoints());
  }
  else
  {
    baseGrid->SetExtent(-halfCells, -halfCells / 2, -halfCells, halfCells, -halfCells, halfCells);
    baseGrid->SetSpacing(1.0 / nPix, 1.0 / nPix, 1.0 / nPix);
    vortex->SetNumberOfComponents(3);
    vortex->SetNumberOfTuples(baseGrid->GetNumberOfPoints());
  }
  baseGrid->GetPointData()->SetActiveVectors("42");

  vtkNew<vtkRedistributeDataSetFilter> redistribute;
  redistribute->SetInputData(baseGrid);
  redistribute->Update();

  vtkDataSet* redDS = vtkDataSet::SafeDownCast(redistribute->GetOutput(0));

  int nPtsArr = redDS->GetPointData()->GetArray("42")->GetNumberOfTuples();
  int nPtsDS = redDS->GetNumberOfPoints();

  return (nPtsDS == nPtsArr) && (redDS->GetPointData()->GetArray("42")->GetComponent(0, 0) == 42);
}
} // namespace