override PrepareForExecution

This commit is contained in:
Li-Ta Lo 2021-03-17 10:02:47 -06:00
parent 59897dc31d
commit 1222ce5f93
2 changed files with 24 additions and 9 deletions

@ -47,6 +47,10 @@ public:
ParticleDensityNearestGridPoint(const vtkm::Id3& dimension, const vtkm::Bounds& bounds);
template <typename DerivedPolicy>
VTKM_CONT vtkm::cont::DataSet PrepareForExecution(const vtkm::cont::DataSet& input,
vtkm::filter::PolicyBase<DerivedPolicy> policy);
template <typename T, typename StorageType, typename Policy>
VTKM_CONT vtkm::cont::DataSet DoExecute(const vtkm::cont::DataSet& input,
const vtkm::cont::ArrayHandle<T, StorageType>& field,

@ -109,6 +109,25 @@ ParticleDensityNearestGridPoint::ParticleDensityNearestGridPoint(const Id3& dime
{
}
template <typename DerivedPolicy>
VTKM_CONT vtkm::cont::DataSet ParticleDensityNearestGridPoint::PrepareForExecution(
const vtkm::cont::DataSet& input,
vtkm::filter::PolicyBase<DerivedPolicy> policy)
{
if (this->ComputeNumberDensity)
{
return this->DoExecute(
input,
vtkm::cont::make_ArrayHandleConstant(vtkm::FloatDefault{ 1 }, input.GetNumberOfPoints()),
vtkm::filter::FieldMetadata{}, // Ignored
policy);
}
else
{
return this->FilterField::PrepareForExecution(input, policy);
}
}
template <typename T, typename StorageType, typename Policy>
inline VTKM_CONT vtkm::cont::DataSet ParticleDensityNearestGridPoint::DoExecute(
const vtkm::cont::DataSet& dataSet,
@ -141,15 +160,7 @@ inline VTKM_CONT vtkm::cont::DataSet ParticleDensityNearestGridPoint::DoExecute(
vtkm::cont::ArrayHandle<T> density;
vtkm::cont::ArrayCopy(vtkm::cont::ArrayHandleConstant<T>(0, uniform.GetNumberOfCells()), density);
if (this->ComputeNumberDensity)
{
auto ones = vtkm::cont::make_ArrayHandleConstant(T{ 1 }, coords.GetNumberOfValues());
this->Invoke(vtkm::worklet::NGPWorklet{}, coords, ones, locator, density);
}
else
{
this->Invoke(vtkm::worklet::NGPWorklet{}, coords, field, locator, density);
}
this->Invoke(vtkm::worklet::NGPWorklet{}, coords, field, locator, density);
if (DivideByVolume)
{