32template<
class PLayout>
48template<
class PLayout>
77template<
class PLayout>
85template<
class PLayout>
95template <
class PLayout>
105 if (myNode == (
unsigned int) master) {
107 for (ip=0; ip<localNum; ++ip)
110 if (nodes == 1)
return;
114 lp =
new size_t[nodes];
119 for (ip=1; ip<nodes; ++ip) {
123 msg1->
get(lp[rnode]);
128 size_t current,
sum = 0;
129 for (ip=0; ip<nodes; ++ip) {
136 for (ip=1; ip<nodes; ++ip) {
139 bool success =
Ippl::Comm->send(msg2,ip,tag2);
140 if (success ==
false) {
142 "IpplParticleBase<PLayout>::resetID()",
143 "sending initial ID values failed.");
154 bool success =
Ippl::Comm->send(msg1,master,tag1);
155 if (success ==
false) {
157 "IpplParticleBase<PLayout>::resetID()",
158 "sending initial ID values failed.");
161 size_t initialID = 0;
165 msg2->
get(initialID);
168 for (ip=0; ip<localNum; ++ip)
169 this->
ID[ip] = ip + initialID;
178template<
class PLayout>
195 attrib_container_t::iterator abeg =
AttribList.begin();
196 attrib_container_t::iterator aend =
AttribList.end();
197 for ( ; abeg != aend; abeg++ )
198 (*abeg)->putMessage(msg, M, I);
207template<
class PLayout>
210 const std::vector<size_t>& putList)
216 std::vector<size_t>::size_type M = putList.size();
221 attrib_container_t::iterator abeg =
AttribList.begin();
222 attrib_container_t::iterator aend =
AttribList.end();
223 for ( ; abeg != aend; ++abeg )
224 (*abeg)->putMessage(msg, putList);
230template<
class PLayout>
241 attrib_container_t::iterator abeg =
AttribList.begin();
242 attrib_container_t::iterator aend =
AttribList.end();
243 for ( ; abeg != aend; abeg++ )
244 (*abeg)->putMessage(msg, 1, I);
249template<
class PLayout>
253 bool wasempty =
false;
273template<
class PLayout>
279 for (
unsigned int i = 0;i<list.size();++i)
288template<
class PLayout>
295 for (
unsigned int i = 0;i<list.size();++i)
298 for(
int d = 0;d<
Dim;++d)
300 R[list[i]][d] += offset[i][d];
312template<
class PLayout>
328template<
class PLayout>
345template<
class PLayout>
357 attrib_container_t::iterator abeg =
AttribList.begin();
358 attrib_container_t::iterator aend =
AttribList.end();
359 for ( ; abeg != aend; abeg++ )
360 (*abeg)->getMessage(msg, numitems);
368template<
class PLayout>
379 attrib_container_t::iterator abeg =
AttribList.begin();
381 for ( ; abeg != aend; abeg++ )
382 (*abeg)->getMessage(msg, numitems);
393template<
class PLayout>
409template<
class PLayout>
417 attrib_container_t::iterator abeg =
AttribList.begin();
418 attrib_container_t::iterator aend =
AttribList.end();
419 for ( ; abeg != aend; abeg++ )
436template<
class PLayout>
444 attrib_container_t::iterator abeg =
AttribList.begin();
445 attrib_container_t::iterator aend =
AttribList.end();
446 for ( ; abeg != aend; abeg++ )
464template<
class PLayout>
473 unsigned npLocal = np/nPE;
477 unsigned rem = np - npLocal * nPE;
478 if (myPE < rem) ++npLocal;
490template<
class PLayout>
501 attrib_container_t::iterator abeg, aend =
AttribList.end();
502 for (abeg =
AttribList.begin(); abeg != aend; ++abeg)
503 (*abeg)->destroy(M,I,optDestroy);
508 std::pair<size_t,size_t> destroyEvent(I,M);
522template<
class PLayout>
539template<
class PLayout>
548 Layout->update(*
this, &canSwap);
556template<
class PLayout>
568 bool isSorted =
true;
569 typedef std::vector< std::pair<size_t,size_t> > dlist_t;
570 dlist_t::const_iterator curr =
DestroyList.begin();
571 const dlist_t::const_iterator last =
DestroyList.end();
572 dlist_t::const_iterator next = curr + 1;
573 while (next != last && isSorted) {
574 if (*next++ < *curr++) isSorted =
false;
583 attrib_container_t::iterator abeg, aend =
AttribList.end();
584 for (abeg =
AttribList.begin(); abeg != aend; ++abeg)
587 if (updateLocalNum) {
588 for (curr =
DestroyList.begin(); curr != last; ++ curr) {
602template<
class PLayout>
613 attrib_container_t::iterator abeg =
AttribList.begin();
614 attrib_container_t::iterator aend =
AttribList.end();
615 for ( ; abeg != aend; ++abeg )
616 dnum = (*abeg)->ghostDestroy(M, I);
626template<
class PLayout>
640 if ((I + M) >
R.size())
647 attrib_container_t::iterator abeg =
AttribList.begin();
648 attrib_container_t::iterator aend =
AttribList.end();
649 for ( ; abeg != aend; abeg++ )
650 (*abeg)->ghostPutMessage(msg, M, I);
661template<
class PLayout>
664 const std::vector<size_t>& pl) {
669 std::vector<size_t>::size_type M = pl.size();
674 attrib_container_t::iterator abeg =
AttribList.begin();
675 attrib_container_t::iterator aend =
AttribList.end();
676 for ( ; abeg != aend; ++abeg )
677 (*abeg)->ghostPutMessage(msg, pl);
686template<
class PLayout>
702 attrib_container_t::iterator abeg =
AttribList.begin();
703 attrib_container_t::iterator aend =
AttribList.end();
704 for ( ; abeg != aend; abeg++ )
705 (*abeg)->ghostGetMessage(msg, numitems);
711template<
class PLayout>
724 attrib_container_t::iterator abeg =
AttribList.begin();
725 attrib_container_t::iterator aend =
AttribList.end();
726 for ( ; abeg != aend; abeg++ )
727 (*abeg)->ghostGetMessage(msg, numitems);
736template<
class PLayout>
738 attrib_container_t::iterator abeg =
AttribList.begin();
739 attrib_container_t::iterator aend =
AttribList.end();
740 for ( ; abeg != aend; ++abeg )
741 (*abeg)->sort(sortlist);
747template<
class PLayout>
751 out <<
"Particle object contents:";
754 out <<
"\n Attributes (including R and ID): " << P.
numAttributes();
762template<
class PLayout>
767 for (attrib_container_t::size_type i=0; i <
AttribList.size(); ++i) {
void putMessage(Message &m, const T &t)
void getMessage(Message &m, T &t)
T::PETE_Expr_t::PETE_Return_t sum(const PETE_Expr< T > &expr)
std::ostream & operator<<(std::ostream &out, const IpplParticleBase< PLayout > &P)
ParticleLayout< T, Dim > PLayout
Inform & endl(Inform &inf)
#define ADDIPPLSTAT(stat, amount)
#define INCIPPLSTAT(stat)
size_t getMessageAndCreate(Message &)
size_t getSingleMessage(Message &)
size_t ghostGetMessage(Message &, int)
void performDestroy(bool updateLocalNum=false)
size_t readMsgBuffer(MsgBuffer *)
size_t ghostPutMessage(Message &, size_t, size_t)
void initialize(PLayout *)
size_t getTotalNum() const
void ghostDestroy(size_t, size_t)
size_t getMessage(Message &)
void addAttribute(ParticleAttribBase &pa)
size_t putMessage(Message &, size_t, size_t)
std::vector< std::pair< size_t, size_t > > DestroyList
size_t writeMsgBuffer(MsgBuffer *&, const std::vector< size_t > &)
bool singleInitNode() const
ParticleAttribBase::SortList_t SortList_t
size_t writeMsgBufferWithOffsets(MsgBuffer *&, const std::vector< size_t > &, const std::vector< O > &)
attrib_container_t::size_type numAttributes() const
bool getUpdateFlag(UpdateFlags f) const
void printDebug(Inform &)
size_t getLocalNum() const
void globalCreate(size_t np)
size_t readGhostMsgBuffer(MsgBuffer *, int)
attrib_container_t AttribList
size_t ghostGetSingleMessage(Message &, int)
void createWithID(unsigned id)
void destroy(size_t, size_t, bool=false)
Message & put(const T &val)
Message & get(const T &cval)
Vektor< T, Dim > SingleParticlePos_t
static Communicate * Comm