ESyS-Particle  2.3.4
mesh2d_pis_ne.hpp
Go to the documentation of this file.
1 // //
3 // Copyright (c) 2003-2017 by The University of Queensland //
4 // Centre for Geoscience Computing //
5 // http://earth.uq.edu.au/centre-geoscience-computing //
6 // //
7 // Primary Business: Brisbane, Queensland, Australia //
8 // Licensed under the Open Software License version 3.0 //
9 // http://www.apache.org/licenses/LICENSE-2.0 //
10 // //
12 #include "Foundation/console.h"
13 
21 template<class ParticleType,class IType>
23  :Mesh2D_PIS<ParticleType>(mesh_p,ppa_p)
24 {
25  m_param=param;
26  this->m_update_timestamp=0;
27 }
28 
32 template<class ParticleType,class IType>
34 {}
35 
45 template <class ParticleType,class IType>
46 bool Mesh2D_PIS_NE<ParticleType,IType>::isIn(const std::vector<int>& v)
47 {
48  bool res=false;
49 
50  if(v.size()<3){
51  res=false;
52  } else {
53  switch (v[2]){
54  case 0: res=m_edge_int_set.find(make_pair(v[0],v[1]))!=m_edge_int_set.end(); break;
55  case 1: res=m_corner_int_set.find(make_pair(v[0],v[1]))!=m_corner_int_set.end(); break;
56  default: console.Error() << "wrong value in argument of Mesh2D_PIS::isIn !!\n"; break;
57  }
58  }
59 
60  return res;
61 }
62 
66 template<class ParticleType,class IType>
68 {
69  console.XDebug() << "Mesh2D_PIS_NE calculating " << m_edge_interactions.size() << " line forces , "
70  << m_corner_interactions.size() << "corner forces\n";
71 
72  // calculate forces for edge interactions
73  for(typename std::vector<typename IType::EdgeIntType>::iterator tri_iter=m_edge_interactions.begin();
74  tri_iter!=m_edge_interactions.end();
75  tri_iter++){
76  tri_iter->calcForces();
77  }
78  // calculate forces for corner interactions
79  for(typename std::vector<typename IType::CornerIntType>::iterator corner_iter=m_corner_interactions.begin();
80  corner_iter!=m_corner_interactions.end();
81  corner_iter++){
82  corner_iter->calcForces();
83  }
84 }
85 
89 template<class ParticleType,class IType>
91 {
92  console.XDebug() << "Mesh2D_PIS_NE::update\n";
93  bool res=false;
94  //int count_edge=0;
95  //int count_tri=0;
96 
97  if(this->m_update_timestamp != this->m_ppa->getTimeStamp()){// m_ppa rebuild since last update
98  console.XDebug() << "Mesh2D_PIS_NE doing update\n";
99  // clean out old interactions
100  m_edge_interactions.clear();
101  m_corner_interactions.clear();
102  m_edge_int_set.clear();
103  m_corner_int_set.clear();
104  // -- get edge interactions
105  // for all edges
106  for(
107  Mesh2D::edge_iterator ed_iter = this->m_mesh->edges_begin();
108  ed_iter != this->m_mesh->edges_end();
109  ed_iter++
110  ){
112  ((ParallelParticleArray<ParticleType>*)(this->m_ppa))->getParticlesNearEdge(&(*ed_iter));
113  for (
115  p_iter!=plh->end();
116  p_iter++
117  ){
118  bool iflag = this->m_ppa->isInInner((*p_iter)->getPos());
119  m_edge_interactions.push_back(typename IType::EdgeIntType(*p_iter,&(*ed_iter),m_param,iflag));
120  //m_particle_id_set.insert((*p_iter)->getID());
121  }
122  }
123  // --- get corner interactions
124  for (
125  Mesh2D::corner_iterator co_iter = this->m_mesh->corners_begin();
126  co_iter != this->m_mesh->corners_end();
127  co_iter++
128  ){
130  ((ParallelParticleArray<ParticleType>*)(this->m_ppa))->getParticlesNearPoint(co_iter->getPos());
131  for (
133  p_iter!=plh->end();
134  p_iter++
135  ){
136  bool iflag = this->m_ppa->isInInner((*p_iter)->getPos());
137  m_corner_interactions.push_back(typename IType::CornerIntType(*p_iter,&(*co_iter),m_param,iflag));
138  //m_particle_id_set.insert((*p_iter)->getID());
139  }
140  }
141  // set timestamp
142  this->m_update_timestamp = this->m_ppa->getTimeStamp();
143  }
144  console.XDebug() << "end ElasticMesh2DIG<T>::Update\n";
145 
146  return res;
147 }
148 
Mesh2D_PIS_NE::isIn
virtual bool isIn(const vector< int > &)
Definition: mesh2d_pis_ne.hpp:46
Mesh2D::corner_iterator
vector< Corner2D >::iterator corner_iterator
Definition: Mesh2D.h:58
Console::Error
Console & Error()
set verbose level of next message to "err"
console.h
Mesh2D
Definition: Mesh2D.h:47
Mesh2D_PIS_NE::update
virtual bool update()
Definition: mesh2d_pis_ne.hpp:90
Mesh2D_PIS_NE::calcForces
virtual void calcForces()
Definition: mesh2d_pis_ne.hpp:67
ParallelParticleArray::ParticleListIterator
NeighborTable< T >::particlelist::iterator ParticleListIterator
Definition: pp_array.h:80
ParallelParticleArray
parrallel particle storage array with neighborsearch and variable exchange
Definition: pp_array.h:75
Console::XDebug
Console & XDebug()
set verbose level of next message to "xdg"
T_Handle
Template class for a handle/ref. counted pointer.
Definition: handle.h:27
Mesh2D_PIS_NE::m_param
IType::ParameterType m_param
Definition: mesh2d_pis_ne.h:32
Mesh2D_PIS_NE::Mesh2D_PIS_NE
Mesh2D_PIS_NE(Mesh2D *, ParallelParticleArray< ParticleType > *, typename IType::ParameterType)
Definition: mesh2d_pis_ne.hpp:22
Mesh2D_PIS_NE::~Mesh2D_PIS_NE
~Mesh2D_PIS_NE()
Definition: mesh2d_pis_ne.hpp:33
Mesh2D::edge_iterator
vector< Edge2D >::iterator edge_iterator
Definition: Mesh2D.h:57
Mesh2D_PIS::m_update_timestamp
int m_update_timestamp
Definition: mesh2d_pis.h:39
console
Console console
Definition: console.cpp:25
Mesh2D_PIS
Abstract base class for parallel storage of interactions between a 2D mesh and particles.
Definition: mesh2d_pis.h:37