diff --git a/vtkm/worklet/particleadvection/ParticleAdvectionWorklets.h b/vtkm/worklet/particleadvection/ParticleAdvectionWorklets.h index 560726fa6..ed1db719d 100644 --- a/vtkm/worklet/particleadvection/ParticleAdvectionWorklets.h +++ b/vtkm/worklet/particleadvection/ParticleAdvectionWorklets.h @@ -31,6 +31,7 @@ #include #include +#include #include namespace vtkm @@ -67,7 +68,7 @@ public: } else { - ic.SetStatusOutOfBounds(idx); + ic.SetStatusOutOfSpatialBounds(idx); } } } @@ -129,10 +130,10 @@ private: else numSeeds = ParticlesPerRound; - std::vector steps(static_cast(numSeeds), 0), - status(static_cast(numSeeds), ParticleStatus::OK); + std::vector steps((size_t)numSeeds, 0); + std::vector status((size_t)numSeeds, ParticleStatus()); vtkm::cont::ArrayHandle stepArray = vtkm::cont::make_ArrayHandle(&steps[0], numSeeds); - vtkm::cont::ArrayHandle statusArray = + vtkm::cont::ArrayHandle statusArray = vtkm::cont::make_ArrayHandle(&status[0], numSeeds); vtkm::cont::ArrayHandleIndex idxArray(numSeeds); @@ -229,9 +230,10 @@ private: if (NeedParticleRounds && num > ParticlesPerRound) num = ParticlesPerRound; - std::vector steps((size_t)num, 0), status((size_t)num, ParticleStatus::OK); + std::vector steps((size_t)num, 0); + std::vector status((size_t)num, ParticleStatus()); vtkm::cont::ArrayHandle stepArray = vtkm::cont::make_ArrayHandle(&steps[0], num); - vtkm::cont::ArrayHandle statusArray = + vtkm::cont::ArrayHandle statusArray = vtkm::cont::make_ArrayHandle(&status[0], num); vtkm::cont::ArrayHandleIndex idxArray(num); @@ -269,9 +271,10 @@ private: if (NeedParticleRounds && num > ParticlesPerRound) num = ParticlesPerRound; - std::vector steps((size_t)num, 0), status((size_t)num, ParticleStatus::OK); + std::vector steps((size_t)num, 0); + std::vector status((size_t)num, ParticleStatus()); vtkm::cont::ArrayHandle stepArray = vtkm::cont::make_ArrayHandle(&steps[0], num); - vtkm::cont::ArrayHandle statusArray = + vtkm::cont::ArrayHandle statusArray = vtkm::cont::make_ArrayHandle(&status[0], num); vtkm::cont::ArrayHandleIndex idxArray(num); diff --git a/vtkm/worklet/particleadvection/ParticleStatus.h b/vtkm/worklet/particleadvection/ParticleStatus.h index d4f450c53..78213275c 100644 --- a/vtkm/worklet/particleadvection/ParticleStatus.h +++ b/vtkm/worklet/particleadvection/ParticleStatus.h @@ -53,7 +53,7 @@ public: } bool Terminated() const { - return (Error() || Terminated() || ExitedSpatialBoundary() || ExitedTemporalBoundary()); + return (CheckBit(TERMINATED) || Error() || ExitedSpatialBoundary() || ExitedTemporalBoundary()); } bool Integrateable() const { diff --git a/vtkm/worklet/particleadvection/Particles.h b/vtkm/worklet/particleadvection/Particles.h index 0e15f394c..3f0448d70 100644 --- a/vtkm/worklet/particleadvection/Particles.h +++ b/vtkm/worklet/particleadvection/Particles.h @@ -24,6 +24,7 @@ #include #include #include +#include namespace vtkm { @@ -32,12 +33,12 @@ namespace worklet namespace particleadvection { -enum ParticleStatus +/*enum ParticleStatus { OK = 0, TERMINATE = 1, OUT_OF_BOUNDS = 2, -}; +};*/ template class Particles : public vtkm::exec::ExecutionObjectBase @@ -46,6 +47,8 @@ private: typedef typename vtkm::cont::ArrayHandle::template ExecutionTypes::Portal IdPortal; + typedef typename vtkm::cont::ArrayHandle::template ExecutionTypes< + DeviceAdapterTag>::Portal StatusPortal; typedef typename vtkm::cont::ArrayHandle>::template ExecutionTypes< DeviceAdapterTag>::Portal PosPortal; @@ -71,7 +74,7 @@ public: VTKM_EXEC_CONT Particles(const PosPortal& _pos, const IdPortal& _steps, - const IdPortal& _status, + const StatusPortal& _status, const vtkm::Id& _maxSteps) : pos(_pos) , steps(_steps) @@ -83,7 +86,7 @@ public: VTKM_EXEC_CONT Particles(vtkm::cont::ArrayHandle>& posArray, vtkm::cont::ArrayHandle& stepsArray, - vtkm::cont::ArrayHandle& statusArray, + vtkm::cont::ArrayHandle& statusArray, const vtkm::Id& _maxSteps) : maxSteps(_maxSteps) { @@ -104,12 +107,12 @@ public: } VTKM_EXEC_CONT - void SetStatusTerminate(const vtkm::Id& idx) { status.Set(idx, TERMINATE); } + void SetStatusTerminate(const vtkm::Id& idx) { status.Get(idx).SetTerminated(); } VTKM_EXEC_CONT - void SetStatusOutOfBounds(const vtkm::Id& idx) { status.Set(idx, OUT_OF_BOUNDS); } + void SetStatusOutOfSpatialBounds(const vtkm::Id& idx) { status.Get(idx).ExitedSpatialBoundary(); } VTKM_EXEC_CONT - bool Done(const vtkm::Id& idx) { return status.Get(idx) != OK; } + bool Done(const vtkm::Id& idx) { return !(status.Get(idx).Integrateable()); } VTKM_EXEC_CONT vtkm::Vec GetPos(const vtkm::Id& idx) const { return pos.Get(idx); } @@ -120,7 +123,8 @@ public: private: PosPortal pos; - IdPortal steps, status; + IdPortal steps; + StatusPortal status; vtkm::Id maxSteps; }; @@ -131,6 +135,8 @@ private: typedef typename vtkm::cont::ArrayHandle::template ExecutionTypes::Portal IdPortal; + typedef typename vtkm::cont::ArrayHandle::template ExecutionTypes< + DeviceAdapterTag>::Portal StatusPortal; typedef typename vtkm::cont::ArrayHandle>::template ExecutionTypes< DeviceAdapterTag>::Portal PosPortal; @@ -160,7 +166,7 @@ public: VTKM_EXEC_CONT StateRecordingParticles(const PosPortal& _pos, const IdPortal& _steps, - const IdPortal& _status, + const StatusPortal& _status, const vtkm::Id& _maxSteps) : pos(_pos) , steps(_steps) @@ -174,7 +180,7 @@ public: VTKM_EXEC_CONT StateRecordingParticles(vtkm::cont::ArrayHandle>& posArray, vtkm::cont::ArrayHandle& stepsArray, - vtkm::cont::ArrayHandle& statusArray, + vtkm::cont::ArrayHandle& statusArray, const vtkm::Id& _maxSteps) : maxSteps(_maxSteps) , histSize(_maxSteps) @@ -189,7 +195,7 @@ public: VTKM_EXEC_CONT StateRecordingParticles(vtkm::cont::ArrayHandle>& posArray, vtkm::cont::ArrayHandle& stepsArray, - vtkm::cont::ArrayHandle& statusArray, + vtkm::cont::ArrayHandle& statusArray, const vtkm::Id& _maxSteps, vtkm::Id& _histSize) : maxSteps(_maxSteps) @@ -215,12 +221,12 @@ public: } VTKM_EXEC_CONT - void SetStatusTerminate(const vtkm::Id& idx) { status.Set(idx, TERMINATE); } + void SetStatusTerminate(const vtkm::Id& idx) { status.Get(idx).SetTerminated(); } VTKM_EXEC_CONT - void SetStatusOutOfBounds(const vtkm::Id& idx) { status.Set(idx, OUT_OF_BOUNDS); } + void SetStatusOutOfSpatialBounds(const vtkm::Id& idx) { status.Get(idx).ExitedSpatialBoundary(); } VTKM_EXEC_CONT - bool Done(const vtkm::Id& idx) { return status.Get(idx) != OK; } + bool Done(const vtkm::Id& idx) { return !(status.Get(idx).Integrateable()); } VTKM_EXEC_CONT vtkm::Vec GetPos(const vtkm::Id& idx) const { return pos.Get(idx); } @@ -236,7 +242,8 @@ public: private: PosPortal pos; - IdPortal steps, status; + IdPortal steps; + StatusPortal status; vtkm::Id maxSteps, numPos, histSize; PosPortal history; @@ -253,6 +260,8 @@ private: typedef typename vtkm::cont::ArrayHandle::template ExecutionTypes::Portal IdPortal; + typedef typename vtkm::cont::ArrayHandle::template ExecutionTypes< + DeviceAdapterTag>::Portal StatusPortal; typedef typename vtkm::cont::ArrayHandle>::template ExecutionTypes< DeviceAdapterTag>::Portal PosPortal; @@ -285,7 +294,7 @@ public: VTKM_EXEC_CONT StateRecordingParticlesRound(const PosPortal& _pos, const IdPortal& _steps, - const IdPortal& _status, + const StatusPortal& _status, const vtkm::Id& _maxSteps, const vtkm::Id& _histSize, const vtkm::Id& _offset, @@ -303,7 +312,7 @@ public: VTKM_EXEC_CONT StateRecordingParticlesRound(vtkm::cont::ArrayHandle>& posArray, vtkm::cont::ArrayHandle& stepsArray, - vtkm::cont::ArrayHandle& statusArray, + vtkm::cont::ArrayHandle& statusArray, const vtkm::Id& _maxSteps, const vtkm::Id& _histSize, const vtkm::Id& _offset, @@ -334,15 +343,15 @@ public: } VTKM_EXEC_CONT - void SetStatusTerminate(const vtkm::Id& idx) { status.Set(idx, TERMINATE); } + void SetStatusTerminate(const vtkm::Id& idx) { status.Get(idx).SetTerminated(); } VTKM_EXEC_CONT - void SetStatusOutOfBounds(const vtkm::Id& idx) { status.Set(idx, OUT_OF_BOUNDS); } + void SetStatusOutOfSpatialBounds(const vtkm::Id& idx) { status.Get(idx).ExitedSpatialBoundary(); } VTKM_EXEC_CONT bool Done(const vtkm::Id& idx) { vtkm::Id nSteps = steps.Get(idx); - return (nSteps - offset == histSize) || status.Get(idx) != OK; + return (nSteps - offset == histSize) || !(status.Get(idx).Integrateable()); } VTKM_EXEC_CONT @@ -359,16 +368,18 @@ public: private: PosPortal pos; - IdPortal steps, status; + IdPortal steps; + StatusPortal status; vtkm::Id maxSteps, numPos, histSize, offset, totalMaxSteps; PosPortal history; public: vtkm::cont::ArrayHandle> historyArray; }; -} -} -} + +} //namespace particleadvection +} //namespace worklet +} //namespace vtkm #endif // vtk_m_worklet_particleadvection_Particles_h