1
/////////////////////////////////////////////////////////////
3
// Copyright (c) 2007-2011 by The University of Queensland //
4
// Earth Systems Science Computational Centre (ESSCC) //
5
// http://www.uq.edu.au/esscc //
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 //
11
/////////////////////////////////////////////////////////////
16
// --- STL includes ---
17
#include <boost/python.hpp>
30
// --- IO includes ---
35
// --- Project includes ---
37
#include "AVolume3D.h"
43
#include "TriPatchSet.h"
45
// --- STL includes ---
57
\brief Multi-group Neighbour table
59
Neighbour table supporting multiple tagged groups of particles
64
typedef pair<int,int> bond;
68
map<int,set<bond> > m_bonds;
69
Vector3 m_origin; //!< origin
70
Vector3 m_min_pt, m_max_pt; // original min/max point
71
double m_celldim; //!< cell size
72
int m_nx,m_ny,m_nz; //!< number of cells in x-, y- and z-direction
73
unsigned int m_ngroups;
74
static int s_output_style;
75
static double s_small_value;
76
int m_x_periodic,m_y_periodic,m_z_periodic;
78
virtual int getIndex(const Vector3&) const;
79
inline int idx(int i,int j, int k) const{return i*m_ny*m_nz+j*m_nz+k;};
80
void WriteAsVtkXml(ostream&) const;
81
virtual void set_x_circ();
82
virtual void set_y_circ();
83
virtual void set_z_circ();
87
MNTable3D(const Vector3&,const Vector3&,double,unsigned int);
90
bool insertFromRawFile(const string&,double,double);
91
virtual bool insert(const Sphere&,unsigned int);
92
virtual bool insertChecked(const Sphere&,unsigned int,double=s_small_value);
93
virtual bool checkInsertable(const Sphere&,unsigned int);
94
void GrowNGroups(unsigned int);
95
const multimap<double,const Sphere*> getSpheresClosestTo(const Vector3&,unsigned int) const;
96
const multimap<double,const Sphere*> getSpheresFromGroupNear(const Vector3&,double,int) const;
97
const vector<const Sphere*> getAllSpheresFromGroup(int) const;
98
const Sphere* getClosestSphereFromGroup(const Sphere&,int) const;
99
int getTagOfClosestSphereFromGroup(const Sphere&,int) const;
100
const Sphere* getClosestSphereFromGroup(const Sphere&,int,double,double,double) const;
101
int getTagOfClosestSphereFromGroup(const Sphere&,int,double,double,double) const;
102
void tagParticlesAlongPlane(const Plane&,double,int,unsigned int);
103
void tagParticlesAlongPlaneWithMask(const Plane&,double,int,int,unsigned int);
104
void tagParticlesInSphere(const Sphere&,int,unsigned int);
105
void tagParticlesInGroupNT(int tag,int gid){tagParticlesInGroup(tag,gid,-1);};
106
void tagParticlesInGroup(int,int,int);
107
void tagParticlesToClosest(int,int);
108
void tagParticlesToClosestAnisotropic(int,int,double,double,double);
109
void removeParticlesWithTag(int,unsigned int);
110
void removeParticlesWithTagMask(unsigned int,int,int);
111
void removeParticlesInVolume(AVolume3D*, int, bool);
112
void tagParticlesAlongJoints(const TriPatchSet&,double,int, int, unsigned int);
113
void tagParticlesInVolume(const AVolume&,int,unsigned int);
114
void renumberParticlesContinuous();
116
boost::python::list getSphereListFromGroup(int) const;
117
boost::python::list getSphereListDist(const Vector3&, double, int) const;
118
virtual void generateBonds(int,double,int);
119
virtual void generateClusterBonds(int,double,int,int);
120
virtual void generateBondsWithJointSet(const TriPatchSet&,int,double,int);
121
virtual void generateBondsTagged(int,double,int,int,int);
122
virtual void generateRandomBonds(int,double,double,int,int,int);
124
void insertBond(int,int,int);
129
double getSumVolume(int);
130
friend ostream& operator << (ostream&,const MNTable3D&);
131
static void SetOutputStyle(int);
132
void write(char *filename, int outputStyle);
134
#endif // __MNTABLE_H