Introduction
Introduction Statistics Contact Development Disclaimer Help
tshow time info to stdout - granular-channel-hydro - subglacial hydrology model…
git clone git://src.adamsgaard.dk/granular-channel-hydro
Log
Files
Refs
README
LICENSE
---
commit e1e23e617f46e30a99b7ef75ff8010c3813ab1b2
parent d2b05a1797b69a2d3cad693f89c9b9560e825ea2
Author: Anders Damsgaard Christensen <[email protected]>
Date: Wed, 1 Feb 2017 13:53:51 -0800
show time info to stdout
Diffstat:
M 1d-test.py | 64 +++++++++++++++++++----------…
1 file changed, 39 insertions(+), 25 deletions(-)
---
diff --git a/1d-test.py b/1d-test.py
t@@ -14,33 +14,29 @@
import numpy
import matplotlib.pyplot as plt
-
+import sys
## Model parameters
-Ns = 10 # Number of nodes [-]
+#Ns = 10 # Number of nodes [-]
+Ns = 25 # Number of nodes [-]
Ls = 100e3 # Model length [m]
-#dt = 24.*60.*60. # Time step length [s]
-#dt = 1. # Time step length [s]
-dt = 60.*60. # Time step length [s]
-#t_end = 24.*60.*60.*7. # Total simulation time [s]
-t_end = dt*4
-tol_Q = 1e-3 # Tolerance criteria for the normalized max. residual for Q
-#tol_N_c = 1e-3 # Tolerance criteria for the normalized max. residual for N_c
-tol_P_c = 1e-3 # Tolerance criteria for the normalized max. residual for P_c
-max_iter = 1e4 # Maximum number of solver iterations before failure
-output_convergence = True
+t_end = 24.*60.*60.*7. # Total simulation time [s]
+tol_Q = 1e-3 # Tolerance criteria for the normalized max. residual for Q
+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
# Physical parameters
rho_w = 1000. # Water density [kg/m^3]
rho_i = 910. # Ice density [kg/m^3]
-rho_s = 2700. # Sediment density [kg/m^3]
+rho_s = 2600. # Sediment density [kg/m^3]
g = 9.8 # Gravitational acceleration [m/s^2]
theta = 30. # Angle of internal friction in sediment [deg]
# Water source term [m/s]
#m_dot = 7.93e-11
-#m_dot = 5.79e-5
-m_dot = 4.5e-8
+m_dot = 5.79e-5
+#m_dot = 4.5e-8
# Walder and Fowler 1994 sediment transport parameters
K_e = 0.1 # Erosion constant [-], disabled when 0.0
t@@ -64,7 +60,7 @@ c_1 = -0.118 # [m/kPa]
c_2 = 4.60 # [m]
# Minimum channel size [m^2], must be bigger than 0
-S_min = 1e-5
+S_min = 1e-2
t@@ -75,7 +71,8 @@ ds = s[1:] - s[:-1]
# Ice thickness and bed topography
#H = 6.*(numpy.sqrt(Ls - s + 5e3) - numpy.sqrt(5e3)) + 1.0
-H = 0.6*(numpy.sqrt(Ls - s + 5e3) - numpy.sqrt(5e3)) + 1.0
+#H = 0.6*(numpy.sqrt(Ls - s + 5e3) - numpy.sqrt(5e3)) + 1.0
+H = 1.*(numpy.sqrt(Ls - s + 5e3) - numpy.sqrt(5e3)) + 1.0
b = numpy.zeros_like(H)
N = H*0.1*rho_i*g # Initial effective stress [Pa]
t@@ -223,7 +220,7 @@ def pressure_solver(psi, F, Q, S):
#import ipdb; ipdb.set_trace()
return P_c
-def plot_state(step):
+def plot_state(step, time):
# Plot parameters along profile
plt.plot(s_c/1000., S, '-k', label='$S$')
plt.plot(s_c/1000., S_max, '--k', label='$S_{max}$')
t@@ -234,6 +231,7 @@ def plot_state(step):
#plt.plot(s, b, ':k', label='$b$')
plt.legend()
plt.xlabel('Distance from terminus [km]')
+ plt.title('Day: {:.2}'.format(time/(60.*60.*24.)))
plt.tight_layout()
if step == -1:
plt.savefig('chan-0.init.pdf')
t@@ -241,6 +239,17 @@ def plot_state(step):
plt.savefig('chan-' + str(step) + '.pdf')
plt.clf()
+def find_new_timestep(ds, Q, S):
+ # Determine the timestep using the Courant-Friedrichs-Lewy condition
+ return numpy.minimum(60.*60.*24., numpy.min(numpy.abs(ds/(Q*S))))
+
+def print_status_to_stdout(time, dt):
+ sys.stdout.write('\rt = {:.2} s or {:.4} d, dt = {:.2} s'.format(\
+ time,
+ time/(60.*6…
+ dt))
+ sys.stdout.flush()
+
s_c = avg_midpoint(s) # Channel section midpoint coordinates [m]
## Initialization
t@@ -261,13 +270,18 @@ psi = -rho_i*g*gradient(H, s) - (rho_w - rho_i)*g*gradie…
# Prepare figure object for plotting during the simulation
fig = plt.figure('channel', figsize=(3.3, 2.))
-plot_state(-1)
+plot_state(-1, 0.0)
#import ipdb; ipdb.set_trace()
+
## Time loop
-t = 0.; step = 0
-while t < t_end:
+time = 0.; step = 0
+while time < t_end:
+
+ dt = find_new_timestep(ds, Q, S)
+
+ print_status_to_stdout(time, dt)
# Find average shear stress from water flux for each channel segment
tau = channel_shear_stress(Q, S)
t@@ -299,12 +313,12 @@ while t < t_end:
#import ipdb; ipdb.set_trace()
- plot_state(step)
-
- #find_new_timestep(
+ plot_state(step, time)
# Update time
- t += dt
+ time += dt
step += 1
#print(step)
#break
+
+print('')
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.