13 template<
typename P,
typename InteractionType>
22 template<
typename P,
typename I>
25 const typename I::ParameterType& param
28 m_comm(PPA->getComm()),
37 template<
typename P,
typename InteractionType>
41 if(m_comm.get_dim(i)>1){
43 exchange_boundary(i,1);
45 exchange_boundary(i,-1);
56 template<
typename P,
typename InteractionType>
59 console.
XDebug() <<
"PIS_E::exchange_boundary(" << dim <<
"," << dir <<
") at node " << m_comm.rank() <<
"\n";
61 vector<InteractionType> recv_buffer;
62 vector<InteractionType> send_buffer;
65 bdry_ids = this->m_ppa->getBoundarySlabIds(dim,dir);
68 typename list<InteractionType>::iterator iter = this->m_interactions.begin();
69 iter != this->m_interactions.end();
72 vector<int> pids=iter->getAllID();
75 vector<int>::iterator it2=pids.begin();
76 while(it2!=pids.end() && !flag){
77 flag=(bdry_ids.find(*it2)!=bdry_ids.end());
81 send_buffer.push_back(*iter);
85 m_comm.shift_cont_packed(send_buffer,recv_buffer,dim,dir,m_exchg_tag);
87 for(
typename vector<InteractionType>::iterator iter=recv_buffer.begin();
88 iter!=recv_buffer.end();
95 console.
XDebug() <<
"end PIS_E::exchange_boundary(" << dim <<
"," << dir <<
") at node " << m_comm.rank() <<
"\n";
102 template<
typename P,
typename InteractionType>
105 console.
XDebug() <<
"PIS_E::rebuild at node " << m_comm.rank() <<
"\n";
106 console.
XDebug() <<
"size pre rebuild: " << this->m_interactions.size() <<
"\n";
109 for(
typename list<InteractionType>::iterator iter = this->m_interactions.begin();
110 iter!=this->m_interactions.end();
112 vector<int> pids=iter->getAllID();
113 console.
XDebug() << pids[0] <<
" - " << pids[1] <<
"\n";
118 typename list<InteractionType>::iterator iter = this->m_interactions.begin();
119 while(iter != this->m_interactions.end()){
120 vector<int> pids=iter->getAllID();
121 vector<int>::const_iterator it2=pids.begin();
124 while(it2!=pids.end() && flag){
138 const typename list<InteractionType>::iterator er_iter=iter;
140 this->m_interactions.erase(er_iter);
141 m_set.erase(make_pair(pids[0],pids[1]));
145 console.
XDebug() <<
"size post rebuild: " << this->m_interactions.size() <<
"\n";
156 template<
typename P,
typename InteractionType>
163 vector<int> pids=In.getAllID();
166 vector<int>::const_iterator iter=pids.begin();
167 while(iter!=pids.end() && flag){
178 this->m_interactions.push_back(In);
179 m_set.insert(make_pair(pids[0],pids[1]));
186 template<
typename P,
typename InteractionType>
191 if(pids[0] > pids [1]){
192 console.
Debug()<<
"flipped PIDS : " << pids[0] <<
"," << pids[1] <<
"\n";
194 res=m_set.find(make_pair(pids[0],pids[1]))!=m_set.end();
207 template<
typename P,
typename InteractionType>
217 vector<int>::const_iterator iter=pids.begin();
218 while(iter!=pids.end() && flag){
230 InteractionType new_interaction(pptr[0],pptr[1],m_param);
231 vector<int> allid=new_interaction.getAllID();
232 console.
XDebug() << allid[0] <<
" , " << allid[1] <<
"\n";
234 this->m_interactions.push_back(new_interaction);
235 this->m_set.insert(make_pair(pids[0],pids[1]));
242 template<
typename P,
typename InteractionType>
247 << this->m_interactions.size()
248 <<
" interaction forces\n" ;
251 typename list<InteractionType>::iterator it = this->m_interactions.begin();
252 it != this->m_interactions.end();
264 template<
typename P,
typename InteractionType>