17 #include "Foundation/console.h"
35 console.
XDebug() <<
"making CViscWallIG pos \n";
37 m_k=I->getSpringConst();
41 this->m_inner_count=0;
48 console.
XDebug() <<
"calculating " << m_visc_interactions.size() <<
" viscous wall forces\n" ;
49 console.
XDebug() <<
"calculating " << m_elastic_interactions.size() <<
" elastic wall forces\n" ;
53 it!=m_visc_interactions.end();
60 it!=m_elastic_interactions.end();
75 this->m_wall->setVel(V);
88 double K=this->m_inner_count*m_k;
90 double K_global=this->m_comm->sum_all(K);
101 iter != m_visc_interactions.end();
105 Vec3 f_i=iter->getForce();
106 F_local+=(f_i*O_f)*O_f;
112 iter != m_elastic_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)/K_global;
130 this->m_wall->moveBy(d*O_f);
132 }
while((it<10)&&(fabs(d)>10e-6));
144 console.
XDebug() <<
"CViscWallIG::Update()\n" ;
148 m_visc_interactions.erase(m_visc_interactions.begin(),m_visc_interactions.end());
149 this->m_inner_count=0;
151 typename ParallelParticleArray<T>::ParticleListHandle plh=
153 for(
typename ParallelParticleArray<T>::ParticleListIterator iter=plh->begin();
156 if((*iter)->getTag()==m_tag){
157 bool iflag=PPA->
isInInner((*iter)->getPos());
159 this->m_inner_count+=(iflag ? 1 : 0);
164 m_elastic_interactions.erase(m_elastic_interactions.begin(),m_elastic_interactions.end());
166 for(
typename ParallelParticleArray<T>::ParticleListIterator iter=plh->begin();
169 bool iflag=PPA->
isInInner((*iter)->getPos());
171 this->m_inner_count+=(iflag ? 1 : 0);
173 console.
XDebug() <<
"end CViscWallIG::Update()\n";
177 ostream& operator<<(ostream& ost,const CViscWallIG<T>& IG)
179 ost <<
"CViscWallIG" << endl << flush;
180 ost << *(IG.m_wall) << endl << flush;