51 #ifndef vtkm_worklet_cosmotools_graft_particle_h
52 #define vtkm_worklet_cosmotools_graft_particle_h
74 WholeArrayIn partIdArray,
75 WholeArrayIn location,
76 WholeArrayIn firstParticleId,
77 WholeArrayIn lastParticleId,
78 WholeArrayOut haloId);
101 template <
typename InIdPortalType,
102 typename InFieldPortalType,
103 typename InVectorPortalType,
104 typename OutPortalType>
109 const InIdPortalType& partIdArray,
110 const InFieldPortalType& location,
111 const InVectorPortalType& firstParticleId,
112 const InVectorPortalType& lastParticleId,
113 OutPortalType& haloId)
const
121 for (
vtkm::Id z = zVal - 1; z <= zVal + 1; z++)
123 for (
vtkm::Id y = yVal - 1; y <= yVal + 1; y++)
128 vtkm::Id startParticle = firstParticleId.Get(firstBinId);
129 vtkm::Id endParticle = lastParticleId.Get(firstBinId);
131 for (
vtkm::Id j = startParticle; j < endParticle; j++)
133 vtkm::Id jPartId = partIdArray.Get(j);
136 T xDist = iloc[0] - jloc[0];
137 T yDist = iloc[1] - jloc[1];
138 T zDist = iloc[2] - jloc[2];
139 if ((xDist * xDist + yDist * yDist + zDist * zDist) <=
linkLenSq)
141 if ((haloId.Get(iPartId) == haloId.Get(haloId.Get(iPartId))) &&
142 (haloId.Get(jPartId) < haloId.Get(iPartId)))
144 haloId.Set(haloId.Get(iPartId), haloId.Get(jPartId));