10 #ifndef VOROPP_CONTAINER_PRD_HH
11 #define VOROPP_CONTAINER_PRD_HH
95 int nx_,
int ny_,
int nz_,
int init_mem_,
int ps);
101 for(ijk=0;ijk<
oxyz;ijk++)
for(q=0;q<
co[ijk];q++)
102 printf(
"%d %g %g %g\n",
id[ijk][q],
p[ijk][
ps*q],
p[ijk][
ps*q+1],
p[ijk][
ps*q+2]);
123 template<
class v_cell>
124 inline bool initialize_voronoicell(v_cell &c,
int ijk,
int q,
int ci,
int cj,
int ck,
int &i,
int &j,
int &k,
double &x,
double &y,
double &z,
int &disp) {
126 double *pp=
p[ijk]+
ps*q;
127 x=*(pp++);y=*(pp++);z=*pp;
152 inline void frac_pos(
double x,
double y,
double z,
double ci,
double cj,
double ck,
double &fx,
double &fy,
double &fz) {
171 inline int region_index(
int ci,
int cj,
int ck,
int ei,
int ej,
int ek,
double &qx,
double &qy,
double &qz,
int &disp) {
172 int qi=ci+(ei-
nx),qj=cj+(ej-
ey),qk=ck+(ek-
ez);
173 int iv(
step_div(qi,
nx));
if(iv!=0) {qx=iv*
bx;qi-=
nx*iv;}
else qx=0;
175 return qi+
nx*(qj+
oy*qk);
182 void put_locate_block(
int &ijk,
double &x,
double &y,
double &z,
int &ai,
int &aj,
int &ak);
194 if(di<0||di>=
nx||dj<0||dj>=
oy||dk<0||dk>=
oz)
202 void put_image(
int reg,
int fijk,
int l,
double dx,
double dy,
double dz);
203 inline void remap(
int &ai,
int &aj,
int &ak,
int &ci,
int &cj,
int &ck,
double &x,
double &y,
double &z,
int &ijk);
214 container_periodic(
double bx_,
double bxy_,
double by_,
double bxz_,
double byz_,
double bz_,
215 int nx_,
int ny_,
int nz_,
int init_mem_);
217 void put(
int n,
double x,
double y,
double z);
218 void put(
int n,
double x,
double y,
double z,
int &ai,
int &aj,
int &ak);
220 void import(FILE *fp=stdin);
229 inline void import(
const char* filename) {
230 FILE *fp=safe_fopen(filename,
"r");
244 FILE *fp=safe_fopen(filename,
"r");
253 template<
class c_loop>
258 fprintf(fp,
"%d %g %g %g\n",
id[vl.ijk][vl.q],*pp,pp[1],pp[2]);
270 FILE *fp=safe_fopen(filename,
"w");
277 template<
class c_loop>
282 fprintf(fp,
"// id %d\nsphere{<%g,%g,%g>,s}\n",
283 id[vl.ijk][vl.q],*pp,pp[1],pp[2]);
295 FILE *fp=safe_fopen(filename,
"w");
303 template<
class c_loop>
307 pp=
p[vl.ijk]+
ps*vl.q;
322 FILE *fp=safe_fopen(filename,
"w");
330 template<
class c_loop>
334 fprintf(fp,
"// cell %d\n",
id[vl.ijk][vl.q]);
335 pp=
p[vl.ijk]+
ps*vl.q;
350 FILE *fp=safe_fopen(filename,
"w");
359 template<
class c_loop>
361 int ijk,q;
double *pp;
365 ijk=vl.ijk;q=vl.q;pp=
p[ijk]+
ps*q;
366 c.
output_custom(format,
id[ijk][q],*pp,pp[1],pp[2],default_radius,fp);
371 ijk=vl.ijk;q=vl.q;pp=
p[ijk]+
ps*q;
372 c.
output_custom(format,
id[ijk][q],*pp,pp[1],pp[2],default_radius,fp);
377 void print_custom(
const char *format,
const char *filename);
378 bool find_voronoi_cell(
double x,
double y,
double z,
double &rx,
double &ry,
double &rz,
int &pid);
387 template<
class v_cell,
class c_loop>
389 return vc.compute_cell(c,vl.ijk,vl.q,vl.i,vl.j,vl.k);
399 template<
class v_cell>
401 int k(ijk/(
nx*
oy)),ijkt(ijk-(
nx*oy)*k),j(ijkt/
nx),i(ijkt-j*
nx);
402 return vc.compute_cell(c,ijk,q,i,j,k);
412 template<
class v_cell>
416 double *pp=
p[ijk]+3*
co[ijk]++;
417 *(pp++)=x;*(pp++)=y;*(pp++)=z;
436 int nx_,
int ny_,
int nz_,
int init_mem_);
438 void put(
int n,
double x,
double y,
double z,
double r);
439 void put(
int n,
double x,
double y,
double z,
double r,
int &ai,
int &aj,
int &ak);
441 void import(FILE *fp=stdin);
450 inline void import(
const char* filename) {
451 FILE *fp=safe_fopen(filename,
"r");
465 FILE *fp=safe_fopen(filename,
"r");
474 template<
class c_loop>
479 fprintf(fp,
"%d %g %g %g %g\n",
id[vl.ijk][vl.q],*pp,pp[1],pp[2],pp[3]);
493 FILE *fp=safe_fopen(filename,
"w");
500 template<
class c_loop>
505 fprintf(fp,
"// id %d\nsphere{<%g,%g,%g>,%g}\n",
506 id[vl.ijk][vl.q],*pp,pp[1],pp[2],pp[3]);
518 FILE *fp(safe_fopen(filename,
"w"));
526 template<
class c_loop>
530 pp=
p[vl.ijk]+
ps*vl.q;
545 FILE *fp(safe_fopen(filename,
"w"));
553 template<
class c_loop>
557 fprintf(fp,
"// cell %d\n",
id[vl.ijk][vl.q]);
558 pp=
p[vl.ijk]+
ps*vl.q;
573 FILE *fp(safe_fopen(filename,
"w"));
582 template<
class c_loop>
584 int ijk,q;
double *pp;
588 ijk=vl.ijk;q=vl.q;pp=
p[ijk]+
ps*q;
594 ijk=vl.ijk;q=vl.q;pp=
p[ijk]+
ps*q;
607 template<
class v_cell,
class c_loop>
609 return vc.compute_cell(c,vl.ijk,vl.q,vl.i,vl.j,vl.k);
619 template<
class v_cell>
621 int k(ijk/(
nx*
oy)),ijkt(ijk-(
nx*oy)*k),j(ijkt/
nx),i(ijkt-j*
nx);
622 return vc.compute_cell(c,ijk,q,i,j,k);
633 template<
class v_cell>
638 *(pp++)=x;*(pp++)=y;*(pp++)=z;*pp=r;
645 void print_custom(
const char *format,
const char *filename);
646 bool find_voronoi_cell(
double x,
double y,
double z,
double &rx,
double &ry,
double &rz,
int &pid);
Extension of the voronoicell_base class to represent a Voronoi cell with neighbor information...
void create_vertical_image(int di, int dj, int dk)
bool find_voronoi_cell(double x, double y, double z, double &rx, double &ry, double &rz, int &pid)
container_periodic_poly(double bx_, double bxy_, double by_, double bxz_, double byz_, double bz_, int nx_, int ny_, int nz_, int init_mem_)
void draw_cells_gnuplot(const char *filename)
Extension of the container_periodic_base class for computing radical Voronoi tessellations.
void draw_gnuplot(double x, double y, double z, FILE *fp=stdout)
void initialize_search(int ci, int cj, int ck, int ijk, int &i, int &j, int &k, int &disp)
void print_all_particles()
Class containing all of the routines that are specific to computing the radical Voronoi tessellation...
void draw_particles_pov(c_loop &vl, FILE *fp)
void add_particle_memory(int i)
Header file for the classes encapsulating functionality for the regular and radical Voronoi tessellat...
void draw_cells_gnuplot(c_loop &vl, FILE *fp)
Header file for the loop classes.
Class containing data structures common across all particle container classes.
void put_image(int reg, int fijk, int l, double dx, double dy, double dz)
void draw_particles_pov(FILE *fp=stdout)
Header file for the voronoicell and related classes.
Master configuration file for setting various compile-time options.
void put(int n, double x, double y, double z, double r)
bool find_voronoi_cell(double x, double y, double z, double &rx, double &ry, double &rz, int &pid)
void draw_cells_pov(const char *filename)
Header file for the voro_compute template and related classes.
void check_compartmentalized()
Class for computation of the unit Voronoi cell associated with a 3D non-rectangular periodic domain...
void create_side_image(int di, int dj, int dk)
#define VOROPP_INTERNAL_ERROR
void put(int n, double x, double y, double z)
void create_periodic_image(int di, int dj, int dk)
bool initialize_voronoicell(v_cell &c, int ijk, int q, int ci, int cj, int ck, int &i, int &j, int &k, double &x, double &y, double &z, int &disp)
container_periodic(double bx_, double bxy_, double by_, double bxz_, double byz_, double bz_, int nx_, int ny_, int nz_, int init_mem_)
void draw_cells_pov(FILE *fp=stdout)
Header file for the unitcell class.
void draw_cells_pov(c_loop &vl, FILE *fp)
void draw_particles(const char *filename)
bool contains_neighbor(const char *format)
int step_div(int a, int b)
Extension of the container_periodic_base class for computing regular Voronoi tessellations.
bool compute_cell(v_cell &c, int ijk, int q)
void draw_cells_pov(const char *filename)
void draw_pov(double x, double y, double z, FILE *fp=stdout)
void draw_cells_gnuplot(FILE *fp=stdout)
void print_custom(c_loop &vl, const char *format, FILE *fp)
double sum_cell_volumes()
~container_periodic_base()
bool compute_cell(v_cell &c, c_loop &vl)
void draw_cells_gnuplot(FILE *fp=stdout)
void draw_particles(c_loop &vl, FILE *fp)
void draw_particles_pov(const char *filename)
int region_index(int ci, int cj, int ck, int ei, int ej, int ek, double &qx, double &qy, double &qz, int &disp)
void draw_cells_gnuplot(c_loop &vl, FILE *fp)
container_periodic_base(double bx_, double bxy_, double by_, double bxz_, double byz_, double bz_, int nx_, int ny_, int nz_, int init_mem_, int ps)
Header file for the base Voronoi container class.
void draw_particles(FILE *fp=stdout)
void draw_cells_pov(FILE *fp=stdout)
bool compute_ghost_cell(v_cell &c, double x, double y, double z, double r)
Header file for the small helper functions.
void draw_particles(c_loop &vl, FILE *fp)
void draw_particles_pov(const char *filename)
void put_locate_block(int &ijk, double &x, double &y, double &z)
void remap(int &ai, int &aj, int &ak, int &ci, int &cj, int &ck, double &x, double &y, double &z, int &ijk)
void draw_particles(const char *filename)
void output_custom(const char *format, FILE *fp=stdout)
Extension of the voronoicell_base class to represent a Voronoi cell without neighbor information...
Template for carrying out Voronoi cell computations.
void draw_particles(FILE *fp=stdout)
void draw_cells_gnuplot(const char *filename)
A class for looping over all particles in a container_periodic or container_periodic_poly class...
bool compute_cell(v_cell &c, c_loop &vl)
bool compute_ghost_cell(v_cell &c, double x, double y, double z)
bool compute_cell(v_cell &c, int ijk, int q)
double sum_cell_volumes()
void draw_particles_pov(FILE *fp=stdout)
A class for storing ordering information when particles are added to a container. ...
void frac_pos(double x, double y, double z, double ci, double cj, double ck, double &fx, double &fy, double &fz)
void draw_particles_pov(c_loop &vl, FILE *fp)
void print_custom(c_loop &vl, const char *format, FILE *fp)
void draw_cells_pov(c_loop &vl, FILE *fp)
Class containing all of the routines that are specific to computing the regular Voronoi tessellation...
Class for representing a particle system in a 3D periodic non-orthogonal periodic domain...