ESyS-Particle
4.0.1
|
00001 00002 // // 00003 // Copyright (c) 2003-2011 by The University of Queensland // 00004 // Earth Systems Science Computational Centre (ESSCC) // 00005 // http://www.uq.edu.au/esscc // 00006 // // 00007 // Primary Business: Brisbane, Queensland, Australia // 00008 // Licensed under the Open Software License version 3.0 // 00009 // http://www.opensource.org/licenses/osl-3.0.php // 00010 // // 00012 00013 #ifndef __ASUBLATTICE_H 00014 #define __ASUBLATTICE_H 00015 00016 // -- project includes -- 00017 #include "Model/EWallInteractionGroup.h" 00018 #include "Model/BWallInteractionGroup.h" 00019 #include "Model/SoftBWallInteractionGroup.h" 00020 #include "Model/ViscWallIG.h" 00021 #include "Parallel/CheckPointable.h" 00022 #include "Foundation/vec3.h" 00023 00024 // -- system includes -- 00025 #include <string> 00026 #include <utility> 00027 00028 using std::string; 00029 00030 class MpiWTimers; 00031 class TML_Comm; 00032 00036 class ASubLattice : public esys::lsm::CheckPointable 00037 { 00038 private: 00039 std::string m_particleType; 00040 00041 protected: 00042 00043 // -- neighbortable -- 00044 00045 public: 00046 typedef std::pair<int,int> ParticleIdPair; 00047 typedef std::vector<ParticleIdPair> ParticleIdPairVector; 00048 typedef std::vector<int> IdVector; 00049 00050 virtual ~ASubLattice(); 00051 void setNTSize(int); 00052 virtual void setParticleType(const std::string &particleType) 00053 { 00054 m_particleType = particleType; 00055 } 00056 virtual const std::string &getParticleType() const 00057 { 00058 return m_particleType; 00059 } 00060 virtual void setTimeStepSize(double dt) = 0; 00061 virtual vector<int> getCommCoords() const=0; 00062 virtual vector<int> getCommDims() const=0; 00063 virtual void receiveParticles()=0; 00064 virtual void receiveConnections()=0; 00065 virtual void addWall()=0; 00066 virtual void addElasticWIG()=0; 00067 virtual void addBondedWIG()=0; 00068 virtual void addDirBondedWIG()=0; 00069 virtual void addViscWIG()=0; 00070 virtual void initNeighborTable(const Vec3&,const Vec3&)=0; 00071 virtual void initNeighborTable(const Vec3&,const Vec3&,const vector<bool>&)=0; 00072 virtual void addPairIG()=0; 00073 virtual void addTaggedPairIG()=0; 00074 virtual void addTriMesh()=0; 00075 virtual void addTriMeshIG()=0; 00076 virtual void addBondedTriMeshIG()=0; 00077 virtual void addMesh2D()=0; 00078 virtual void addMesh2DIG()=0; 00079 virtual void addBondedMesh2DIG()=0; 00080 virtual void addSingleIG()=0; 00081 virtual void addBondedIG()=0; 00082 virtual void addCappedBondedIG()=0; 00083 virtual void addShortBondedIG()=0; 00084 virtual void addRotBondedIG()=0; 00085 virtual void addRotThermBondedIG()=0; 00086 virtual void addDamping()=0; 00087 //virtual void addRotDamping()=0; 00088 virtual void setExIG()=0; 00089 virtual void initComplex(); 00090 virtual void removeIG()=0; 00091 virtual void getWallPos()=0; 00092 virtual void getWallForce()=0; 00093 00094 virtual const MPI_Comm &getWorkerComm() const = 0; 00095 00096 virtual void rebuildParticleArray()=0; 00097 virtual void rebuildInteractions()=0; 00098 virtual void searchNeighbors()=0; 00099 virtual void checkNeighbors()=0; 00100 00101 virtual void updateInteractions()=0; 00102 00103 virtual int getNumParticles() = 0; 00104 00105 virtual std::pair<double, int> findParticleNearestTo(const Vec3 &pt) = 0; 00106 00107 virtual std::pair<int, Vec3> getParticlePosn(int particleId) = 0; 00108 00109 // virtual ParticleIdPairVector getBondGroupIdPairs(const std::string &groupName) = 0; 00110 00111 virtual void oneStep()=0; 00112 virtual void exchangePos()=0; 00113 00114 // moving stuff around 00115 virtual void moveParticleTo()=0; 00116 virtual void moveTaggedParticlesBy() = 0; 00117 virtual void moveSingleParticleTo(int particleId, const Vec3 &posn)=0; 00118 virtual void moveWallBy()=0; 00119 virtual void setWallNormal()=0; 00120 virtual void applyForceToWall()=0; 00121 virtual void setVelocityOfWall()=0; 00122 virtual void setParticleVelocity()=0; 00123 virtual void setParticleDensity()=0; 00124 virtual void setTaggedParticleVel()=0; 00125 virtual void setParticleAngularVelocity(){}; 00126 virtual void setParticleNonDynamic()=0; 00127 virtual void setParticleNonRot()=0; 00128 virtual void tagParticleNearestTo()=0; 00129 virtual void moveSingleNode()=0; 00130 virtual void moveTaggedNodes()=0; 00131 virtual void translateMeshBy(const std::string &meshName, const Vec3 &translation)=0; 00132 00133 virtual void setTimer(MpiWTimers &timers) = 0; 00134 00135 virtual void do2dCalculations(bool do2d) = 0; 00136 00137 // field functions 00138 virtual void countParticles()=0; 00139 00140 // "new" field functions 00141 virtual void addScalarParticleField()=0; 00142 virtual void addVectorParticleField()=0; 00143 virtual void addScalarInteractionField()=0; 00144 virtual void addVectorInteractionField()=0; 00145 virtual void addVectorTriangleField()=0; 00146 virtual void addScalarTriangleField()=0; 00147 virtual void sendFieldData()=0; 00148 virtual void addVectorWallField()=0; 00149 00150 // output 00151 virtual void printStruct()=0; 00152 virtual void printData()=0; 00153 virtual void printTimes()=0; 00154 00155 // -- mesh data exchange -- 00156 virtual void getMeshNodeRef()=0; 00157 virtual void getMeshFaceRef()=0; 00158 virtual void getMesh2DStress()=0; 00159 virtual void getTriMeshForce()=0; 00160 virtual void getParticleData(const IdVector &particleIdVector)=0; 00161 00162 // checkpointing 00163 virtual void loadCheckPointData(std::istream&){}; 00164 }; 00165 00166 #endif //__ASUBLATTICE_H