/* 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