40 if(delPoints.
empty())
return true;
42 auto oldRange = pFlagsD_.activeRange();
43 auto oldSize = size();
45 if(!pFlagsD_.deletePoints(delPoints.
deviceView()))
48 "Error in deleting points from internal points"<<
endl;
53 auto newRange = pFlagsD_.activeRange();
54 auto newSize = size();
71 if(oldRange!=newRange)
78 auto iter = time().currentIter();
79 auto t = time().currentTime();
80 auto dt = time().dt();
82 if( !notify(iter, t, dt, msg, varList) )
102 "Invalid boundary index "<< toBoundaryIndex<<
endl;
107 pFlagsD_.changeFlags(changePoints.
deviceView(), toBoundaryIndex);
113 pointPosition_.deviceViewAll(),
124 varList.
emplaceBack(
"fromBoundaryIndex", fromBoundaryIndex);
125 varList.
emplaceBack(
"toBoundaryIndex", toBoundaryIndex);
130 time().currentIter(),
131 time().currentTime(),
137 "Error in notify for item transfer from "<< fromBoundaryIndex<<
138 " to "<<toBoundaryIndex<<
" boundary"<<
endl;
147 if(!pointPosition_.reorderItems(sortedIndices))
153 pFlagsD_.resetFlags(pFlagsD_.capacity(), 0u, sortedIndices.
size());
161 pointPosition_(
"internalPoints",
"internalPoints", initialCapacity_, 0,
RESERVE()),
162 pFlagsD_(initialCapacity_, 0, 0)
188 pointPosition_.assign(posVec);
211 return pointPosition_;
218 return pointPosition_;
224 auto maskH = activePointsMaskHost();
225 auto pointsH = pointPositionHost();
229 pointPosition_.name(),
230 pointPosition_.fieldKey(),
236 auto aRange = maskH.activeRange();
239 for(
auto i=aRange.start(); i<aRange.end(); i++)
242 if( maskH.isActive(i) )
244 aPoints[
n] = pointsH[i];
257 if(!pFlagsD_.deletePoints(delPoints))
260 "Error in deleting points from internal points"<<
endl;
273 const std::array<real,6>& dist
277 return pFlagsD_.markPointRegions
280 pointPosition_.deviceViewAll(),
300 pFlagsD_.fillNeighborsLists(
318 auto aRange = pFlagsD_.activeRange();
319 uint32 emptySpots = pFlagsD_.capacity() - pFlagsD_.numActive();
321 if(emptySpots!= 0) emptySpots--;
325 if( numNew > emptySpots )
328 aRange = pFlagsD_.activeRange();
329 uint32 newCap = pFlagsD_.changeCapacity(numNew);
338 if(numNew <= aRange.start())
345 else if( numNew <= pFlagsD_.capacity() - aRange.end() )
349 aRange.end(), aRange.end()+numNew);
354 auto newIndices = pFlagsD_.getEmptyPoints(numNew);
355 if(numNew != newIndices.size())
358 numNew<<
" "<<newIndices.size() <<
endl;
374 auto nAdded = pFlagsD_.addInternalPoints(indices.deviceView());
377 if(nAdded != numNew )
383 pointPosition_.reserve( pFlagsD_.capacity() );
384 if(!pointPosition_.insertSetElement(indices, points))
387 "Error in inserting new positions into pointPosition"<<
388 " internalPoints field"<<
endl;
392 auto newARange = pFlagsD_.activeRange();
394 if( aRange.end() != newARange.end() )
403 else if(aRange.start() != newARange.start())
410 auto tInfo = time().TimeInfo();
420 "Error in notifying observers of "<< subscriberName()<<
endl;
436 auto aRange = pFlagsD_.activeRange();
437 uint32 emptySpots = pFlagsD_.capacity() - pFlagsD_.numActive();
439 if(emptySpots!= 0) emptySpots--;
441 if( numNew > emptySpots )
444 aRange = pFlagsD_.activeRange();
445 uint32 newCap = pFlagsD_.changeCapacity(numNew);
454 if(numNew <= aRange.start())
460 else if( numNew <= pFlagsD_.capacity() - aRange.end() )
464 aRange.end(), aRange.end()+numNew);
469 auto newIndices = pFlagsD_.getEmptyPoints(numNew);
470 if(numNew != newIndices.size())
473 numNew<<
" "<<newIndices.size() <<
endl;
489 auto nAdded = pFlagsD_.addInternalPoints(indices.deviceView());
492 if(nAdded != numNew )
498 pointPosition_.reserve( pFlagsD_.capacity() );
500 if(!pointPosition_.insertSetElement(indices, points.
deviceView()))
503 "Error in inserting new positions into pointPosition"<<
504 " internalPoints field"<<
endl;
508 auto newARange = pFlagsD_.activeRange();
510 if( aRange.end() != newARange.end() )
519 else if(aRange.start() != newARange.start())
535 PointsTypeHost fRead(pointPosition_.name(), pointPosition_.fieldKey());
540 "Error in reading pointPosition from stream "<< is.
name()<<
endl;
544 pointPosition_.assignFromHost(fRead);
546 pFlagsD_ =
pFlagTypeDevice(pointPosition_.capacity(), 0, pointPosition_.size());
560 auto aPoints = this->activePointsHost();
561 return aPoints.write(os);
572 PointsTypeHost fRead(pointPosition_.name(), pointPosition_.fieldKey());
574 if( !fRead.read(is, iop))
577 "Error in reading pointPosition from stream "<< is.
name()<<
endl;
581 pointPosition_.assignFromHost(fRead);
583 createDeviceFlag(pointPosition_.capacity(), 0, pointPosition_.size());
595 auto aPoints = activePointsHost();
596 return aPoints.write(os,iop);