Lagrangian Particle Code for The Simulation of 2D/3D Fluid Dynamics
 All Classes Files Functions Variables Typedefs Friends Pages
hexagonal_packing.h
Go to the documentation of this file.
1 
20 #ifndef __HEXAGONALPACKING_H__
21 #define __HEXAGONALPACKING_H__
22 
23 #include <cstddef>
24 #include <cmath>
25 
26 
42 public:
59  HexagonalPacking2D(double xmin_, double xmax_, double ymin_, double ymax_, double h_r_);
60 
78  void getParameters(size_t& m0_, size_t& m1_,
79  size_t& n0_odd_, size_t& n1_odd_,
80  size_t& n0_even_, size_t& n1_even_) {
81  m0_ = m0;
82  m1_ = m1;
83  n0_odd_ = n0_odd;
84  n1_odd_ = n1_odd;
85  n0_even_ = n0_even;
86  n1_even_ = n1_even;
87  }
88 
96  double computeX(int tag, size_t k) {
97  if(tag==0) return xmin+2.0*h_r+k*2.0*h_r; //odd-numbered rows
98  else return xmin+h_r+k*2.0*h_r; //even-numbered rows
99  }
100 
107  double computeY(size_t j) {
108  return ymin+h_r+j*sqrt(3.0)*h_r;
109  }
110 
111 private:
112  double xmin, xmax, ymin, ymax, h_r;
113  size_t m0, m1, n0_odd, n1_odd, n0_even, n1_even;
114  //HexagonalPacking2D() {}
115  //HexagonalPacking2D(const HexagonalPacking2D& other) {}
116  //HexagonalPacking2D& operator=(const HexagonalPacking2D& other) {return *this;}
117 };
118 
119 
120 
121 
122 
123 
124 
125 
126 
127 
143 public:
162  HexagonalPacking3D(double xmin_, double xmax_, double ymin_, double ymax_, double zmin_, double zmax_, double h_r_);
163 
189  void getParameters(size_t& l0_, size_t& l1_,
190  size_t& m0_odd_, size_t& m1_odd_,
191  size_t& m0_even_, size_t& m1_even_,
192  size_t& n0_odd_, size_t& n1_odd_,
193  size_t& n0_even_, size_t& n1_even_,
194  size_t& nn0_odd_, size_t& nn1_odd_,
195  size_t& nn0_even_, size_t& nn1_even_) {
196  l0_ = l0;
197  l1_ = l1;
198  m0_odd_ = m0_odd;
199  m1_odd_ = m1_odd;
200  m0_even_ = m0_even;
201  m1_even_ = m1_even;
202  n0_odd_ = n0_odd;
203  n1_odd_ = n1_odd;
204  n0_even_ = n0_even;
205  n1_even_ = n1_even;
206  nn0_odd_ = nn0_odd;
207  nn1_odd_ = nn1_odd;
208  nn0_even_ = nn0_even;
209  nn1_even_ = nn1_even;
210  }
211 
212 
221  double computeX(int tag, size_t k) {
222  if(tag==0) return xmin+2.0*h_r+k*2.0*h_r; //(odd layers && odd rows) || (even layers && even rows)
223  else return xmin+h_r+k*2.0*h_r; // (odd layers && even rows) || (even layers && odd rows)
224  }
225 
233  double computeY(int tag, size_t j) {
234  if(tag==0) return ymin+h_r+j*sqrt(3.0)*h_r; //odd-numbered layers
235  else return ymin+sqrt(3.0)/3.0*h_r+j*sqrt(3.0)*h_r; //even-numbered layers
236  }
237 
238 
245  double computeZ(size_t i) {
246  return zmin+h_r+i*2.0*sqrt(6.0)/3.0*h_r;
247  }
248 
249 private:
250 
251  double xmin, xmax, ymin, ymax, zmin, zmax, h_r;
252  size_t l0,l1;
253  size_t m0_odd, m1_odd, m0_even, m1_even, n0_odd, n1_odd, n0_even, n1_even;
254  size_t nn0_odd, nn1_odd, nn0_even, nn1_even;
255  //HexagonalPacking3D() {}
256  //HexagonalPacking3D(const HexagonalPacking3D& other) {}
257  //HexagonalPacking3D& operator=(const HexagonalPacking3D& other) {return *this;}
258 };
259 
260 
261 #endif // __HEXAGONALPACKING_H__
262 
263 
264 
void getParameters(size_t &l0_, size_t &l1_, size_t &m0_odd_, size_t &m1_odd_, size_t &m0_even_, size_t &m1_even_, size_t &n0_odd_, size_t &n1_odd_, size_t &n0_even_, size_t &n1_even_, size_t &nn0_odd_, size_t &nn1_odd_, size_t &nn0_even_, size_t &nn1_even_)
Getter function to retrieve parameters of the boundaries of this hexagonal close packing.
Definition: hexagonal_packing.h:189
Computes the 2D Cartesian coordinates of a particle based on the hexagonal close packing.
Definition: hexagonal_packing.h:41
double computeY(size_t j)
Computes the particle location in the y-coordinate.
Definition: hexagonal_packing.h:107
double computeX(int tag, size_t k)
Computes the particle location in the x-coordinate.
Definition: hexagonal_packing.h:221
double computeX(int tag, size_t k)
Computes the particle location in the x-coordinate.
Definition: hexagonal_packing.h:96
HexagonalPacking3D(double xmin_, double xmax_, double ymin_, double ymax_, double zmin_, double zmax_, double h_r_)
Constructor.
Definition: hexagonal_packing.cpp:46
Computes the 3D Cartesian coordinates of a particle based on the hexagonal close packing.
Definition: hexagonal_packing.h:142
double computeZ(size_t i)
Computes the particle location in the z-coordinate.
Definition: hexagonal_packing.h:245
void getParameters(size_t &m0_, size_t &m1_, size_t &n0_odd_, size_t &n1_odd_, size_t &n0_even_, size_t &n1_even_)
Getter function to retrieve parameters of the boundaries of this hexagonal close packing.
Definition: hexagonal_packing.h:78
double computeY(int tag, size_t j)
Computes the particle location in the y-coordinate.
Definition: hexagonal_packing.h:233
HexagonalPacking2D(double xmin_, double xmax_, double ymin_, double ymax_, double h_r_)
Constructor.
Definition: hexagonal_packing.cpp:11