ESyS-Particle  4.0.1
ViscWallIG.h
1 
2 // //
3 // Copyright (c) 2003-2011 by The University of Queensland //
4 // Earth Systems Science Computational Centre (ESSCC) //
5 // http://www.uq.edu.au/esscc //
6 // //
7 // Primary Business: Brisbane, Queensland, Australia //
8 // Licensed under the Open Software License version 3.0 //
9 // http://www.opensource.org/licenses/osl-3.0.php //
10 // //
12 
13 #ifndef __VISCWALLIG_H
14 #define __VISCWALLIG_H
15 
16 //--- project includes ---
17 #include "Model/ViscWallInteraction.h"
18 #include "Model/EWallInteraction.h"
19 #include "Model/WallIG.h"
20 #include "Model/EWallInteractionGroup.h"
21 
22 //--- STL includes ---
23 #include <map>
24 
25 using std::map;
26 
27 template <class T> class ParallelParticleArray;
28 
32 class CVWallIGP : public CEWallIGP
33 {
34  protected:
35  int m_tag;
36  double m_nu;
37 
38  public:
39  CVWallIGP(const string&,const string&,double,double,int);
40  virtual void packInto(CVarMPIBuffer*) const;
41  void setTag(int tag){m_tag=tag;};
42  int getTag()const{return m_tag;};
43  void setNu(double nu){m_nu=nu;};
44  double getNu()const{return m_nu;};
45 
46  friend ostream& operator<<(ostream&,const CVWallIGP&);
47 };
48 
49 CVWallIGP* extractVWallIGP(AMPIBuffer*);
50 
51 // --- Forward decl ---
52 template <class T> class CViscWallIG;
53 template <class T> ostream& operator<<(ostream &, const CViscWallIG<T> &);
54 
58 template<class T>
60 {
61 protected:
62  vector<CViscWallInteraction<T> > m_visc_interactions;
63  vector<CElasticWallInteraction<T> > m_elastic_interactions;
64  double m_k;
65  double m_nu;
66  int m_tag;
67 
68 public:
71  virtual ~CViscWallIG(){}
72 
76  virtual void setTimeStepSize(double dt)
77  {
78  }
79 
80  virtual void calcForces();
81  virtual void applyForce(const Vec3&);
82  virtual void setVelocity(const Vec3&);
83  virtual void Update(ParallelParticleArray<T>*);
84 
85  friend ostream& operator<< <>(ostream &, const CViscWallIG &);
86 };
87 
88 #include "Model/ViscWallIG.hpp"
89 
90 #endif // __VISCWALLIG_H