17 #include "Foundation/console.h"
35 console.
XDebug() <<
"making CEWallInteractionGroup \n";
37 m_k=I->getSpringConst();
45 console.
XDebug() <<
"calculating " << m_interactions.size() <<
" elastic wall forces\n" ;
49 it != m_interactions.end();
60 console.
XDebug() <<
"CEWallInteractionGroup::Update()\n" ;
63 <<
"CEWallInteractionGroup::Update: wall origin = " << this->m_wall->getOrigin()
64 <<
", wall normal = " << this->m_wall->getNormal() <<
"\n" ;
68 m_interactions.erase(m_interactions.begin(),m_interactions.end());
69 this->m_inner_count=0;
71 typename ParallelParticleArray<T>::ParticleListHandle plh=
73 for(
typename ParallelParticleArray<T>::ParticleListIterator iter=plh->begin();
76 bool iflag=PPA->
isInInner((*iter)->getPos());
78 this->m_inner_count+=(iflag ? 1 : 0);
80 if(!CParticle::getDo2dCalculations()){
81 k_local+=m_k*((*iter)->getRad());
88 m_k_global=this->m_comm->sum_all(k_local);
90 console.
XDebug() <<
"end CEWallInteractionGroup::Update()\n";
112 iter!=m_interactions.end();
116 Vec3 f_i=iter->getForce();
117 F_local+=(f_i*O_f)*O_f;
122 double fgx=this->m_comm->sum_all(F_local.X());
123 double fgy=this->m_comm->sum_all(F_local.Y());
124 double fgz=this->m_comm->sum_all(F_local.Z());
128 d=((F+F_global)*O_f)/m_k_global;
130 this->m_wall->moveBy(d*O_f);
132 }
while((it<10)&&(fabs(d)>10e-6));
137 ostream& operator<<(ostream& ost,const CEWallInteractionGroup<T>& IG)
139 ost <<
"CEWallInteractionGroup" << endl << flush;
140 ost << *(IG.m_wall) << endl << flush;