VTK-m  2.0
OrientPointAndCellNormals.h
Go to the documentation of this file.
1 //============================================================================
2 // Copyright (c) Kitware, Inc.
3 // All rights reserved.
4 // See LICENSE.txt for details.
5 // This software is distributed WITHOUT ANY WARRANTY; without even
6 // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
7 // PURPOSE. See the above copyright notice for more information.
8 //
9 // Copyright 2019 National Technology & Engineering Solutions of Sandia, LLC (NTESS).
10 // Copyright 2019 UT-Battelle, LLC.
11 // Copyright 2019 Los Alamos National Security.
12 //
13 // Under the terms of Contract DE-NA0003525 with NTESS,
14 // the U.S. Government retains certain rights in this software.
15 //
16 // Under the terms of Contract DE-AC52-06NA25396 with Los Alamos National
17 // Laboratory (LANL), the U.S. Government retains certain rights in
18 // this software.
19 //============================================================================
20 #ifndef vtkm_m_worklet_OrientPointAndCellNormals_h
21 #define vtkm_m_worklet_OrientPointAndCellNormals_h
22 
23 #include <vtkm/Range.h>
24 #include <vtkm/Types.h>
25 
26 #include <vtkm/cont/Algorithm.h>
27 #include <vtkm/cont/ArrayHandle.h>
32 #include <vtkm/cont/BitField.h>
33 #include <vtkm/cont/Logging.h>
34 
40 
41 #include <vtkm/VecTraits.h>
42 
43 namespace vtkm
44 {
45 namespace worklet
46 {
47 
54 {
55  static constexpr vtkm::Id INVALID_ID = -1;
56 
57  // Returns true if v1 and v2 are pointing in the same hemisphere.
58  template <typename T>
59  VTKM_EXEC static bool SameDirection(const vtkm::Vec<T, 3>& v1, const vtkm::Vec<T, 3>& v2)
60  {
61  return vtkm::Dot(v1, v2) >= 0;
62  }
63 
64  // Ensure that the normal is pointing in the same hemisphere as ref.
65  // Returns true if normal is modified.
66  template <typename T>
67  VTKM_EXEC static bool Align(vtkm::Vec<T, 3>& normal, const vtkm::Vec<T, 3>& ref)
68  {
69  if (!SameDirection(normal, ref))
70  {
71  normal = -normal;
72  return true;
73  }
74  return false;
75  }
76 
77 public:
78  // Locates starting points for BFS traversal of dataset by finding points
79  // on the dataset boundaries. The normals for these points are corrected by
80  // making them point outside of the dataset, and they are marked as both
81  // active and visited.
83  {
84  public:
85  using ControlSignature = void(FieldIn coords,
86  FieldInOut pointNormals,
87  WholeArrayIn ranges,
88  FieldOut activePoints,
89  FieldOut visitedPoints);
90  using ExecutionSignature =
91  void(_1 coord, _2 pointNormal, _3 ranges, _4 activePoints, _5 visitedPoints);
92 
93  template <typename CoordT, typename NormalT, typename RangePortal>
95  vtkm::Vec<NormalT, 3>& pointNormal,
96  const RangePortal& ranges,
97  bool& isActive,
98  bool& isVisited) const
99  {
100  for (vtkm::IdComponent dim = 0; dim < 3; ++dim)
101  {
102  const auto& range = ranges.Get(dim);
103  const auto val = static_cast<decltype(range.Min)>(point[dim]);
104  if (val <= range.Min)
105  {
106  vtkm::Vec<NormalT, 3> ref{ static_cast<NormalT>(0) };
107  ref[dim] = static_cast<NormalT>(-1);
108  Align(pointNormal, ref);
109  isActive = true;
110  isVisited = true;
111  return;
112  }
113  else if (val >= range.Max)
114  {
115  vtkm::Vec<NormalT, 3> ref{ static_cast<NormalT>(0) };
116  ref[dim] = static_cast<NormalT>(1);
117  Align(pointNormal, ref);
118  isActive = true;
119  isVisited = true;
120  return;
121  }
122  }
123 
124  isActive = false;
125  isVisited = false;
126  }
127  };
128 
129  // Mark each incident cell as active and visited.
130  // Marks the current point as inactive.
132  {
133  public:
134  using ControlSignature = void(CellSetIn cell,
135  BitFieldInOut activeCells,
136  BitFieldInOut visitedCells,
137  FieldInOutPoint activePoints);
138  using ExecutionSignature = _4(CellIndices cellIds, _2 activeCells, _3 visitedCells);
139 
141 
142  template <typename CellList, typename ActiveCellsBitPortal, typename VisitedCellsBitPortal>
143  VTKM_EXEC bool operator()(const CellList& cellIds,
144  ActiveCellsBitPortal& activeCells,
145  VisitedCellsBitPortal& visitedCells) const
146  {
147  const vtkm::IdComponent numCells = cellIds.GetNumberOfComponents();
148  for (vtkm::IdComponent c = 0; c < numCells; ++c)
149  {
150  const vtkm::Id cellId = cellIds[c];
151  if (!visitedCells.OrBitAtomic(cellId, true))
152  { // This thread owns this cell.
153  activeCells.SetBitAtomic(cellId, true);
154  }
155  }
156 
157  // Mark current point as inactive:
158  return false;
159  }
160  };
161 
162  // Align the current cell's normals to an adjacent visited point's normal.
164  {
165  public:
166  using ControlSignature = void(CellSetIn cells,
167  WholeArrayIn pointNormals,
168  WholeArrayInOut cellNormals,
169  BitFieldIn visitedPoints);
170  using ExecutionSignature = void(PointIndices pointIds,
171  InputIndex cellId,
172  _2 pointNormals,
173  _3 cellNormals,
174  _4 visitedPoints);
175 
177 
178  template <typename PointList,
179  typename PointNormalsPortal,
180  typename CellNormalsPortal,
181  typename VisitedPointsBitPortal>
182  VTKM_EXEC void operator()(const PointList& pointIds,
183  const vtkm::Id cellId,
184  const PointNormalsPortal& pointNormals,
185  CellNormalsPortal& cellNormals,
186  const VisitedPointsBitPortal& visitedPoints) const
187  {
188  // Use the normal of a visited point as a reference:
189  const vtkm::Id refPointId = [&]() -> vtkm::Id {
190  const vtkm::IdComponent numPoints = pointIds.GetNumberOfComponents();
191  for (vtkm::IdComponent p = 0; p < numPoints; ++p)
192  {
193  const vtkm::Id pointId = pointIds[p];
194  if (visitedPoints.GetBit(pointId))
195  {
196  return pointId;
197  }
198  }
199 
200  return INVALID_ID;
201  }();
202 
203  VTKM_ASSERT("No reference point found." && refPointId != INVALID_ID);
204 
205  const auto refNormal = pointNormals.Get(refPointId);
206  auto normal = cellNormals.Get(cellId);
207  if (Align(normal, refNormal))
208  {
209  cellNormals.Set(cellId, normal);
210  }
211  }
212  };
213 
214  // Mark each incident point as active and visited.
215  // Marks the current cell as inactive.
217  {
218  public:
219  using ControlSignature = void(CellSetIn cell,
220  BitFieldInOut activePoints,
221  BitFieldInOut visitedPoints,
222  FieldInOutCell activeCells);
223  using ExecutionSignature = _4(PointIndices pointIds, _2 activePoint, _3 visitedPoint);
224 
226 
227  template <typename PointList, typename ActivePointsBitPortal, typename VisitedPointsBitPortal>
228  VTKM_EXEC bool operator()(const PointList& pointIds,
229  ActivePointsBitPortal& activePoints,
230  VisitedPointsBitPortal& visitedPoints) const
231  {
232  const vtkm::IdComponent numPoints = pointIds.GetNumberOfComponents();
233  for (vtkm::IdComponent p = 0; p < numPoints; ++p)
234  {
235  const vtkm::Id pointId = pointIds[p];
236  if (!visitedPoints.OrBitAtomic(pointId, true))
237  { // This thread owns this point.
238  activePoints.SetBitAtomic(pointId, true);
239  }
240  }
241 
242  // Mark current cell as inactive:
243  return false;
244  }
245  };
246 
247  // Align the current point's normals to an adjacent visited cell's normal.
249  {
250  public:
251  using ControlSignature = void(CellSetIn cells,
252  WholeArrayInOut pointNormals,
253  WholeArrayIn cellNormals,
254  BitFieldIn visitedCells);
255  using ExecutionSignature = void(CellIndices cellIds,
256  InputIndex pointId,
257  _2 pointNormals,
258  _3 cellNormals,
259  _4 visitedCells);
260 
262 
263  template <typename CellList,
264  typename CellNormalsPortal,
265  typename PointNormalsPortal,
266  typename VisitedCellsBitPortal>
267  VTKM_EXEC void operator()(const CellList& cellIds,
268  const vtkm::Id pointId,
269  PointNormalsPortal& pointNormals,
270  const CellNormalsPortal& cellNormals,
271  const VisitedCellsBitPortal& visitedCells) const
272  {
273  // Use the normal of a visited cell as a reference:
274  const vtkm::Id refCellId = [&]() -> vtkm::Id {
275  const vtkm::IdComponent numCells = cellIds.GetNumberOfComponents();
276  for (vtkm::IdComponent c = 0; c < numCells; ++c)
277  {
278  const vtkm::Id cellId = cellIds[c];
279  if (visitedCells.GetBit(cellId))
280  {
281  return cellId;
282  }
283  }
284 
285  return INVALID_ID;
286  }();
287 
288  VTKM_ASSERT("No reference cell found." && refCellId != INVALID_ID);
289 
290  const auto refNormal = cellNormals.Get(refCellId);
291  auto normal = pointNormals.Get(pointId);
292  if (Align(normal, refNormal))
293  {
294  pointNormals.Set(pointId, normal);
295  }
296  }
297  };
298 
299  template <typename CellSetType,
300  typename CoordsCompType,
301  typename CoordsStorageType,
302  typename PointNormalCompType,
303  typename PointNormalStorageType,
304  typename CellNormalCompType,
305  typename CellNormalStorageType>
306  VTKM_CONT static void Run(
307  const CellSetType& cells,
308  const vtkm::cont::ArrayHandle<vtkm::Vec<CoordsCompType, 3>, CoordsStorageType>& coords,
310  pointNormals,
311  vtkm::cont::ArrayHandle<vtkm::Vec<CellNormalCompType, 3>, CellNormalStorageType>& cellNormals)
312  {
313  using RangeType = vtkm::cont::ArrayHandle<vtkm::Range>;
314 
320 
321  const vtkm::Id numCells = cells.GetNumberOfCells();
322 
324  "OrientPointAndCellNormals worklet (%lld points, %lld cells)",
325  static_cast<vtkm::Int64>(coords.GetNumberOfValues()),
326  static_cast<vtkm::Int64>(numCells));
327 
328  // active = cells / point to be used in the next worklet invocation mask.
329  vtkm::cont::BitField activePointBits; // Initialized by MarkSourcePoints
330  auto activePoints = vtkm::cont::make_ArrayHandleBitField(activePointBits);
331 
332  vtkm::cont::BitField activeCellBits;
333  activeCellBits.AllocateAndFill(numCells, false);
334  auto activeCells = vtkm::cont::make_ArrayHandleBitField(activeCellBits);
335 
336  // visited = cells / points that have been corrected.
337  vtkm::cont::BitField visitedPointBits; // Initialized by MarkSourcePoints
338  auto visitedPoints = vtkm::cont::make_ArrayHandleBitField(visitedPointBits);
339 
340  vtkm::cont::BitField visitedCellBits;
341  visitedCellBits.AllocateAndFill(numCells, false);
342  auto visitedCells = vtkm::cont::make_ArrayHandleBitField(visitedCellBits);
343 
344  vtkm::cont::ArrayHandle<vtkm::Id> mask; // Allocated as needed
345 
346  // 1) Compute range of coords.
347  const RangeType ranges = vtkm::cont::ArrayRangeCompute(coords);
348 
349  // 2) Locate points on a boundary and align their normal to point out of the
350  // dataset:
351  {
352  MarkSourcePoints dispatcher;
353  dispatcher.Invoke(coords, pointNormals, ranges, activePoints, visitedPoints);
354  }
355 
356  for (size_t iter = 1;; ++iter)
357  {
358  // 3) Mark unvisited cells adjacent to active points
359  {
360  vtkm::Id numActive = vtkm::cont::Algorithm::BitFieldToUnorderedSet(activePointBits, mask);
361  (void)numActive;
363  "MarkActiveCells from " << numActive << " active points.");
364  MarkActiveCells dispatcher{ vtkm::worklet::MaskIndices{ mask } };
365  dispatcher.Invoke(cells, activeCellBits, visitedCellBits, activePoints);
366  }
367 
368  vtkm::Id numActiveCells = vtkm::cont::Algorithm::BitFieldToUnorderedSet(activeCellBits, mask);
369 
370  if (numActiveCells == 0)
371  { // Done!
373  "Iteration " << iter << ": Traversal complete; no more cells");
374  break;
375  }
376 
378  "Iteration " << iter << ": Processing " << numActiveCells << " cell normals.");
379 
380  // 4) Correct normals for active cells.
381  {
382  ProcessCellNormals dispatcher{ vtkm::worklet::MaskIndices{ mask } };
383  dispatcher.Invoke(cells, pointNormals, cellNormals, visitedPointBits);
384  }
385 
386  // 5) Mark unvisited points adjacent to active cells
387  {
388  vtkm::Id numActive = vtkm::cont::Algorithm::BitFieldToUnorderedSet(activeCellBits, mask);
389  (void)numActive;
391  "MarkActivePoints from " << numActive << " active cells.");
392  MarkActivePoints dispatcher{ vtkm::worklet::MaskIndices{ mask } };
393  dispatcher.Invoke(cells, activePointBits, visitedPointBits, activeCells);
394  }
395 
396  vtkm::Id numActivePoints =
397  vtkm::cont::Algorithm::BitFieldToUnorderedSet(activePointBits, mask);
398 
399  if (numActivePoints == 0)
400  { // Done!
402  "Iteration " << iter << ": Traversal complete; no more points");
403  break;
404  }
405 
407  "Iteration " << iter << ": Processing " << numActivePoints << " point normals.");
408 
409  // 4) Correct normals for active points.
410  {
411  ProcessPointNormals dispatcher{ vtkm::worklet::MaskIndices{ mask } };
412  dispatcher.Invoke(cells, pointNormals, cellNormals, visitedCellBits);
413  }
414  }
415  }
416 };
417 }
418 } // end namespace vtkm::worklet
419 
420 
421 #endif // vtkm_m_worklet_OrientPointAndCellNormals_h
VTKM_LOG_SCOPE
#define VTKM_LOG_SCOPE(level,...)
Definition: Logging.h:265
vtkm::cont::ArrayHandle
Manages an array-worth of data.
Definition: ArrayHandle.h:283
ArrayHandle.h
VTKM_EXEC
#define VTKM_EXEC
Definition: ExportMacros.h:51
vtkm
Groups connected points that have the same field value.
Definition: Atomic.h:19
vtkm::cont::Algorithm::BitFieldToUnorderedSet
static VTKM_CONT vtkm::Id BitFieldToUnorderedSet(vtkm::cont::DeviceAdapterId devId, const vtkm::cont::BitField &bits, vtkm::cont::ArrayHandle< Id, IndicesStorage > &indices)
Definition: Algorithm.h:389
ArrayRangeCompute.h
Types.h
WorkletMapField.h
VTKM_ASSERT
#define VTKM_ASSERT(condition)
Definition: Assert.h:43
vtkm::worklet::WorkletMapField::FieldOut
A control signature tag for output fields.
Definition: WorkletMapField.h:60
vtkm::worklet::OrientPointAndCellNormals
Orients normals to point outside of the dataset.
Definition: OrientPointAndCellNormals.h:53
ArrayHandleBitField.h
vtkm::IdComponent
vtkm::Int32 IdComponent
Represents a component ID (index of component in a vector).
Definition: Types.h:168
BitField.h
vtkm::worklet::OrientPointAndCellNormals::WorkletProcessCellNormals::operator()
VTKM_EXEC void operator()(const PointList &pointIds, const vtkm::Id cellId, const PointNormalsPortal &pointNormals, CellNormalsPortal &cellNormals, const VisitedPointsBitPortal &visitedPoints) const
Definition: OrientPointAndCellNormals.h:182
vtkm::worklet::OrientPointAndCellNormals::WorkletProcessPointNormals
Definition: OrientPointAndCellNormals.h:248
ArrayHandleTransform.h
ArrayHandleConstant.h
vtkm::worklet::OrientPointAndCellNormals::WorkletMarkActivePoints::ExecutionSignature
_4(PointIndices pointIds, _2 activePoint, _3 visitedPoint) ExecutionSignature
Definition: OrientPointAndCellNormals.h:223
vtkm::worklet::WorkletVisitCellsWithPoints::PointIndices
IncidentElementIndices PointIndices
Definition: WorkletMapTopology.h:269
vtkm::Id
vtkm::Int32 Id
Represents an ID (index into arrays).
Definition: Types.h:191
vtkm::worklet::OrientPointAndCellNormals::Align
static VTKM_EXEC bool Align(vtkm::Vec< T, 3 > &normal, const vtkm::Vec< T, 3 > &ref)
Definition: OrientPointAndCellNormals.h:67
DispatcherMapField.h
vtkm::worklet::OrientPointAndCellNormals::WorkletMarkSourcePoints
Definition: OrientPointAndCellNormals.h:82
MaskIndices.h
vtkm::worklet::OrientPointAndCellNormals::SameDirection
static VTKM_EXEC bool SameDirection(const vtkm::Vec< T, 3 > &v1, const vtkm::Vec< T, 3 > &v2)
Definition: OrientPointAndCellNormals.h:59
vtkm::worklet::OrientPointAndCellNormals::WorkletMarkActiveCells
Definition: OrientPointAndCellNormals.h:131
vtkm::worklet::OrientPointAndCellNormals::WorkletMarkActiveCells::ExecutionSignature
_4(CellIndices cellIds, _2 activeCells, _3 visitedCells) ExecutionSignature
Definition: OrientPointAndCellNormals.h:138
vtkm::worklet::OrientPointAndCellNormals::WorkletProcessPointNormals::ExecutionSignature
void(CellIndices cellIds, InputIndex pointId, _2 pointNormals, _3 cellNormals, _4 visitedCells) ExecutionSignature
Definition: OrientPointAndCellNormals.h:259
vtkm::worklet::DispatcherMapField
Dispatcher for worklets that inherit from WorkletMapField.
Definition: DispatcherMapField.h:25
vtkm::worklet::WorkletVisitPointsWithCells
Base class for worklets that map from Cells to Points.
Definition: WorkletMapTopology.h:274
vtkm::worklet::OrientPointAndCellNormals::WorkletProcessPointNormals::ControlSignature
void(CellSetIn cells, WholeArrayInOut pointNormals, WholeArrayIn cellNormals, BitFieldIn visitedCells) ControlSignature
Definition: OrientPointAndCellNormals.h:254
vtkm::worklet::OrientPointAndCellNormals::WorkletProcessCellNormals
Definition: OrientPointAndCellNormals.h:163
vtkm::worklet::OrientPointAndCellNormals::WorkletMarkSourcePoints::ExecutionSignature
void(_1 coord, _2 pointNormal, _3 ranges, _4 activePoints, _5 visitedPoints) ExecutionSignature
Definition: OrientPointAndCellNormals.h:91
Algorithm.h
vtkm::worklet::DispatcherMapTopology
Dispatcher for worklets that inherit from WorkletMapTopology.
Definition: DispatcherMapTopology.h:31
vtkm::worklet::WorkletMapField::FieldIn
A control signature tag for input fields.
Definition: WorkletMapField.h:49
vtkm::worklet::WorkletVisitCellsWithPoints
Base class for worklets that map from Points to Cells.
Definition: WorkletMapTopology.h:255
vtkm::worklet::OrientPointAndCellNormals::WorkletMarkActivePoints
Definition: OrientPointAndCellNormals.h:216
vtkm::worklet::OrientPointAndCellNormals::WorkletMarkSourcePoints::ControlSignature
void(FieldIn coords, FieldInOut pointNormals, WholeArrayIn ranges, FieldOut activePoints, FieldOut visitedPoints) ControlSignature
Definition: OrientPointAndCellNormals.h:89
Range.h
VTKM_CONT
#define VTKM_CONT
Definition: ExportMacros.h:57
vtkm::worklet::WorkletMapField::FieldInOut
A control signature tag for input-output (in-place) fields.
Definition: WorkletMapField.h:71
vtkm::cont::make_ArrayHandleBitField
VTKM_CONT vtkm::cont::ArrayHandleBitField make_ArrayHandleBitField(const vtkm::cont::BitField &bitField)
Definition: ArrayHandleBitField.h:196
vtkm::cont::BitField::AllocateAndFill
VTKM_CONT void AllocateAndFill(vtkm::Id numberOfBits, ValueType value, vtkm::cont::Token &token) const
Allocate the requested number of bits and fill with the requested bit or word.
Definition: BitField.h:575
vtkm::worklet::OrientPointAndCellNormals::WorkletMarkSourcePoints::operator()
VTKM_EXEC void operator()(const vtkm::Vec< CoordT, 3 > &point, vtkm::Vec< NormalT, 3 > &pointNormal, const RangePortal &ranges, bool &isActive, bool &isVisited) const
Definition: OrientPointAndCellNormals.h:94
vtkm::worklet::WorkletVisitPointsWithCells::CellIndices
IncidentElementIndices CellIndices
Definition: WorkletMapTopology.h:288
VTKM_LOG_S
#define VTKM_LOG_S(level,...)
Writes a message using stream syntax to the indicated log level.
Definition: Logging.h:261
vtkm::Vec< T, 3 >
Definition: Types.h:975
vtkm::worklet::OrientPointAndCellNormals::INVALID_ID
static constexpr vtkm::Id INVALID_ID
Definition: OrientPointAndCellNormals.h:55
vtkm::Vec
A short fixed-length array.
Definition: Types.h:767
vtkm::worklet::OrientPointAndCellNormals::WorkletMarkActivePoints::operator()
VTKM_EXEC bool operator()(const PointList &pointIds, ActivePointsBitPortal &activePoints, VisitedPointsBitPortal &visitedPoints) const
Definition: OrientPointAndCellNormals.h:228
vtkm::worklet::OrientPointAndCellNormals::WorkletMarkActiveCells::operator()
VTKM_EXEC bool operator()(const CellList &cellIds, ActiveCellsBitPortal &activeCells, VisitedCellsBitPortal &visitedCells) const
Definition: OrientPointAndCellNormals.h:143
vtkm::cont::BitField
Definition: BitField.h:497
vtkm::worklet::OrientPointAndCellNormals::WorkletProcessCellNormals::ControlSignature
void(CellSetIn cells, WholeArrayIn pointNormals, WholeArrayInOut cellNormals, BitFieldIn visitedPoints) ControlSignature
Definition: OrientPointAndCellNormals.h:169
vtkm::worklet::OrientPointAndCellNormals::WorkletMarkActiveCells::ControlSignature
void(CellSetIn cell, BitFieldInOut activeCells, BitFieldInOut visitedCells, FieldInOutPoint activePoints) ControlSignature
Definition: OrientPointAndCellNormals.h:137
vtkm::worklet::MaskIndices
Mask using a given array of indices to include in the output.
Definition: MaskIndices.h:30
vtkm::worklet::OrientPointAndCellNormals::WorkletMarkActivePoints::ControlSignature
void(CellSetIn cell, BitFieldInOut activePoints, BitFieldInOut visitedPoints, FieldInOutCell activeCells) ControlSignature
Definition: OrientPointAndCellNormals.h:222
Logging.h
Logging utilities.
vtkm::cont::ArrayRangeCompute
VTKM_CONT_EXPORT vtkm::cont::ArrayHandle< vtkm::Range > ArrayRangeCompute(const vtkm::cont::UnknownArrayHandle &array, vtkm::cont::DeviceAdapterId device=vtkm::cont::DeviceAdapterTagAny{})
Compute the range of the data in an array handle.
DispatcherMapTopology.h
WorkletMapTopology.h
vtkm::worklet::WorkletVisitPointsWithCells::FieldInOutPoint
FieldInOut FieldInOutPoint
Definition: WorkletMapTopology.h:284
vtkm::exec::arg::InputIndex
The ExecutionSignature tag to use to get the input index.
Definition: InputIndex.h:42
vtkm::worklet::OrientPointAndCellNormals::WorkletProcessPointNormals::operator()
VTKM_EXEC void operator()(const CellList &cellIds, const vtkm::Id pointId, PointNormalsPortal &pointNormals, const CellNormalsPortal &cellNormals, const VisitedCellsBitPortal &visitedCells) const
Definition: OrientPointAndCellNormals.h:267
VecTraits.h
vtkm::cont::LogLevel::Perf
@ Perf
General timing data and algorithm flow information, such as filter execution, worklet dispatches,...
vtkm::worklet::OrientPointAndCellNormals::WorkletProcessCellNormals::ExecutionSignature
void(PointIndices pointIds, InputIndex cellId, _2 pointNormals, _3 cellNormals, _4 visitedPoints) ExecutionSignature
Definition: OrientPointAndCellNormals.h:174
vtkm::worklet::WorkletMapField
Base class for worklets that do a simple mapping of field arrays.
Definition: WorkletMapField.h:38
vtkm::worklet::OrientPointAndCellNormals::Run
static VTKM_CONT void Run(const CellSetType &cells, const vtkm::cont::ArrayHandle< vtkm::Vec< CoordsCompType, 3 >, CoordsStorageType > &coords, vtkm::cont::ArrayHandle< vtkm::Vec< PointNormalCompType, 3 >, PointNormalStorageType > &pointNormals, vtkm::cont::ArrayHandle< vtkm::Vec< CellNormalCompType, 3 >, CellNormalStorageType > &cellNormals)
Definition: OrientPointAndCellNormals.h:306
vtkm::worklet::WorkletVisitCellsWithPoints::FieldInOutCell
FieldInOut FieldInOutCell
Definition: WorkletMapTopology.h:265