22 template<
class ParticleType,
class IType>
33 template<
class ParticleType,
class IType>
46 template <
class ParticleType,
class IType>
55 case 0: res=m_tri_int_set.find(make_pair(v[0],v[1]))!=m_tri_int_set.end();
break;
56 case 1: res=m_edge_int_set.find(make_pair(v[0],v[1]))!=m_edge_int_set.end();
break;
57 case 2: res=m_corner_int_set.find(make_pair(v[0],v[1]))!=m_corner_int_set.end();
break;
58 default:
console.
Error() <<
"wrong value in argument of TriMesh_PIS::isIn !!\n";
break;
68 template<
class ParticleType,
class IType>
71 console.
XDebug() <<
"TriMesh_PIS_NE calculating " << m_triangle_interactions.size() <<
" triangle forces , "
72 << m_edge_interactions.size() <<
"edge forces and "
73 << m_corner_interactions.size() <<
"corner forces\n";
76 for(
typename std::vector<typename IType::TriIntType>::iterator tri_iter=m_triangle_interactions.begin();
77 tri_iter!=m_triangle_interactions.end();
79 tri_iter->calcForces();
82 for(
typename std::vector<typename IType::EdgeIntType>::iterator edge_iter=m_edge_interactions.begin();
83 edge_iter!=m_edge_interactions.end();
85 edge_iter->calcForces();
88 for(
typename std::vector<typename IType::CornerIntType>::iterator corner_iter=m_corner_interactions.begin();
89 corner_iter!=m_corner_interactions.end();
91 corner_iter->calcForces();
98 template<
class ParticleType,
class IType>
106 if(this->m_update_timestamp != this->m_ppa->getTimeStamp()){
109 m_triangle_interactions.clear();
110 m_edge_interactions.clear();
111 m_corner_interactions.clear();
112 m_tri_int_set.clear();
113 m_edge_int_set.clear();
114 m_corner_int_set.clear();
119 tri_iter != this->m_mesh->triangles_end();
130 bool iflag = this->m_ppa->isInInner((*p_iter)->getPos());
131 m_triangle_interactions.push_back(
typename IType::TriIntType(*p_iter,&(*tri_iter),m_param,iflag));
132 m_tri_int_set.insert(make_pair(tri_iter->getID(),(*p_iter)->getID()));
139 ed_iter != this->m_mesh->edges_end();
149 bool iflag = this->m_ppa->isInInner((*p_iter)->getPos());
150 m_edge_interactions.push_back(
typename IType::EdgeIntType(*p_iter,&(*ed_iter),m_param,iflag));
157 co_iter != this->m_mesh->corners_end();
167 bool iflag = this->m_ppa->isInInner((*p_iter)->getPos());
168 m_corner_interactions.push_back(
typename IType::CornerIntType(*p_iter,&(*co_iter),m_param,iflag));
173 this->m_update_timestamp = this->m_ppa->getTimeStamp();