Introduction
Introduction Statistics Contact Development Disclaimer Help
ttry different deposition laws, d_dot > e_dot - granular-channel-hydro - subgla…
git clone git://src.adamsgaard.dk/granular-channel-hydro
Log
Files
Refs
README
LICENSE
---
commit 26bc00c665916c00d8fc195170f6df2062d77332
parent 8119c0ae2e91d175f51c319d32a10abc108ebcd3
Author: Anders Damsgaard Christensen <[email protected]>
Date: Thu, 2 Feb 2017 12:31:15 -0800
ttry different deposition laws, d_dot > e_dot
Diffstat:
M 1d-channel.py | 67 ++++++++++++++++++++++++++---…
1 file changed, 56 insertions(+), 11 deletions(-)
---
diff --git a/1d-channel.py b/1d-channel.py
t@@ -28,6 +28,7 @@ tol_Q = 1e-3 # Tolerance criteria for the normalized ma…
tol_P_c = 1e-3 # Tolerance criteria for the normalized max. residual for P_c
max_iter = 1e2*Ns # Maximum number of solver iterations before failure
output_convergence = False # Display convergence statistics during run
+safety = 0.1 # Safety factor ]0;1] for adaptive timestepping
# Physical parameters
rho_w = 1000. # Water density [kg/m^3]
t@@ -38,20 +39,22 @@ theta = 30. # Angle of internal friction in sediment [de…
# Water source term [m/s]
#m_dot = 7.93e-11
-#m_dot = 4.5e-8
-m_dot = 5.79e-5
+m_dot = 4.5e-7
+#m_dot = 5.79e-5
# Walder and Fowler 1994 sediment transport parameters
K_e = 0.1 # Erosion constant [-], disabled when 0.0
-K_d = 6.0 # Deposition constant [-], disabled when 0.0
+#K_d = 6.0 # Deposition constant [-], disabled when 0.0
+K_d = 1e-1 # Deposition constant [-], disabled when 0.0
+alpha = 2e5 # Geometric correction factor (Carter et al 2017)
#D50 = 1e-3 # Median grain size [m]
#tau_c = 0.5*g*(rho_s - rho_i)*D50 # Critical shear stress for transport
d15 = 1e-3 # Characteristic grain size [m]
-tau_c = 0.025*d15*g*(rho_s - rho_i) # Critical shear stress (Carter 2016)
+tau_c = 0.025*d15*g*(rho_s - rho_i) # Critical shear stress (Carter 2017)
#tau_c = 0.
mu_w = 1.787e-3 # Water viscosity [Pa*s]
froude = 0.1 # Friction factor [-]
-v_s = d15**2.*g*2.*(rho_s - rho_i)/(9.*mu_w) # Settling velocity (Carter 2016)
+v_s = d15**2.*g*2.*(rho_s - rho_i)/(9.*mu_w) # Settling velocity (Carter 2017)
# Hewitt 2011 channel flux parameters
manning = 0.1 # Manning roughness coefficient [m^{-1/3} s]
t@@ -91,7 +94,7 @@ N_c = numpy.zeros_like(S) # Effective pressure in channel …
P_c = numpy.zeros_like(S) # Water pressure in channel segments [Pa]
e_dot = numpy.zeros_like(S) # Sediment erosion rate in channel segments [m/s]
d_dot = numpy.zeros_like(S) # Sediment deposition rate in chan. segments [m/s]
-c_bar = numpy.zeros_like(S) # Vertically integrated sediment content [m]
+c_bar = numpy.zeros_like(S) # Vertically integrated sediment concentration [-]
tau = numpy.zeros_like(S) # Avg. shear stress from current [Pa]
porosity = numpy.ones_like(S)*0.3 # Sediment porosity [-]
res = numpy.zeros_like(S) # Solution residual during solver iterations
t@@ -118,25 +121,64 @@ def channel_shear_stress(Q, S):
def channel_erosion_rate(tau):
# Parker 1979, Walder and Fowler 1994
- return K_e*v_s*(tau - tau_c).clip(0.)/(g*(rho_s - rho_w)*d15)
+ #return K_e*v_s*(tau - tau_c).clip(min=0.)/(g*(rho_s - rho_w)*d15)
+ # Carter et al 2017
+ return K_e*v_s/alpha*(tau - tau_c).clip(min=0.)/(g*(rho_s - rho_w)*d15)
def channel_deposition_rate_kernel(tau, c_bar, ix):
# Parker 1979, Walder and Fowler 1994
- return K_d*v_s*c_bar[ix]*(g*(rho_s - rho_w)*d15/tau[ix])**0.5
+ #result = K_d*v_s*c_bar[ix]*(g*(rho_s - rho_w)*d15/tau[ix])**0.5
+
+ # Carter et al. 2017
+ result = K_d*v_s/alpha*c_bar[ix]*(g*(rho_s - rho_w)*d15/tau[ix])**0.5
+
+ print('tau[{}] = {}'.format(ix, tau[ix]))
+ print('c_bar[{}] = {}'.format(ix, c_bar[ix]))
+ print('e_dot[{}] = {}'.format(ix, e_dot[ix]))
+ print('d_dot[{}] = {}'.format(ix, result))
+ print('')
+
+ return result
+
+def channel_deposition_rate_kernel_ng(c_bar, ix):
+ # Ng 2000
+ h = W[ix]/2.*numpy.tan(numpy.deg2rad(theta))
+ epsilon = numpy.sqrt((psi[ix] - (P_c[ix] - P_c[ix - 1])/ds[ix])\
+ /(rho_w*froude))*h**(3./2.)
+ return v_s/epsilon*c_bar[ix]
def channel_deposition_rate(tau, c_bar, d_dot, Ns):
# Parker 1979, Walder and Fowler 1994
# Find deposition rate from upstream to downstream, margin at is=0
+
+ print("\n## Before loop:")
+ print(c_bar)
+ print(d_dot)
+ print('')
+
+
# No sediment deposition at upstream end
c_bar[0] = 0.
d_dot[0] = 0.
for ix in numpy.arange(1, Ns - 1):
# Net erosion in upstream cell
- c_bar[ix] += numpy.maximum((e_dot[ix - 1] - d_dot[ix - 1])*dt, 0.)
+ #c_bar[ix] = numpy.maximum((e_dot[ix-1] - d_dot[ix-1])*dt*ds[ix-1], 0.)
+ c_bar[ix] = numpy.maximum(
+ W[ix - 1]*ds[ix - 1]*rho_s/rho_w*
+ (e_dot[ix - 1] - d_dot[ix - 1])/Q[ix - 1]
+ , 0.)
+
+ #d_dot[ix] = channel_deposition_rate_kernel(tau, c_bar, ix)
+ d_dot[ix] = channel_deposition_rate_kernel_ng(c_bar, ix)
+
+
+ print("\n## After loop:")
+ print(c_bar)
+ print(d_dot)
+ print('')
- d_dot[ix] = channel_deposition_rate_kernel(tau, c_bar, ix)
return d_dot, c_bar
t@@ -260,7 +302,6 @@ def plot_state(step, time):
def find_new_timestep(ds, Q, S):
# Determine the timestep using the Courant-Friedrichs-Lewy condition
- safety = 0.2
dt = safety*numpy.minimum(60.*60.*24., numpy.min(numpy.abs(ds/(Q*S))))
if dt < 1.0:
t@@ -299,6 +340,8 @@ plot_state(-1, 0.0)
time = 0.; step = 0
while time <= t_end:
+ #print('@ @ @ step ' + str(step))
+
dt = find_new_timestep(ds, Q, S)
print_status_to_stdout(time, dt)
t@@ -333,8 +376,10 @@ while time <= t_end:
plot_state(step, time)
+ #import ipdb; ipdb.set_trace()
if step > 0:
break
+
# Update time
time += dt
step += 1
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.