19 using std::back_inserter;
21 template<
typename P,
typename InteractionType>
30 template<
typename P,
typename I>
33 const typename I::ParameterType& param
36 m_comm(PPA->getComm()),
45 template<
typename P,
typename InteractionType>
49 if(m_comm.get_dim(i)>1){
51 exchange_boundary(i,1);
53 exchange_boundary(i,-1);
64 template<
typename P,
typename InteractionType>
67 console.
XDebug() <<
"PIS_E::exchange_boundary(" << dim <<
"," << dir <<
") at node " << m_comm.rank() <<
"\n";
69 vector<InteractionType> recv_buffer;
70 vector<InteractionType> send_buffer;
73 bdry_ids = this->m_ppa->getBoundarySlabIds(dim,dir);
76 typename list<InteractionType>::iterator
iter = this->m_interactions.begin();
77 iter != this->m_interactions.end();
80 vector<int> pids=
iter->getAllID();
83 vector<int>::iterator it2=pids.begin();
84 while(it2!=pids.end() && !flag){
85 flag=(bdry_ids.find(*it2)!=bdry_ids.end());
89 send_buffer.push_back(*
iter);
93 m_comm.shift_cont_packed(send_buffer,recv_buffer,dim,dir,m_exchg_tag);
95 for(
typename vector<InteractionType>::iterator
iter=recv_buffer.begin();
96 iter!=recv_buffer.end();
103 console.
XDebug() <<
"end PIS_E::exchange_boundary(" << dim <<
"," << dir <<
") at node " << m_comm.rank() <<
"\n";
110 template<
typename P,
typename InteractionType>
113 console.
XDebug() <<
"PIS_E::rebuild at node " << m_comm.rank() <<
"\n";
114 console.
XDebug() <<
"size pre rebuild: " << this->m_interactions.size() <<
"\n";
117 for(
typename list<InteractionType>::iterator
iter = this->m_interactions.begin();
118 iter!=this->m_interactions.end();
120 vector<int> pids=
iter->getAllID();
126 typename list<InteractionType>::iterator
iter = this->m_interactions.begin();
127 while(
iter != this->m_interactions.end()){
128 vector<int> pids=
iter->getAllID();
129 vector<int>::const_iterator it2=pids.begin();
132 while(it2!=pids.end() && flag){
146 const typename list<InteractionType>::iterator er_iter=
iter;
148 this->m_interactions.erase(er_iter);
149 m_set.erase(make_pair(pids[0],pids[1]));
153 console.
XDebug() <<
"size post rebuild: " << this->m_interactions.size() <<
"\n";
164 template<
typename P,
typename InteractionType>
171 vector<int> pids=In.getAllID();
174 vector<int>::const_iterator
iter=pids.begin();
175 while(
iter!=pids.end() && flag){
186 this->m_interactions.push_back(In);
187 m_set.insert(make_pair(pids[0],pids[1]));
194 template<
typename P,
typename InteractionType>
199 if(pids[0] > pids [1]){
200 console.
Debug()<<
"flipped PIDS : " << pids[0] <<
"," << pids[1] <<
"\n";
202 res=m_set.find(make_pair(pids[0],pids[1]))!=m_set.end();
215 template<
typename P,
typename InteractionType>
223 copy(cpids.begin(),cpids.end(),back_inserter(pids));
224 sort(pids.begin(),pids.end());
230 vector<int>::const_iterator
iter=pids.begin();
231 while(
iter!=pids.end() && flag){
243 InteractionType new_interaction(pptr[0],pptr[1],m_param);
244 vector<int> allid=new_interaction.getAllID();
247 this->m_interactions.push_back(new_interaction);
248 this->m_set.insert(make_pair(pids[0],pids[1]));
255 template<
typename P,
typename InteractionType>
260 << this->m_interactions.size()
261 <<
" interaction forces\n" ;
264 typename list<InteractionType>::iterator it = this->m_interactions.begin();
265 it != this->m_interactions.end();
277 template<
typename P,
typename InteractionType>