ESyS-Particle  2.3
graph.h
Go to the documentation of this file.
1 // //
3 // Copyright (c) 2003-2014 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.opensource.org/licenses/osl-3.0.php //
10 // //
12 
13 #ifndef __GRAPH_H
14 #define __GRAPH_H
15 
16 // --- project includes ---
17 #include "Foundation/vec3.h"
18 
19 // --- STL includes ---
20 #include <list>
21 #include <vector>
22 #include <utility>
23 #include <map>
24 #include <iostream>
25 #include <string>
26 
27 using std::list;
28 using std::vector;
29 using std::pair;
30 using std::map;
31 using std::ostream;
32 using std::endl;
33 using std::string;
34 
35 struct pdata{
36  int tag;
37  double mass;
39  double rad;
42 
43  pdata(int t=-1,
44  double m=0.0,
45  Vec3 p=Vec3(0.0,0.0,0.0),
46  double r=0.0,
47  Vec3 v=Vec3(0.0,0.0,0.0),
48  Vec3 av=Vec3(0.0,0.0,0.0))
49  :tag(t),mass(m),pos(p),rad(r),vel(v),angvel(av){};
50 };
51 
52 struct pdata2d{
53  int gid; // grain id
54  Vec3 pos2d; // projected position
55  double rad; // radius
56 };
57 
63 class Graph
64 {
65  public: // types
66  struct Edge{
67  int i,j;
68  Edge(int v=-1,int w=-1):i(v),j(w){}
69  };
70 
71  struct Node{
72  int id;
73  Node(int i=-1):id(i){};
74  };
75  typedef list<int>::iterator adjIterator;
76 
77  private:
78  map<int,list<int> > m_data;
79  map<int,int> cid; // component id for conn. component
80  map<int,pdata> m_vertex_data;
81  map<int,double> m_grain_mass;
82  map<int,Vec3> m_grain_rot;
83  int ccnt;
84 
85  void ccR(int);
86  void dfsIter(int);
87 
88  public: // methods
89  Graph();
90  ~Graph();
91  int numV() const;
92  int numE() const;
93  int getGrainID(int) const;
94  double getParticleMass(int) const;
95  void insert(const Edge&);
96  void insert(const pair<int,int>&);
97  void setVertexData(int,const pdata&);
98  pdata getVertexData(int i) const;
99  void remove(const Edge&);
100  bool isEdge(int,int);
101  void removeDoubles();
102  adjIterator IterBegin(int);
103  adjIterator IterEnd(int);
104  map<int,int>::const_iterator cid_begin() const {return cid.begin();};
105  map<int,int>::const_iterator cid_end() const {return cid.end();};
106  void makeConnComp();
107  void printGrainPCount(ostream&);
108  void printGrainMass(ostream&);
109  void printIdList(const string&);
110  void printRotList(const string&);
111  void printGrainCountDist(const string&);
112  void printGrainDiamDist(const string&,double,int);
113  void printGrainMassDist(const string&,double,int);
114  void printSieveDist(const string&,double);
115  double getPercentile(double);
116  void writeAvgGrainSizeProfile(const string&,double,double,int) ;
117  void writeAvgGrainSizeGrid(const string&,double,double,double,double,double,double,double) ;
118  void writeMatrixFractionProfile(const string&,double,double,int,double) ;
119  void writeMatrixFractionGrid(const string&,double,double,double,double,double,double,double,double) ;
120  void printGrainsAsVtk(const string&,double);
121  void printAllAsVtk(const string&);
122  void printCrossSection(const Vec3&,const Vec3&,const Vec3&,const string&,int,int,double,double,double,double,bool,bool);
123  void printGrainCenterPosition(const string&);
124 };
125 
126 #endif //__GRAPH_H
pdata getVertexData(int i) const
Definition: graph.cpp:217
int gid
Definition: graph.h:53
Definition: graph.h:71
map< int, double > m_grain_mass
Definition: graph.h:81
void printGrainMassDist(const string &, double, int)
Definition: graph.cpp:418
int i
Definition: graph.h:67
Vec3 angvel
Definition: graph.h:41
Definition: vec3.h:46
int numV() const
Definition: graph.cpp:44
void printCrossSection(const Vec3 &, const Vec3 &, const Vec3 &, const string &, int, int, double, double, double, double, bool, bool)
Definition: graph.cpp:1101
Definition: graph.h:52
Graph class, partially based on Sedgewick, "Alg. in C++", progs. 17.1, 17.9 and 17.10.
Definition: graph.h:63
void printGrainDiamDist(const string &, double, int)
Definition: graph.cpp:453
adjIterator IterEnd(int)
Definition: graph.cpp:144
void writeAvgGrainSizeProfile(const string &, double, double, int)
Definition: graph.cpp:568
Definition: graph.h:35
void printGrainsAsVtk(const string &, double)
Definition: graph.cpp:916
map< int, Vec3 > m_grain_rot
Definition: graph.h:82
void writeMatrixFractionProfile(const string &, double, double, int, double)
Definition: graph.cpp:766
void setVertexData(int, const pdata &)
Definition: graph.cpp:209
void dfsIter(int)
Definition: graph.cpp:183
void makeConnComp()
Definition: graph.cpp:149
int id
Definition: graph.h:72
void removeDoubles()
Definition: graph.cpp:91
Vec3 vel
Definition: graph.h:40
void printRotList(const string &)
Definition: graph.cpp:289
void printGrainCenterPosition(const string &)
Definition: graph.cpp:1272
int j
Definition: graph.h:67
double rad
Definition: graph.h:55
map< int, int >::const_iterator cid_begin() const
Definition: graph.h:104
double rad
Definition: graph.h:39
Edge(int v=-1, int w=-1)
Definition: graph.h:68
map< int, pdata > m_vertex_data
Definition: graph.h:80
int numE() const
Definition: graph.cpp:52
Vec3 pos2d
Definition: graph.h:54
void printAllAsVtk(const string &)
Definition: graph.cpp:1005
int tag
Definition: graph.h:36
Node(int i=-1)
Definition: graph.h:73
Graph()
Definition: graph.cpp:35
void ccR(int)
Definition: graph.cpp:164
list< int >::iterator adjIterator
Definition: graph.h:75
pdata(int t=-1, double m=0.0, Vec3 p=Vec3(0.0, 0.0, 0.0), double r=0.0, Vec3 v=Vec3(0.0, 0.0, 0.0), Vec3 av=Vec3(0.0, 0.0, 0.0))
Definition: graph.h:43
void printGrainPCount(ostream &)
Definition: graph.cpp:229
void printGrainCountDist(const string &)
Definition: graph.cpp:386
void printSieveDist(const string &, double)
Definition: graph.cpp:492
double mass
Definition: graph.h:37
void insert(const Edge &)
Definition: graph.cpp:68
bool isEdge(int, int)
Definition: graph.cpp:105
void printGrainMass(ostream &)
Definition: graph.cpp:244
int ccnt
Definition: graph.h:83
Vec3 pos
Definition: graph.h:38
map< int, int > cid
Definition: graph.h:79
Definition: graph.h:66
void writeAvgGrainSizeGrid(const string &, double, double, double, double, double, double, double)
Definition: graph.cpp:676
map< int, int >::const_iterator cid_end() const
Definition: graph.h:105
void printIdList(const string &)
Definition: graph.cpp:260
double getParticleMass(int) const
Definition: graph.cpp:125
~Graph()
Definition: graph.cpp:38
adjIterator IterBegin(int)
Definition: graph.cpp:139
double getPercentile(double)
Definition: graph.cpp:529
map< int, list< int > > m_data
Definition: graph.h:78
int getGrainID(int) const
Definition: graph.cpp:111
void writeMatrixFractionGrid(const string &, double, double, double, double, double, double, double, double)
Definition: graph.cpp:830