From 6d254d3e608bd6798dc0dc4aaab94e1ad7498c67 Mon Sep 17 00:00:00 2001 From: Sujin Philip Date: Fri, 1 Apr 2022 12:40:54 -0400 Subject: [PATCH] Fix StructuredPointGradient for Uniform Point Coordinates The scalar field difference along x, y, and z should be divided by the spacing not multiplied. This was causing some test failures in VTK and ParaView when overriding the default contour filter with `vtkmContour`. --- .../worklet/gradient/StructuredPointGradient.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/vtkm/filter/vector_analysis/worklet/gradient/StructuredPointGradient.h b/vtkm/filter/vector_analysis/worklet/gradient/StructuredPointGradient.h index 8d0c118f6..33e1cb747 100644 --- a/vtkm/filter/vector_analysis/worklet/gradient/StructuredPointGradient.h +++ b/vtkm/filter/vector_analysis/worklet/gradient/StructuredPointGradient.h @@ -89,34 +89,34 @@ struct StructuredPointGradient : public vtkm::worklet::WorkletPointNeighborhood if (boundary.IsRadiusInXBoundary(1)) { auto dx = inputField.GetUnchecked(1, 0, 0) - inputField.GetUnchecked(-1, 0, 0); - outputGradient[0] = static_cast(dx * (r[0] * 0.5f)); + outputGradient[0] = static_cast((dx * 0.5f) / r[0]); } else { auto dx = inputField.Get(1, 0, 0) - inputField.Get(-1, 0, 0); - outputGradient[0] = static_cast(dx * r[0]); + outputGradient[0] = static_cast(dx / r[0]); } if (boundary.IsRadiusInYBoundary(1)) { auto dy = inputField.GetUnchecked(0, 1, 0) - inputField.GetUnchecked(0, -1, 0); - outputGradient[1] = static_cast(dy * r[1] * 0.5f); + outputGradient[1] = static_cast((dy * 0.5f) / r[1]); } else { auto dy = inputField.Get(0, 1, 0) - inputField.Get(0, -1, 0); - outputGradient[1] = static_cast(dy * (r[1])); + outputGradient[1] = static_cast(dy / (r[1])); } if (boundary.IsRadiusInZBoundary(1)) { auto dz = inputField.GetUnchecked(0, 0, 1) - inputField.GetUnchecked(0, 0, -1); - outputGradient[2] = static_cast(dz * r[2] * 0.5f); + outputGradient[2] = static_cast((dz * 0.5f) / r[2]); } else { auto dz = inputField.Get(0, 0, 1) - inputField.Get(0, 0, -1); - outputGradient[2] = static_cast(dz * (r[2])); + outputGradient[2] = static_cast(dz / (r[2])); } #if (defined(VTKM_CUDA) && defined(VTKM_GCC)) #pragma GCC diagnostic pop -- GitLab