ESyS-Particle  2.3.4
ASubLattice.h
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 
13 #ifndef __ASUBLATTICE_H
14 #define __ASUBLATTICE_H
15 
16 // -- project includes --
20 #include "Model/ViscWallIG.h"
22 #include "Foundation/vec3.h"
23 
24 // -- system includes --
25 #include <string>
26 #include <utility>
27 
28 using std::string;
29 
30 class MpiWTimers;
31 class TML_Comm;
32 
37 {
38 private:
39  std::string m_particleType;
40 
41 protected:
42 
43  // -- neighbortable --
44 
45 public:
46  typedef std::pair<int,int> ParticleIdPair;
47  typedef std::vector<ParticleIdPair> ParticleIdPairVector;
48  typedef std::vector<int> IdVector;
49 
50  virtual ~ASubLattice();
51  void setNTSize(int);
52  virtual void setParticleType(const std::string &particleType)
53  {
54  m_particleType = particleType;
55  }
56  virtual const std::string &getParticleType() const
57  {
58  return m_particleType;
59  }
60  virtual void setTimeStepSize(double dt) = 0;
61  virtual vector<int> getCommCoords() const=0;
62  virtual vector<int> getCommDims() const=0;
63  virtual void receiveParticles()=0;
64  virtual void receiveConnections()=0;
65  virtual void addWall()=0;
66  virtual void addElasticWIG()=0;
67  virtual void addBondedWIG()=0;
68  virtual void addDirBondedWIG()=0;
69  virtual void addViscWIG()=0;
70  virtual void addTaggedElasticWIG()=0;
71  virtual void initNeighborTable(const Vec3&,const Vec3&)=0;
72  virtual void initNeighborTable(const Vec3&,const Vec3&,const vector<bool>&)=0;
73  virtual void addPairIG()=0;
74  virtual void addTaggedPairIG()=0;
75  virtual void addTriMesh()=0;
76  virtual void addTriMeshIG()=0;
77  virtual void addBondedTriMeshIG()=0;
78  virtual void addMesh2D()=0;
79  virtual void addMesh2DIG()=0;
80  virtual void addBondedMesh2DIG()=0;
81  virtual void addSingleIG()=0;
82  virtual void addBondedIG()=0;
83  virtual void addCappedBondedIG()=0;
84  virtual void addShortBondedIG()=0;
85  virtual void addRotBondedIG()=0;
86  virtual void addRotThermBondedIG()=0;
87  virtual void addDamping()=0;
88  //virtual void addRotDamping()=0;
89  virtual void setExIG()=0;
90  virtual void initComplex();
91  virtual void removeIG()=0;
92  virtual void getWallPos()=0;
93  virtual void getWallForce()=0;
94  virtual void addSphereBody()=0;
95  virtual void addESphereBodyIG()=0;
96  virtual void getSphereBodyPos()=0;
97  virtual void getSphereBodyForce()=0;
98 
99  virtual const MPI_Comm &getWorkerComm() const = 0;
100 
101  virtual void rebuildParticleArray()=0;
102  virtual void rebuildInteractions()=0;
103  virtual void searchNeighbors()=0;
104  virtual void checkNeighbors()=0;
105 
106  virtual void updateInteractions()=0;
107 
108  virtual int getNumParticles() = 0;
109 
110  virtual std::pair<double, int> findParticleNearestTo(const Vec3 &pt) = 0;
111 
112  virtual std::pair<int, Vec3> getParticlePosn(int particleId) = 0;
113 
114 // virtual ParticleIdPairVector getBondGroupIdPairs(const std::string &groupName) = 0;
115 
116  virtual void oneStep()=0;
117  virtual void exchangePos()=0;
118 
119  // moving stuff around
120  virtual void moveParticleTo()=0;
121  virtual void moveTaggedParticlesBy() = 0;
122  virtual void moveSingleParticleTo(int particleId, const Vec3 &posn)=0;
123  virtual void moveWallBy()=0;
124  virtual void moveSphereBodyBy()=0;
125  virtual void setWallNormal()=0;
126  virtual void applyForceToWall()=0;
127  virtual void setVelocityOfWall()=0;
128  virtual void setParticleVelocity()=0;
129  virtual void setParticleDensity()=0;
130  virtual void setTaggedParticleVel()=0;
131  virtual void setParticleAngularVelocity(){};
132  virtual void setParticleNonDynamic()=0;
133  virtual void setParticleNonRot()=0;
134  virtual void tagParticleNearestTo()=0;
135  virtual void moveSingleNode()=0;
136  virtual void moveTaggedNodes()=0;
137  virtual void translateMeshBy(const std::string &meshName, const Vec3 &translation)=0;
138 
139  virtual void setTimer(MpiWTimers &timers) = 0;
140 
141  virtual void do2dCalculations(bool do2d) = 0;
142 
143  // field functions
144  virtual void countParticles()=0;
145 
146  // "new" field functions
147  virtual void addScalarParticleField()=0;
148  virtual void addVectorParticleField()=0;
149  virtual void addScalarInteractionField()=0;
151  virtual void addVectorInteractionField()=0;
152  virtual void addVectorTriangleField()=0;
153  virtual void addScalarTriangleField()=0;
154  virtual void sendFieldData()=0;
155  virtual void addVectorWallField()=0;
156 
157  // output
158  virtual void printStruct()=0;
159  virtual void printData()=0;
160  virtual void printTimes()=0;
161 
162  // -- mesh data exchange --
163  virtual void getMeshNodeRef()=0;
164  virtual void getMeshFaceRef()=0;
165  virtual void getMesh2DStress()=0;
166  virtual void getTriMeshForce()=0;
167  virtual void getParticleData(const IdVector &particleIdVector)=0;
168 
169  // checkpointing
170  virtual void loadCheckPointData(std::istream&){};
171 };
172 
173 #endif //__ASUBLATTICE_H
ASubLattice::addScalarInteractionField
virtual void addScalarInteractionField()=0
ASubLattice::rebuildInteractions
virtual void rebuildInteractions()=0
ASubLattice::addVectorTriangleField
virtual void addVectorTriangleField()=0
ASubLattice::ParticleIdPair
std::pair< int, int > ParticleIdPair
Definition: ASubLattice.h:46
NTSlab::rbegin
iterator rbegin()
Definition: nt_slab.hpp:90
BWallInteractionGroup.h
NTBlock
representation of a slab of the search array of a NeigborTable
Definition: nt_block.h:33
ASubLattice::addElasticWIG
virtual void addElasticWIG()=0
ASubLattice::addMesh2DIG
virtual void addMesh2DIG()=0
ASubLattice::setParticleNonRot
virtual void setParticleNonRot()=0
ASubLattice::receiveConnections
virtual void receiveConnections()=0
ASubLattice::setExIG
virtual void setExIG()=0
ASubLattice::addPairIG
virtual void addPairIG()=0
NeighborTable::getFullList
T_Handle< pairlist > getFullList()
Definition: ntable.hpp:512
CVarMPIBuffer
MPI send/recv buffer with automagically adjusted size.
Definition: mpivbuf.h:35
ASubLattice::addShortBondedIG
virtual void addShortBondedIG()=0
ASubLattice::addScalarHistoryInteractionField
virtual void addScalarHistoryInteractionField()=0
ASubLattice::getSphereBodyPos
virtual void getSphereBodyPos()=0
ASubLattice::getTriMeshForce
virtual void getTriMeshForce()=0
ASubLattice::addTaggedElasticWIG
virtual void addTaggedElasticWIG()=0
SoftBWallInteractionGroup.h
ntable.h
NTSlab::insert
void insert(iterator, const T &)
Definition: nt_slab.hpp:163
ASubLattice::addTriMeshIG
virtual void addTriMeshIG()=0
ASubLattice::getNumParticles
virtual int getNumParticles()=0
mpibarrier.h
ASubLattice::printStruct
virtual void printStruct()=0
ASubLattice::getParticlePosn
virtual std::pair< int, Vec3 > getParticlePosn(int particleId)=0
ASubLattice::getParticleData
virtual void getParticleData(const IdVector &particleIdVector)=0
ASubLattice::checkNeighbors
virtual void checkNeighbors()=0
ASubLattice::moveTaggedNodes
virtual void moveTaggedNodes()=0
ASubLattice::~ASubLattice
virtual ~ASubLattice()
Definition: ASubLattice.cpp:17
NeighborTable::inner
NTBlock< T > inner()
Definition: ntable.hpp:378
ASubLattice::getMeshNodeRef
virtual void getMeshNodeRef()=0
ASubLattice::setNTSize
void setNTSize(int)
Definition: ASubLattice.cpp:25
console.h
ASubLattice::setTimeStepSize
virtual void setTimeStepSize(double dt)=0
ASubLattice::moveSingleNode
virtual void moveSingleNode()=0
ASubLattice::setParticleAngularVelocity
virtual void setParticleAngularVelocity()
Definition: ASubLattice.h:131
EWallInteractionGroup.h
NeighborTable::block
NTBlock< T > block(int, int, int, int, int, int)
Definition: ntable.hpp:337
ASubLattice::do2dCalculations
virtual void do2dCalculations(bool do2d)=0
ASubLattice
Abstract base class for sublattices.
Definition: ASubLattice.h:37
ASubLattice::setParticleVelocity
virtual void setParticleVelocity()=0
CVarMPIBuffer::receiveBroadcast
virtual void receiveBroadcast(int)
Definition: mpivbuf.cpp:262
ASubLattice::exchangePos
virtual void exchangePos()=0
ASubLattice::moveSphereBodyBy
virtual void moveSphereBodyBy()=0
NTSlab::rend
iterator rend()
number of particles at a given gridpoint
Definition: nt_slab.hpp:114
ASubLattice::addTriMesh
virtual void addTriMesh()=0
ASubLattice::setParticleType
virtual void setParticleType(const std::string &particleType)
Definition: ASubLattice.h:52
NeighborTable::xz_slab
NTSlab< T > xz_slab(int)
Definition: ntable.hpp:310
MpiWTimers
Definition: Timer.h:87
ASubLattice::loadCheckPointData
virtual void loadCheckPointData(std::istream &)
Definition: ASubLattice.h:170
ASubLattice::addESphereBodyIG
virtual void addESphereBodyIG()=0
CMPIBarrier
A convenience class encapsulating an MPI barrier. Includes timing of the wait and a debug message ( v...
Definition: mpibarrier.h:31
ASubLattice::translateMeshBy
virtual void translateMeshBy(const std::string &meshName, const Vec3 &translation)=0
ASubLattice::addRotThermBondedIG
virtual void addRotThermBondedIG()=0
ASubLattice::addRotBondedIG
virtual void addRotBondedIG()=0
ASubLattice::getWallForce
virtual void getWallForce()=0
ASubLattice::printData
virtual void printData()=0
ASubLattice::getMeshFaceRef
virtual void getMeshFaceRef()=0
NTSlab
representation of a slab of the search array of a NeigborTable
Definition: nt_slab.h:35
Console::XDebug
Console & XDebug()
set verbose level of next message to "xdg"
ASubLattice::moveParticleTo
virtual void moveParticleTo()=0
NeighborTable::xy_slab
NTSlab< T > xy_slab(int)
partial access functions
Definition: ntable.hpp:299
ASubLattice::initNeighborTable
virtual void initNeighborTable(const Vec3 &, const Vec3 &, const vector< bool > &)=0
NTBlock_iter
iterator for a NTBlock
Definition: ntb_iter.h:39
Console::Critical
Console & Critical()
set verbose level of next message to "crt"
Definition: console.cpp:141
ASubLattice::ParticleIdPairVector
std::vector< ParticleIdPair > ParticleIdPairVector
Definition: ASubLattice.h:47
NTBlock::begin
iterator begin()
Definition: nt_block.hpp:73
ASubLattice::addWall
virtual void addWall()=0
ASubLattice::addMesh2D
virtual void addMesh2D()=0
ASubLattice::sendFieldData
virtual void sendFieldData()=0
ASubLattice::addBondedIG
virtual void addBondedIG()=0
ASubLattice::getCommDims
virtual vector< int > getCommDims() const =0
main
int main(int argc, char **argv)
Definition: test_main2.cpp:31
ASubLattice::applyForceToWall
virtual void applyForceToWall()=0
nt_slab.h
ASubLattice::addBondedWIG
virtual void addBondedWIG()=0
ASubLattice::printTimes
virtual void printTimes()=0
ASubLattice::initNeighborTable
virtual void initNeighborTable(const Vec3 &, const Vec3 &)=0
ASubLattice::updateInteractions
virtual void updateInteractions()=0
ASubLattice::addDamping
virtual void addDamping()=0
NeighborTable::yz_slab
NTSlab< T > yz_slab(int)
Definition: ntable.hpp:321
nt_block.h
T_Handle
Template class for a handle/ref. counted pointer.
Definition: handle.h:27
ASubLattice::initComplex
virtual void initComplex()
Definition: ASubLattice.cpp:33
ASubLattice::receiveParticles
virtual void receiveParticles()=0
NeighborTable::getParticlesAtPlane
T_Handle< particlelist > getParticlesAtPlane(const Vec3 &, const Vec3 &)
Definition: ntable.hpp:596
ASubLattice::addBondedMesh2DIG
virtual void addBondedMesh2DIG()=0
NeighborTable
class for neighbor search
Definition: ntable.h:68
ASubLattice::setParticleDensity
virtual void setParticleDensity()=0
ASubLattice::addSphereBody
virtual void addSphereBody()=0
Vec3
Definition: vec3.h:47
esys::lsm::bpu::iter
boost::python::object iter(const boost::python::object &pyOb)
Definition: Util.h:25
ASubLattice::addBondedTriMeshIG
virtual void addBondedTriMeshIG()=0
ASubLattice::getWorkerComm
virtual const MPI_Comm & getWorkerComm() const =0
ASubLattice::getCommCoords
virtual vector< int > getCommCoords() const =0
TML_Comm
abstract base class for communicator
Definition: comm.h:47
ASubLattice::countParticles
virtual void countParticles()=0
NTSlab::size
unsigned int size() const
Definition: nt_slab.hpp:38
NeighborTable::getAllParticles
T_Handle< particlelist > getAllParticles()
Definition: ntable.hpp:738
NeighborTable::insert
void insert(const T &)
particle insertion
Definition: ntable.hpp:168
vec3.h
NeighborTable::ptr_by_id
T * ptr_by_id(int)
Definition: ntable.hpp:237
ASubLattice::setTaggedParticleVel
virtual void setTaggedParticleVel()=0
ASubLattice::addVectorParticleField
virtual void addVectorParticleField()=0
ASubLattice::getSphereBodyForce
virtual void getSphereBodyForce()=0
ASubLattice.h
ASubLattice::moveSingleParticleTo
virtual void moveSingleParticleTo(int particleId, const Vec3 &posn)=0
ASubLattice::addDirBondedWIG
virtual void addDirBondedWIG()=0
NTSlab_iter
iterator for a NTSlab
Definition: nts_iter.h:39
ASubLattice::tagParticleNearestTo
virtual void tagParticleNearestTo()=0
ViscWallIG.h
ASubLattice::addScalarTriangleField
virtual void addScalarTriangleField()=0
ASubLattice::moveWallBy
virtual void moveWallBy()=0
ASubLattice::getParticleType
virtual const std::string & getParticleType() const
Definition: ASubLattice.h:56
ASubLattice::IdVector
std::vector< int > IdVector
Definition: ASubLattice.h:48
ASubLattice::getMesh2DStress
virtual void getMesh2DStress()=0
NTSlab::begin
iterator begin()
Definition: nt_slab.hpp:54
CheckPointable.h
ASubLattice::addScalarParticleField
virtual void addScalarParticleField()=0
ASubLattice::addVectorInteractionField
virtual void addVectorInteractionField()=0
ASubLattice::setWallNormal
virtual void setWallNormal()=0
ASubLattice::addViscWIG
virtual void addViscWIG()=0
ASubLattice::removeIG
virtual void removeIG()=0
ASubLattice::findParticleNearestTo
virtual std::pair< double, int > findParticleNearestTo(const Vec3 &pt)=0
ASubLattice::setParticleNonDynamic
virtual void setParticleNonDynamic()=0
ASubLattice::getWallPos
virtual void getWallPos()=0
ASubLattice::setVelocityOfWall
virtual void setVelocityOfWall()=0
ASubLattice::addCappedBondedIG
virtual void addCappedBondedIG()=0
ASubLattice::rebuildParticleArray
virtual void rebuildParticleArray()=0
console
Console console
Definition: console.cpp:25
esys::lsm::CheckPointable
Definition: CheckPointable.h:27
CBasicParticle::getPos
Vec3 getPos() const
Definition: BasicParticle.h:62
ASubLattice::addSingleIG
virtual void addSingleIG()=0
ASubLattice::addVectorWallField
virtual void addVectorWallField()=0
NTBlock::end
iterator end()
Definition: nt_block.hpp:107
NeighborTable::getNearestPtr
T * getNearestPtr(const Vec3 &)
Definition: ntable.hpp:261
CBasicParticle
Basic Particle class. Contains only the "geometric part" of the particle, i.e. position and radius,...
Definition: BasicParticle.h:45
ASubLattice::moveTaggedParticlesBy
virtual void moveTaggedParticlesBy()=0
CMPIBarrier::wait
void wait(const char *)
Definition: mpibarrier.cpp:32
ASubLattice::oneStep
virtual void oneStep()=0
NTSlab::end
iterator end()
Definition: nt_slab.hpp:76
ASubLattice::addTaggedPairIG
virtual void addTaggedPairIG()=0
ASubLattice::m_particleType
std::string m_particleType
Definition: ASubLattice.h:39
ASubLattice::setTimer
virtual void setTimer(MpiWTimers &timers)=0
ASubLattice::searchNeighbors
virtual void searchNeighbors()=0