Introduction
Introduction Statistics Contact Development Disclaimer Help
tAdded custom compare function to Spherebin - sphere - GPU-based 3D discrete el…
git clone git://src.adamsgaard.dk/sphere
Log
Files
Refs
LICENSE
---
commit b8f266208c82dd9b7412e1630a4a96e3ec5acea8
parent 3f451fceb0e5556d292d7fccfd75f63809ce6830
Author: Anders Damsgaard <[email protected]>
Date: Mon, 29 Oct 2012 13:41:44 +0100
Added custom compare function to Spherebin
Diffstat:
M python/sphere.py | 127 ++++++++++++++++++++++-------…
1 file changed, 93 insertions(+), 34 deletions(-)
---
diff --git a/python/sphere.py b/python/sphere.py
t@@ -17,7 +17,7 @@ class Spherebin:
"""
# Constructor - Initialize arrays
- def __init__(self, nd=3, np=1, nw=1):
+ def __init__(self, np=1, nd=3, nw=1):
self.nd = numpy.ones(1, dtype=numpy.int32) * nd
self.np = numpy.ones(1, dtype=numpy.uint32) * np
t@@ -80,9 +80,71 @@ class Spherebin:
# x- and y-boundary behavior
self.gamma_wn = numpy.ones(1, dtype=numpy.float64) * 1.0e3
- self.gamma_ws = numpy.ones(1, dtype=numpy.float64) * 1.0e3
+ self.gamma_wt = numpy.ones(1, dtype=numpy.float64) * 1.0e3
self.gamma_wr = numpy.ones(1, dtype=numpy.float64) * 1.0e3
+ # Compare the values of two Spherebin objects, and check
+ # whether the values are identical
+ def __cmp__(self, other):
+ if ( (\
+ self.nd == other.nd and\
+ self.np == other.np and\
+ self.time_dt == other.time_dt and\
+ self.time_current == other.time_current and\
+ self.time_total == other.time_total and\
+ self.time_file_dt == other.time_file_dt and\
+ self.time_step_count == other.time_step_count and\
+ (self.origo == other.origo).all() and\
+ (self.L == other.L).all() and\
+ (self.num == other.num).all() and\
+ self.periodic == other.periodic and\
+ (self.x == other.x).all() and\
+ (self.radius == other.radius).all() and\
+ (self.xysum == other.xysum).all() and\
+ (self.vel == other.vel).all() and\
+ (self.fixvel == other.fixvel).all() and\
+ (self.force == other.force).all() and\
+ (self.angpos == other.angpos).all() and\
+ (self.angvel == other.angvel).all() and\
+ (self.torque == other.torque).all() and\
+ (self.es_dot == other.es_dot).all() and\
+ (self.es == other.es).all() and\
+ (self.ev_dot == other.ev_dot).all() and\
+ (self.ev == other.ev).all() and\
+ (self.p == other.p).all() and\
+ (self.g == other.g).all() and\
+ self.k_n == other.k_n and\
+ self.k_t == other.k_t and\
+ self.k_r == other.k_r and\
+ self.gamma_n == other.gamma_n and\
+ self.gamma_t == other.gamma_t and\
+ self.gamma_r == other.gamma_r and\
+ self.mu_s == other.mu_s and\
+ self.mu_d == other.mu_d and\
+ self.mu_r == other.mu_r and\
+ self.rho == other.rho and\
+ self.contactmodel == other.contactmodel and\
+ self.kappa == other.kappa and\
+ self.db == other.db and\
+ self.V_b == other.V_b and\
+ self.nw == other.nw and\
+ (self.wmode == other.wmode).all() and\
+ (self.w_n == other.w_n).all() and\
+ (self.w_x == other.w_x).all() and\
+ (self.w_m == other.w_m).all() and\
+ (self.w_vel == other.w_vel).all() and\
+ (self.w_force == other.w_force).all() and\
+ (self.w_devs == other.w_devs).all() and\
+ self.gamma_wn == other.gamma_wn and\
+ self.gamma_wt == other.gamma_wt and\
+ self.gamma_wr == other.gamma_wr\
+ ).all() == True):
+ return 0 # All equal
+ else:
+ return 1
+
+
+
# Read binary data
def readbin(self, targetbin, verbose = True):
t@@ -132,17 +194,17 @@ class Spherebin:
self.x[i,:] = numpy.fromfile(fh, dtype=numpy.float64, count=self.nd)
self.radius[i] = numpy.fromfile(fh, dtype=numpy.float64, count=1)
- self.xysum = numpy.fromfile(fh, dtype=numpy.float64, count=self.np)
+ self.xysum = numpy.fromfile(fh, dtype=numpy.float64, count=self.np*2).re…
for i in range(self.np):
self.vel[i,:] = numpy.fromfile(fh, dtype=numpy.float64, count=self.nd)
self.fixvel[i] = numpy.fromfile(fh, dtype=numpy.float64, count=1)
- self.force = numpy.fromfile(fh, dtype=numpy.float64, count=self.np*self.…
+ self.force = numpy.fromfile(fh, dtype=numpy.float64, count=self.np*self.…
- self.angpos = numpy.fromfile(fh, dtype=numpy.float64, count=self.np*self…
- self.angvel = numpy.fromfile(fh, dtype=numpy.float64, count=self.np*self…
- self.torque = numpy.fromfile(fh, dtype=numpy.float64, count=self.np*self…
+ self.angpos = numpy.fromfile(fh, dtype=numpy.float64, count=self.np*self…
+ self.angvel = numpy.fromfile(fh, dtype=numpy.float64, count=self.np*self…
+ self.torque = numpy.fromfile(fh, dtype=numpy.float64, count=self.np*self…
# Per-particle single-value parameters
self.es_dot = numpy.fromfile(fh, dtype=numpy.float64, count=self.np)
t@@ -178,7 +240,7 @@ class Spherebin:
self.w_force = numpy.zeros(self.nw, dtype=numpy.float64)
self.w_devs = numpy.zeros(self.nw, dtype=numpy.float64)
- self.wmode = numpy.fromfile(fh, dtype=numpy.int32, count=walls.nw)
+ self.wmode = numpy.fromfile(fh, dtype=numpy.int32, count=self.nw)
for i in range(self.nw):
self.w_n[i,:] = numpy.fromfile(fh, dtype=numpy.float64, count=self.nd)
self.w_x[i] = numpy.fromfile(fh, dtype=numpy.float64, count=1)
t@@ -190,7 +252,7 @@ class Spherebin:
# x- and y-boundary behavior
self.gamma_wn = numpy.fromfile(fh, dtype=numpy.float64, count=1)
- self.gamma_ws = numpy.fromfile(fh, dtype=numpy.float64, count=1)
+ self.gamma_wt = numpy.fromfile(fh, dtype=numpy.float64, count=1)
self.gamma_wr = numpy.fromfile(fh, dtype=numpy.float64, count=1)
fh.close()
t@@ -200,12 +262,14 @@ class Spherebin:
fh.close()
# Write binary data
- def writebin(self, targetbin):
+ def writebin(self, targetbin, verbose = True):
""" Reads a target SPHERE binary file and returns data.
"""
fh = None
try:
- print("Output file: {0}".format(targetbin))
+ if (verbose == True):
+ print("Output file: {0}".format(targetbin))
+
fh = open(targetbin, "wb")
# Write the number of dimensions and particles
t@@ -236,7 +300,6 @@ class Spherebin:
fh.write(self.vel[i,:].astype(numpy.float64))
fh.write(self.fixvel[i].astype(numpy.float64))
-
fh.write(self.force.astype(numpy.float64))
fh.write(self.angpos.astype(numpy.float64))
t@@ -275,14 +338,14 @@ class Spherebin:
fh.write(self.w_x[i].astype(numpy.float64))
for i in range(self.nw):
- fh.write(self.w_m[j].astype(numpy.float64))
- fh.write(self.w_vel[j].astype(numpy.float64))
- fh.write(self.w_force[j].astype(numpy.float64))
- fh.write(self.w_devs[j].astype(numpy.float64))
+ fh.write(self.w_m[i].astype(numpy.float64))
+ fh.write(self.w_vel[i].astype(numpy.float64))
+ fh.write(self.w_force[i].astype(numpy.float64))
+ fh.write(self.w_devs[i].astype(numpy.float64))
# x- and y-boundary behavior
fh.write(self.gamma_wn.astype(numpy.float64))
- fh.write(self.gamma_ws.astype(numpy.float64))
+ fh.write(self.gamma_wt.astype(numpy.float64))
fh.write(self.gamma_wr.astype(numpy.float64))
fh.close()
t@@ -691,7 +754,7 @@ class Spherebin:
# Set wall viscosities to zero
self.gamma_wn[0] = 0.0
- self.gamma_ws[0] = 0.0
+ self.gamma_wt[0] = 0.0
self.gamma_wr[0] = 0.0
t@@ -728,56 +791,52 @@ class Spherebin:
gamma_t = 0,
gamma_r = 0,
gamma_wn = 1e3,
- gamma_ws = 1e3,
+ gamma_wt = 1e3,
gamma_wr = 2e3,
capillaryCohesion = 0):
""" Initialize particle parameters to default values.
Radii must be set prior to calling this function.
"""
# Particle material density, kg/m^3
- self.rho = numpy.ones(self.np, dtype=numpy.float64) * rho
+ self.rho = numpy.ones(1, dtype=numpy.float64) * rho
### Dry granular material parameters
# Contact normal elastic stiffness, N/m
- self.k_n = numpy.ones(self.np, dtype=numpy.float64) * k_n
+ self.k_n = numpy.ones(1, dtype=numpy.float64) * k_n
# Contact shear elastic stiffness (for contactmodel = 2), N/m
- self.k_t = numpy.ones(self.np, dtype=numpy.float64) * k_t
+ self.k_t = numpy.ones(1, dtype=numpy.float64) * k_t
# Contact rolling elastic stiffness (for contactmodel = 2), N/m
- self.k_r = numpy.ones(self.np, dtype=numpy.float64) * k_r
+ self.k_r = numpy.ones(1, dtype=numpy.float64) * k_r
# Contact normal viscosity. Critical damping: 2*sqrt(m*k_n).
# Normal force component elastic if nu = 0.0.
#self.gamma_n = numpy.ones(self.np, dtype=numpy.float64) \
# * nu_frac * 2.0 * math.sqrt(4.0/3.0 * math.pi * numpy.amin(…
# * self.rho[0] * self.k_n[0])
- self.gamma_n = numpy.ones(self.np, dtype=numpy.float64) * gamma_n
+ self.gamma_n = numpy.ones(1, dtype=numpy.float64) * gamma_n
# Contact shear viscosity, Ns/m
- self.gamma_t = numpy.ones(self.np, dtype=numpy.float64) * gamma_t
+ self.gamma_t = numpy.ones(1, dtype=numpy.float64) * gamma_t
# Contact rolling viscosity, Ns/m?
- self.gamma_r = numpy.ones(self.np, dtype=numpy.float64) * gamma_r
+ self.gamma_r = numpy.ones(1, dtype=numpy.float64) * gamma_r
# Contact static shear friction coefficient
- self.mu_s = numpy.ones(self.np, dtype=numpy.float64) * numpy.tan(numpy.rad…
+ self.mu_s = numpy.ones(1, dtype=numpy.float64) * numpy.tan(numpy.radians(a…
# Contact dynamic shear friction coefficient
- self.mu_d = numpy.ones(self.np, dtype=numpy.float64) * numpy.tan(numpy.rad…
+ self.mu_d = numpy.ones(1, dtype=numpy.float64) * numpy.tan(numpy.radians(a…
# Contact rolling friction coefficient
- self.mu_r = numpy.ones(self.np, dtype=numpy.float64) * numpy.tan(numpy.rad…
-
- # Global parameters
- # if 1 = all particles have the same values for the physical parameters
- self.globalparams[0] = 1
+ self.mu_r = numpy.ones(1, dtype=numpy.float64) * numpy.tan(numpy.radians(a…
# Wall viscosities
self.gamma_wn[0] = gamma_wn # normal
- self.gamma_ws[0] = gamma_ws # sliding
+ self.gamma_wt[0] = gamma_wt # sliding
self.gamma_wr[0] = gamma_wr # rolling
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.