tAdded default values to parameters in init, added grid fitting functions - sph… | |
git clone git://src.adamsgaard.dk/sphere | |
Log | |
Files | |
Refs | |
LICENSE | |
--- | |
commit 5e1012c4c642e3a1e740547d141434bfebe3146d | |
parent 9c3995cb20c289c1944874fb8371b84d805c9d59 | |
Author: Anders Damsgaard <[email protected]> | |
Date: Fri, 12 Oct 2012 11:41:12 +0200 | |
Added default values to parameters in init, added grid fitting functions | |
Diffstat: | |
M python/sphere.py | 67 +++++++++++++++++++++++++----… | |
1 file changed, 55 insertions(+), 12 deletions(-) | |
--- | |
diff --git a/python/sphere.py b/python/sphere.py | |
t@@ -42,16 +42,16 @@ class Spherebin: | |
self.angpos = numpy.zeros(self.np*self.nd, dtype=numpy.float64).reshape(s… | |
self.fixvel = numpy.zeros(self.np, dtype=numpy.float64) | |
self.xsum = numpy.zeros(self.np, dtype=numpy.float64) | |
- self.radius = numpy.zeros(self.np, dtype=numpy.float64) | |
- self.rho = numpy.zeros(self.np, dtype=numpy.float64) | |
- self.k_n = numpy.zeros(self.np, dtype=numpy.float64) | |
- self.k_t = numpy.zeros(self.np, dtype=numpy.float64) | |
+ self.radius = numpy.ones(self.np, dtype=numpy.float64) | |
+ self.rho = numpy.ones(self.np, dtype=numpy.float64) | |
+ self.k_n = numpy.ones(self.np, dtype=numpy.float64) * 1.16e9 | |
+ self.k_t = numpy.ones(self.np, dtype=numpy.float64) * 1.16e9 | |
self.k_r = numpy.zeros(self.np, dtype=numpy.float64) | |
self.gamma_n = numpy.zeros(self.np, dtype=numpy.float64) | |
self.gamma_t = numpy.zeros(self.np, dtype=numpy.float64) | |
self.gamma_r = numpy.zeros(self.np, dtype=numpy.float64) | |
- self.mu_s = numpy.zeros(self.np, dtype=numpy.float64) | |
- self.mu_d = numpy.zeros(self.np, dtype=numpy.float64) | |
+ self.mu_s = numpy.ones(self.np, dtype=numpy.float64) | |
+ self.mu_d = numpy.ones(self.np, dtype=numpy.float64) | |
self.mu_r = numpy.zeros(self.np, dtype=numpy.float64) | |
self.es_dot = numpy.zeros(self.np, dtype=numpy.float64) | |
self.ev_dot = numpy.zeros(self.np, dtype=numpy.float64) | |
t@@ -63,11 +63,11 @@ class Spherebin: | |
# Constant, single-value physical parameters | |
self.globalparams = numpy.zeros(1, dtype=numpy.int32) | |
- self.g = numpy.zeros(self.nd, dtype=numpy.float64) | |
+ self.g = numpy.array([0.0, 0.0, -9.80], dtype=numpy.float64) | |
self.kappa = numpy.zeros(1, dtype=numpy.float64) | |
self.db = numpy.zeros(1, dtype=numpy.float64) | |
self.V_b = numpy.zeros(1, dtype=numpy.float64) | |
- self.shearmodel = numpy.zeros(1, dtype=numpy.uint32) | |
+ self.shearmodel = numpy.ones(1, dtype=numpy.uint32) | |
# Wall data | |
self.nw = numpy.ones(1, dtype=numpy.uint32) * nw | |
t@@ -81,9 +81,9 @@ class Spherebin: | |
# x- and y-boundary behavior | |
self.periodic = numpy.zeros(1, dtype=numpy.uint32) | |
- self.gamma_wn = numpy.zeros(1, dtype=numpy.float64) | |
- self.gamma_ws = numpy.zeros(1, dtype=numpy.float64) | |
- self.gamma_wr = numpy.zeros(1, dtype=numpy.float64) | |
+ self.gamma_wn = numpy.ones(1, dtype=numpy.float64) * 1e3 | |
+ self.gamma_ws = numpy.ones(1, dtype=numpy.float64) * 1e3 | |
+ self.gamma_wr = numpy.ones(1, dtype=numpy.float64) * 1e3 | |
# Read binary data | |
t@@ -400,6 +400,50 @@ class Spherebin: | |
#self.nw[0] = numpy.ones(1, dtype=numpy.uint32) * 1 | |
self.nw = numpy.ones(1, dtype=numpy.uint32) * 1 | |
+ # Fit cell number according to world dimensions | |
+ def fitNum(self): | |
+ """ Create cells. cellsize is increased from 2*r_max until it fits | |
+ the horizontal grid. | |
+ Call after setting self.L, self.num and self.radius | |
+ """ | |
+ cellsize_min = 2.1 * numpy.amax(self.radius) | |
+ self.num[0] = numpy.ceil((self.L[0]-self.origo[0])/cellsize_min) | |
+ self.num[1] = numpy.ceil((self.L[1]-self.origo[1])/cellsize_min) | |
+ self.num[2] = numpy.ceil((self.L[2]-self.origo[2])/cellsize_min) | |
+ | |
+ | |
+ # Generate grid based on particle positions | |
+ def initGrid(self, g = numpy.array([0.0, 0.0, -9.80665]), | |
+ margin = numpy.array([2.0, 2.0, 2.0]), | |
+ periodic = 1, | |
+ shearmodel = 2): | |
+ """ Initialize grid suitable for the particle positions set previously. | |
+ The margin parameter adjusts the distance (in no. of max. radii) | |
+ from the particle boundaries. | |
+ """ | |
+ | |
+ self.g = g | |
+ self.periodic[0] = periodic | |
+ | |
+ # Cell configuration | |
+ r_max = numpy.amax(self.radius) | |
+ | |
+ # Max. and min. coordinates of world | |
+ self.origo = numpy.array([numpy.amin(self.x[:,0] - self.radius[:]), | |
+ numpy.amin(self.x[:,1] - self.radius[:]), | |
+ numpy.amin(self.x[:,2] - self.radius[:])]) \ | |
+ - margin*r_max | |
+ self.L = numpy.array([numpy.amax(self.x[:,0] + self.radius[:]), | |
+ numpy.amax(self.x[:,1] + self.radius[:]), | |
+ numpy.amax(self.x[:,2] + self.radius[:])]) \ | |
+ + margin*r_max | |
+ | |
+ # Fit cell size to world dimensions | |
+ fitNum() | |
+ | |
+ self.shearmodel[0] = shearmodel | |
+ | |
+ | |
# Initialize particle positions to regular, grid-like, non-overlapping confi… | |
def initGridPos(self, g = numpy.array([0.0, 0.0, -9.80665]), | |
gridnum = numpy.array([12, 12, 36]), | |
t@@ -522,7 +566,6 @@ class Spherebin: | |
x_max = numpy.max(self.x[:,0] + self.radius) | |
y_max = numpy.max(self.x[:,1] + self.radius) | |
z_max = numpy.max(self.x[:,2] + self.radius) | |
- cellsize = 2.1 * r_max | |
# Adjust size of world | |
self.num[0] = numpy.ceil(x_max/cellsize) | |
self.num[1] = numpy.ceil(y_max/cellsize) |