Introduction
Introduction Statistics Contact Development Disclaimer Help
tfix comment style - granular-channel-hydro - subglacial hydrology model for se…
git clone git://src.adamsgaard.dk/granular-channel-hydro
Log
Files
Refs
README
LICENSE
---
commit 5de4d190454b1c94b1982063f442efcfc30ee649
parent cc1ced89147308322393b4220845eabe5970e39a
Author: Anders Damsgaard <[email protected]>
Date: Fri, 3 Mar 2017 09:45:13 -0800
fix comment style
Diffstat:
M 1d-channel.py | 55 ++++++++++++++++-------------…
1 file changed, 29 insertions(+), 26 deletions(-)
---
diff --git a/1d-channel.py b/1d-channel.py
t@@ -22,7 +22,7 @@ import sys
# # Model parameters
Ns = 25 # Number of nodes [-]
-#Ls = 100e3 # Model length [m]
+# Ls = 100e3 # Model length [m]
Ls = 1e3 # Model length [m]
total_days = 60. # Total simulation time [d]
t_end = 24.*60.*60.*total_days # Total simulation time [s]
t@@ -45,11 +45,11 @@ D_s = 0.01 # Mean grain size in sand fraction (<= 2 mm)
# Water source term [m/s]
m_dot = 7.93e-11
-#m_dot = 1.0e-7
-#m_dot = 2.0e-6
-#m_dot = 4.5e-7
-#m_dot = 5.79e-5
-#m_dot = 5.0e-6
+# m_dot = 1.0e-7
+# m_dot = 2.0e-6
+# m_dot = 4.5e-7
+# m_dot = 5.79e-5
+# m_dot = 5.0e-6
# m_dot = 1.8/(1000.*365.*24.*60.*60.) # Whillan's melt rate from Joughin 2004
# Walder and Fowler 1994 sediment transport parameters
t@@ -75,8 +75,8 @@ c_1 = -0.118 # [m/kPa]
c_2 = 4.60 # [m]
# Minimum channel size [m^2], must be bigger than 0
-#S_min = 1e-1
-#S_min = 1e-2
+# S_min = 1e-1
+# S_min = 1e-2
S_min = 1.
t@@ -87,8 +87,8 @@ ds = s[1:] - s[:-1]
# Ice thickness and bed topography
H = 6.*(numpy.sqrt(Ls - s + 5e3) - numpy.sqrt(5e3)) + 1.0 # glacier
-#slope = 0.1 # Surface slope [%]
-#H = 1000. + -slope/100.*s
+# slope = 0.1 # Surface slope [%]
+# H = 1000. + -slope/100.*s
b = numpy.zeros_like(H)
t@@ -114,7 +114,7 @@ res = numpy.zeros_like(S) # Solution residual during sol…
Q_t = numpy.zeros_like(S) # Sediment flux where D <= 2 mm [m3/s]
Q_s = numpy.zeros_like(S) # Sediment flux where D <= 2 mm [m3/s]
Q_g = numpy.zeros_like(S) # Sediment flux where D > 2 mm [m3/s]
-f_s = numpy.ones_like(S)*sand_fraction # Initial sediment fraction of sand [-]
+f_s = numpy.ones_like(S)*sand_fraction # Initial sediment fraction of sand [-]
# # Helper functions
t@@ -145,8 +145,8 @@ def channel_erosion_rate(tau):
# return K_e*v_s*(tau - tau_c).clip(min=0.)/(g*(rho_s - rho_w)*d15)**(3./2)
# Carter et al 2017
- #return K_e*v_s/alpha*(tau - tau_c).clip(min=0.) / \
- #(g*(rho_s - rho_w)*d15)**(3./2.)
+ # return K_e*v_s/alpha*(tau - tau_c).clip(min=0.) / \
+ # (g*(rho_s - rho_w)*d15)**(3./2.)
# Ng 2000
return 0.092*(tau/(2.*(rho_s - rho_w)*g*d15))**(3./2.)
t@@ -219,13 +219,15 @@ def channel_sediment_flux_sand(tau, W, f_s, D_s):
I = numpy.nonzero((0.1 < f_s) & (f_s <= 0.4))
ref_shear_stress[I] = 0.88 - 2.8*(f_s[I] - 0.1)
+ # Non-dimensionalize shear stress
shields_stress = tau/((rho_s - rho_w)*g*D_s)
- #import ipdb; ipdb.set_trace()
+ # import ipdb; ipdb.set_trace()
return 11.2*f_s*W/((rho_s - rho_w)/rho_w*g) \
* (tau/rho_w)**1.5 \
* (1.0 - 0.846*numpy.sqrt(ref_shear_stress/shields_stress))**4.5
+
def channel_sediment_flux_gravel(tau, W, f_g, D_g):
# Parker 1979, Wilcock 1997, 2001, Egholm 2013
# tau: Shear stress by water flow
t@@ -241,18 +243,19 @@ def channel_sediment_flux_gravel(tau, W, f_g, D_g):
I = numpy.nonzero((0.1 < f_g) & (f_g <= 0.4))
ref_shear_stress[I] = 0.04 - 0.1*(f_g[I] - 0.1)
+ # Non-dimensionalize shear stress
shields_stress = tau/((rho_s - rho_w)*g*D_g)
# From Wilcock 2001, eq. 3
Q_g = 11.2*f_g*W/((rho_s - rho_w)/rho_w*g) \
- * (tau/rho_w)**1.5 \
- * (1.0 - 0.846*ref_shear_stress/shields_stress)**4.5
+ * (tau/rho_w)**1.5 \
+ * (1.0 - 0.846*ref_shear_stress/shields_stress)**4.5
# From Wilcock 2001, eq. 4
I = numpy.nonzero(ref_shear_stress/shields_stress < 1.)
Q_g[I] = f_g[I]*W[I]/((rho_s - rho_w)/rho_w*g) \
- * (tau[I]/rho_w)**1.5 \
- * 0.0025*(shields_stress[I]/ref_shear_stress[I])**14.2
+ * (tau[I]/rho_w)**1.5 \
+ * 0.0025*(shields_stress[I]/ref_shear_stress[I])**14.2
return Q_g
t@@ -351,8 +354,8 @@ def plot_state(step, time, S_, S_max_, title=True):
fig.set_size_inches(3.3*1.1, 3.3*1.1)
ax_Pa = plt.subplot(2, 1, 1) # axis with Pascals as y-axis unit
- #ax_Pa.plot(s_c/1000., P_c/1000., '--r', label='$P_c$')
- #ax_Pa.plot(s/1000., N/1000., '--r', label='$N$')
+ # ax_Pa.plot(s_c/1000., P_c/1000., '--r', label='$P_c$')
+ # ax_Pa.plot(s/1000., N/1000., '--r', label='$N$')
ax_Pa.plot(s_c/1000., N_c/1e6, '-k', label='$N$')
ax_Pa.plot(s_c/1000., H_c*rho_i*g/1e6, '--r', label='$P_i$')
ax_Pa.plot(s_c/1000., P_c/1e6, ':y', label='$P_c$')
t@@ -364,7 +367,7 @@ def plot_state(step, time, S_, S_max_, title=True):
plt.title('Day: {:.3}'.format(time/(60.*60.*24.)))
ax_Pa.legend(loc=2)
ax_m3s.legend(loc=4)
- #ax_Pa.set_ylabel('[kPa]')
+ # ax_Pa.set_ylabel('[kPa]')
ax_Pa.set_ylabel('[MPa]')
ax_m3s.set_ylabel('[m$^3$/s]')
t@@ -375,8 +378,8 @@ def plot_state(step, time, S_, S_max_, title=True):
# ax_m.semilogy(s_c/1000., S_max, '--k', label='$S_{max}$')
ax_ms = ax_m2.twinx()
- #ax_ms.plot(s_c/1000., e_dot, '--r', label='$\dot{e}$')
- #ax_ms.plot(s_c/1000., d_dot, ':b', label='$\dot{d}$')
+ # ax_ms.plot(s_c/1000., e_dot, '--r', label='$\dot{e}$')
+ # ax_ms.plot(s_c/1000., d_dot, ':b', label='$\dot{d}$')
ax_ms.plot(s_c/1000., Q_t, label='$Q_t$')
ax_ms.plot(s_c/1000., Q_g, label='$Q_g$')
ax_ms.plot(s_c/1000., Q_s, label='$Q_s$')
t@@ -473,12 +476,12 @@ while time <= t_end:
# TODO: Update f_s from fluxes
# Determine change in channel size for each channel segment
- #dSdt = channel_growth_rate(e_dot, d_dot, W)
+ # dSdt = channel_growth_rate(e_dot, d_dot, W)
# Use backward differences and assume dS/dt=0 in first segment
dSdt[1:] = channel_growth_rate_sedflux(Q_t, porosity, s_c)
- # Update channel cross-sectional area and width according to growth ra…
- # and size limit for each channel segment
+ # Update channel cross-sectional area and width according to growth
+ # rate and size limit for each channel segment
S, W, S_max = update_channel_size_with_limit(S, S_old, dSdt, dt, N_c)
# Find new water fluxes consistent with mass conservation and local
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.