particle advection enhancements

-Adding support to specify steps already taken by each particle
 to begin particle advection.
This commit is contained in:
Yenpure 2017-07-26 16:35:43 -04:00
parent 385d4045e9
commit c5e2ee97fe
2 changed files with 33 additions and 3 deletions

@ -77,6 +77,37 @@ public:
worklet;
vtkm::cont::ArrayHandle<vtkm::Id, FieldStorage> stepsTaken, status;
vtkm::Id numSeeds = static_cast<vtkm::Id>(pts.GetNumberOfValues());
//Allocate status and steps arrays.
vtkm::cont::ArrayHandleConstant<vtkm::Id> init(0, numSeeds);
stepsTaken.Allocate(numSeeds);
vtkm::cont::DeviceAdapterAlgorithm<DeviceAdapter>::Copy(init, stepsTaken);
worklet.Run(it, pts, fieldArray, nSteps, status, stepsTaken);
//Create output.
ParticleAdvectionResult<FieldType> res(pts, status, stepsTaken);
return res;
}
template <typename IntegratorType,
typename FieldType,
typename PointStorage,
typename FieldStorage,
typename DeviceAdapter>
ParticleAdvectionResult<FieldType> Run(
const IntegratorType& it,
const vtkm::cont::ArrayHandle<vtkm::Vec<FieldType, 3>, PointStorage>& pts,
vtkm::cont::ArrayHandle<vtkm::Vec<FieldType, 3>, FieldStorage> fieldArray,
vtkm::cont::ArrayHandle<vtkm::Id, FieldStorage>& stepsTaken,
const vtkm::Id& nSteps,
const DeviceAdapter&)
{
vtkm::worklet::particleadvection::ParticleAdvectionWorklet<IntegratorType,
FieldType,
DeviceAdapter>
worklet;
vtkm::cont::ArrayHandle<vtkm::Id, FieldStorage> status;
worklet.Run(it, pts, fieldArray, nSteps, status, stepsTaken);
//Create output.

@ -124,15 +124,14 @@ private:
typedef typename vtkm::cont::DeviceAdapterAlgorithm<DeviceAdapterTag> DeviceAlgorithm;
vtkm::Id numSeeds = static_cast<vtkm::Id>(seedArray.GetNumberOfValues());
//Allocate status and steps arrays.
vtkm::cont::ArrayHandleConstant<vtkm::Id> ok(ParticleStatus::STATUS_OK, numSeeds);
statusArray.Allocate(numSeeds);
DeviceAlgorithm::Copy(ok, statusArray);
vtkm::cont::ArrayHandleConstant<vtkm::Id> zero(0, numSeeds);
/*vtkm::cont::ArrayHandleConstant<vtkm::Id> zero(0, numSeeds);
stepsTaken.Allocate(numSeeds);
DeviceAlgorithm::Copy(zero, stepsTaken);
DeviceAlgorithm::Copy(zero, stepsTaken);*/
//Create and invoke the particle advection.
vtkm::cont::ArrayHandleIndex idxArray(numSeeds);