From 5ba4109f0021e7b2c9c66821461742a339e07355 Mon Sep 17 00:00:00 2001 From: pants Date: Wed, 7 Dec 2016 13:29:51 -0500 Subject: added support for hyperuniform lattices using existing hard-sphere jamming routine --- src/spheres_poly/grid_field.h | 148 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 src/spheres_poly/grid_field.h (limited to 'src/spheres_poly/grid_field.h') diff --git a/src/spheres_poly/grid_field.h b/src/spheres_poly/grid_field.h new file mode 100644 index 0000000..10430ed --- /dev/null +++ b/src/spheres_poly/grid_field.h @@ -0,0 +1,148 @@ +/* + Packing of hard spheres via molecular dynamics + Developed by Monica Skoge, 2006, Princeton University + Contact: Aleksandar Donev (adonev@math.princeton.edu) with questions + This code may be used, modified and distributed freely. + Please cite: + + "Packing Hyperspheres in High-Dimensional Euclidean Spaces" + M. Skoge, A. Donev, F. H. Stillinger and S. Torquato, 2006 + + if you use these codes. +*/ + + +#ifndef GRID_FIELD_H +#define GRID_FIELD_H + +#include "vector.h" + +// ====================================================================== +// grid_field +// ====================================================================== + +// A field of V-vectors on a D dimensional manifold + +template +class grid_field { + + public: + int elements; + + private: + T* f; + vector size; // number of grid points for each dimension + vector offset; + + public: + + grid_field(); + grid_field(const vector&); + ~grid_field(); + + T& get(const vector&); + + vector get_size() const; + void set_size(const vector&); + void set_size(const int); + void initialize(const int i); +}; + + +// grid_field +// ~~~~~~~~~~~~ +template +grid_field::grid_field() + : f(0), elements(0) +{ +} + + +// grid_field +// ~~~~~~~~~~~~ +template +grid_field::grid_field(const vector& s) + : f(0) +{ + set_size(s); +} + + +// ~grid_field +// ~~~~~~~~~~~~~ +template +grid_field::~grid_field() +{ + if(f != 0) + delete[] f; +} + + +// get_size +// ~~~~~~~~ +template +inline vector grid_field::get_size() const +{ + return size; +} + + +// set_size +// ~~~~~~~~ +template +void grid_field::set_size(const vector& s) +{ + if(f != 0) + delete[] f; + + size = s; + + elements = 1; + for(int i=0; i +void grid_field::set_size(const int s) +{ + vector square; + + for(int k=0; k +inline T& grid_field::get(const vector& pos) +{ + int p=0; + for(int i=0; i +void grid_field::initialize(const int value) +{ + for(int i=0; i