~ubuntu-branches/ubuntu/saucy/python-demgengeo/saucy

« back to all changes in this revision

Viewing changes to src/MNTable3D.h

  • Committer: Package Import Robot
  • Author(s): Anton Gladky
  • Date: 2011-11-18 21:47:18 UTC
  • Revision ID: package-import@ubuntu.com-20111118214718-4ysqm3dhpqwdd7gd
Tags: upstream-0.99~bzr106
ImportĀ upstreamĀ versionĀ 0.99~bzr106

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/////////////////////////////////////////////////////////////
 
2
//                                                         //
 
3
// Copyright (c) 2007-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
//                                                         //
 
11
/////////////////////////////////////////////////////////////
 
12
 
 
13
#ifndef __MNTABLE3D_H
 
14
#define __MNTABLE3D_H
 
15
 
 
16
// --- STL includes ---
 
17
#include <boost/python.hpp>
 
18
#include <vector>
 
19
#include <map>
 
20
#include <string>
 
21
#include <set>
 
22
 
 
23
using std::vector;
 
24
using std::map;
 
25
using std::multimap;
 
26
using std::string;
 
27
using std::set;
 
28
 
 
29
 
 
30
// --- IO includes ---
 
31
#include <iostream>
 
32
 
 
33
using std::ostream;
 
34
 
 
35
// --- Project includes ---
 
36
#include "MNTCell.h"
 
37
#include "AVolume3D.h"
 
38
#include "AVolume.h"
 
39
#include "Sphere.h"
 
40
#include "vector3.h"
 
41
#include "Plane.h"
 
42
#include "JointSet.h"
 
43
#include "TriPatchSet.h"
 
44
 
 
45
// --- STL includes ---
 
46
#include <vector>
 
47
#include <map>
 
48
#include <utility>
 
49
 
 
50
using std::vector;
 
51
using std::map;
 
52
using std::pair;
 
53
 
 
54
 
 
55
/*!
 
56
  \class MNTable3D
 
57
  \brief Multi-group Neighbour table
 
58
 
 
59
  Neighbour table supporting multiple tagged groups of particles
 
60
*/
 
61
class MNTable3D
 
62
{
 
63
 public: // types
 
64
  typedef pair<int,int> bond;
 
65
 
 
66
 protected:
 
67
  MNTCell* m_data;
 
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;
 
77
 
 
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();
 
84
 
 
85
 public:
 
86
  MNTable3D();
 
87
  MNTable3D(const Vector3&,const Vector3&,double,unsigned int);
 
88
  virtual ~MNTable3D();
 
89
 
 
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();
 
115
 
 
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);
 
123
 
 
124
  void insertBond(int,int,int);
 
125
 
 
126
  
 
127
 
 
128
  // output 
 
129
  double getSumVolume(int);
 
130
  friend ostream& operator << (ostream&,const MNTable3D&);
 
131
  static void SetOutputStyle(int);
 
132
  void write(char *filename, int outputStyle);
 
133
};
 
134
#endif // __MNTABLE_H