Fix moments filter

This commit is contained in:
Sujin Philip 2019-06-14 14:46:43 -04:00 committed by Allison Vacanti
parent 298f68a5c3
commit 06f450615d
2 changed files with 4 additions and 8 deletions

@ -13,6 +13,7 @@
#include <vtkm/cont/ArrayHandle.h>
#include <vtkm/filter/internal/CreateResult.h>
#include <vtkm/worklet/Invoker.h>
#include <vtkm/worklet/moments/ComputeMoments.h>
namespace vtkm
@ -30,13 +31,14 @@ inline VTKM_CONT vtkm::cont::DataSet ComputeMoments::DoExecute(
const vtkm::cont::DataSet& input,
const vtkm::cont::ArrayHandle<T, StorageType>& field,
const vtkm::filter::FieldMetadata& fieldMetadata,
const vtkm::filter::PolicyBase<DerivedPolicy>& policy)
const vtkm::filter::PolicyBase<DerivedPolicy>&)
{
if (fieldMetadata.GetAssociation() != vtkm::cont::Field::Association::POINTS)
{
throw vtkm::cont::ErrorBadValue("Active field for ComputeMoments must be a point field.");
}
vtkm::worklet::Invoker invoke;
vtkm::cont::DataSet output = internal::CreateResult(input);
auto worklet = vtkm::worklet::moments::ComputeMoments(this->Radius);

@ -12,7 +12,7 @@
#ifndef vtk_m_worklet_moments_ComputeMoments_h
#define vtk_m_worklet_moments_ComputeMoments_h
#include <vtkm/worklet/DispatcherPointNeighborhood.h>
#include <vtkm/Math.h>
#include <vtkm/worklet/WorkletPointNeighborhood.h>
#include <vtkm/cont/Field.h>
@ -54,9 +54,6 @@ public:
T& moment) const
{
// TODO: type safety and numerical precision
// FIXME: Radius as Vec3<int>, however, radius_z may be 0 which cause divide by 0.
// We do need to have separate versions for 2D/3D, since we couldn't have Radius_z == 0
// which will cause devision byzero.
auto sum = vtkm::TypeTraits<T>::ZeroInitialization();
vtkm::Vec<vtkm::Float64, 2> recp{ 1.0 / Radius[0], 1.0 / Radius[1] };
@ -125,9 +122,6 @@ public:
T& moment) const
{
// TODO: type safety and numerical precision
// FIXME: Radius as Vec3<int>, however, radius_z may be 0 which cause divide by 0.
// We do need to have separate versions for 2D/3D, since we couldn't have Radius_z == 0
// which will cause devision byzero.
auto sum = vtkm::TypeTraits<T>::ZeroInitialization();
const vtkm::Vec<vtkm::Float64, 3> recp{ 1.0 / this->Radius[0],
1.0 / this->Radius[1],