1 #ifndef BOX_PARTICLE_CACHING_POLICY 
    2 #define BOX_PARTICLE_CACHING_POLICY 
   21 template<
class T, 
unsigned Dim, 
class Mesh>
 
   60                         for (
unsigned d=0; d<2*
Dim; ++d)
 
   62                                 if(pBConds[d] == periodicBCond)
 
   70                 for (;localVN!=localVNend;++localVN)
 
   77                         for(
unsigned int d = 0;d<
Dim;++d)
 
   84                         std::fill(offset.
begin(), offset.
end(), 0);
 
   87                                 for(
unsigned int d = 0;d<
Dim;++d)
 
   89                                         if(
periodic[2*d] && (exdom[d].first() < globalDomain[d].first()))
 
   91                                                 offset[d] = globalDomain[d].length();
 
   93                                         else if(
periodic[2*d+1] && (exdom[d].last() > globalDomain[d].last()))
 
   95                                                 offset[d] = -globalDomain[d].length();
 
  100                                 std::fill(onoff, onoff+Dim, 0);
 
  105                                         for(
unsigned int d = 0;d<
Dim;++d)
 
  118                                         for(i = touchRange.first; i != touchRange.second; ++i)
 
  120                                                 int node = (*i).second->getNode();
 
  125                                                 for(
unsigned int d = 0;d<
Dim;++d)
 
  127                                                         dom[d] = 
PRegion<T>(dom[d].first() - onoff[d]*offset[d],
 
  128                                                                                                 dom[d].last()  - onoff[d]*offset[d]);
 
  129                                                         tmpoffset[d] = onoff[d]*offset[d];
 
  132                                                 regions[node].push_back(std::make_pair(dom,tmpoffset));
 
  141                                                 if((onoff[j] = !onoff[j]))
 
  160                 typedef typename std::map<unsigned, std::list<std::pair<NDRegion<T,Dim>, 
Offset_t> > >
::iterator m_iterator;
 
  163                 PData.ghostDestroy(PData.getGhostNum(), 0);
 
  169                 std::vector<MPI_Request> requests;
 
  170                 std::vector<MsgBuffer*> buffers;
 
  178                         std::vector<size_t> sendlist;
 
  179                         std::vector<Offset_t> offsetlist;
 
  184                                 for (
unsigned int i = 0;i < PData.getLocalNum();++i)
 
  187                                         for (
unsigned int d = 0;d < 
Dim;++d)
 
  193                                                 sendlist.push_back(i);
 
  194                                                 offsetlist.push_back((*li).second);
 
  204                                 requests.push_back(
Ippl::Comm->raw_isend(0, 0, node, tag));
 
  210                                 PData.writeMsgBufferWithOffsets(msgbuf, sendlist,offsetlist);
 
  213                                 requests.push_back(request);
 
  214                                 buffers.push_back(msgbuf);
 
  221                 Format *format = PData.getFormat();
 
  230                                 MsgBuffer recvbuf(format, buffer, bufsize);
 
  231                                 PData.readGhostMsgBuffer(&recvbuf, node);
 
  236         MPI_Waitall(requests.size(), &(requests[0]), MPI_STATUSES_IGNORE);
 
  237         for (
unsigned int j = 0; j<buffers.size(); ++j)
 
  239                         delete buffers[j]->getFormat();
 
void updateGhostParticles(IpplParticleBase< ParticleSpatialLayout< T, Dim, Mesh, C > > &PData, ParticleSpatialLayout< T, Dim, Mesh, C > &)
T ParticlePeriodicBCond(const T t, const T minval, const T maxval)
RegionLayout< T, Dim, Mesh > & getLayout()
const NDRegion< T, Dim > & getDomain() const 
virtual MPI_Request raw_isend(void *, int, int, int)
virtual int raw_probe_receive(char *&, int &, int &)
void setCacheDimension(int d, T length)
int next_tag(int t, int s=1000)
BoxParticleCachingPolicy()
void updateCacheInformation(ParticleSpatialLayout< T, Dim, Mesh, C > &PLayout)
bool touches(const NDRegion< T, Dim > &nr) const 
#define P_SPATIAL_GHOST_TAG
std::map< unsigned, std::list< std::pair< NDRegion< T, Dim >, Offset_t > > > regions
ParticleBConds< T, Dim > & getBConds()
bool getUpdateFlag(UpdateFlags f) const 
touch_range_dv touch_range_rdv(const NDRegion< T, Dim > &domain)
T operator[](int i) const 
std::string::iterator iterator
static Communicate * Comm
void setAllCacheDimensions(T length)
~BoxParticleCachingPolicy()