13 #include "Foundation/console.h"
22 template<
class ParticleType,
class IType>
27 this->m_update_timestamp=0;
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>
101 console.
XDebug() <<
"TriMesh_PIS_NE::update\n";
106 if(this->m_update_timestamp != this->m_ppa->getTimeStamp()){
107 console.
XDebug() <<
"TriMesh_PIS_NE doing update\n";
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();
118 TriMesh::triangle_iterator tri_iter = this->m_mesh->triangles_begin();
119 tri_iter != this->m_mesh->triangles_end();
122 typename ParallelParticleArray<ParticleType>::ParticleListHandle plh=
126 typename ParallelParticleArray<ParticleType>::ParticleListIterator p_iter=plh->begin();
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()));
138 TriMesh::edge_iterator ed_iter = this->m_mesh->edges_begin();
139 ed_iter != this->m_mesh->edges_end();
142 typename ParallelParticleArray<ParticleType>::ParticleListHandle plh =
145 typename ParallelParticleArray<ParticleType>::ParticleListIterator p_iter=plh->begin();
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));
156 TriMesh::corner_iterator co_iter = this->m_mesh->corners_begin();
157 co_iter != this->m_mesh->corners_end();
160 typename ParallelParticleArray<ParticleType>::ParticleListHandle plh=
163 typename ParallelParticleArray<ParticleType>::ParticleListIterator p_iter=plh->begin();
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();
175 console.
XDebug() <<
"end ElasticTriMeshIG<T>::Update\n";