tAdded functionality to initialize fluid with the hydrostatic pressure distribution - sphere - GPU-based 3D discrete element method algorithm with optional fluid coupling
(HTM) git clone git://src.adamsgaard.dk/sphere
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) LICENSE
---
(DIR) commit 882ebea81aa2284860563bd8a5dadb87c0ed1bfc
(DIR) parent 11b2e20f1da8ed07bdff711f0a65d009073af6a3
(HTM) Author: Anders Damsgaard <anders.damsgaard@geo.au.dk>
Date: Thu, 27 Mar 2014 13:12:30 +0100
Added functionality to initialize fluid with the hydrostatic pressure distribution
Diffstat:
M python/sphere.py | 22 ++++++++++++++++++++--
1 file changed, 20 insertions(+), 2 deletions(-)
---
(DIR) diff --git a/python/sphere.py b/python/sphere.py
t@@ -1717,6 +1717,7 @@ class sim:
from the particle boundaries.
*Important*: The particle radii have to be set beforehand if the cell
width isn't specified by `dx`.
+
:param dx: The cell width in any direction. If the default value is used
(-1), the cell width is calculated to fit the largest particle.
:type dx: float
t@@ -2267,7 +2268,8 @@ class sim:
self.time_file_dt[0] = file_dt
self.time_step_count[0] = 0
- def initFluid(self, mu = 8.9e-4, rho = 1.0e3):
+ def initFluid(self, mu = 8.9e-4, rho = 1.0e3, p = 1.0,
+ hydrostatic = True):
'''
Initialize the fluid arrays and the fluid viscosity. The default value
of ``mu`` equals the dynamic viscosity of water at 25 degrees Celcius.
t@@ -2277,12 +2279,28 @@ class sim:
:type mu: float
:param rho: The fluid density [kg/(m^3)]
:type rho: float
+ :param p: The hydraulic pressure to initialize the cells to. If the
+ parameter `hydrostatic` is set to `True`, this value will apply to
+ the fluid cells at the top
+ :param hydrostatic: Initialize the fluid pressures to the hydrostatic
+ pressure distribution. A pressure gradient with depth is only
+ created if a gravitational acceleration along :math:`z` previously
+ has been specified
+ :type hydrostatic: bool
'''
self.mu = numpy.ones(1, dtype=numpy.float64) * mu
self.rho_f = numpy.ones(1, dtype=numpy.float64) * rho
self.p_f = numpy.ones((self.num[0], self.num[1], self.num[2]),
- dtype=numpy.float64)
+ dtype=numpy.float64) * p
+
+ if (hydrostatic == True):
+ dz = self.L[2]/self.num[2]
+ for iz in range(self.num[2]):
+ z = dz*iz + 0.5*dz
+ depth = self.L[2] - z
+ self.p_f[:,:,iz] = p + depth * rho * -self.g[2]
+
self.v_f = numpy.zeros((self.num[0], self.num[1], self.num[2], self.nd),
dtype=numpy.float64)
self.phi = numpy.ones((self.num[0], self.num[1], self.num[2]),