1d_fd_simple_shear_transient

transient-state continuum model for granular flows with pore-pressure dynamics
git clone git://src.adamsgaard.dk/1d_fd_simple_shear_transient
Log | Files | Refs | README | LICENSE

commit 7a535a7e52e53c1d5967573ab4b97a062198c120
parent 5e5b568af441c1457133afd2deb7e09867fbb31e
Author: Anders Damsgaard <anders@adamsgaard.dk>
Date:   Fri,  5 Apr 2019 08:47:59 +0200

Run over range of effective normal stresses

Diffstat:
M1d_fd_simple_shear.jl | 80+++++++++++++++++++++++++++++++++----------------------------------------------
1 file changed, 33 insertions(+), 47 deletions(-)

diff --git a/1d_fd_simple_shear.jl b/1d_fd_simple_shear.jl @@ -3,51 +3,54 @@ ENV["MPLBACKEND"] = "Agg" import PyPlot +let + # Simulation settings ## Gravitational acceleration magnitude -const G = 9.81 +G = 9.81 ## Wall parameters # A larger normal stress deepens the deformational depth -const P_wall = 100.0e3 # normal stress [Pa] +P_wall_ = [10, 20, 40, 60, 80, 120] .* 1e3 # normal stress [Pa] -const v_x_bot = 0.0 # bottom velocity along x [m/s] -const μ_wall = 0.40 # stress ratio at top wall +v_x_bot = 0.0 # bottom velocity along x [m/s] +μ_wall = 0.40 # stress ratio at top wall ## Nodes along z -const nz = 100 +nz = 100 ## Material properties # lower values of A mean that the velocity curve can have sharper curves, e.g. # at the transition from μ ≈ μ_s -const A = 0.48 # nonlocal amplitude [-] +A = 0.48 # nonlocal amplitude [-] # lower values of b mean larger shear velocity for a given stress ratio above # yield -const b = 0.9377 # rate dependence beyond yield [-] +b = 0.9377 # rate dependence beyond yield [-] -const μ_s = 0.3819 # static yield friction coefficient [-] -const ϕ = 0.38 # porosity [-] +μ_s = 0.3819 # static yield friction coefficient [-] +μ_s = atan(deg2rad(22.0)) # Damsgaard et al 2013 +ϕ = 0.38 # porosity [-] # lower values of d mean that the shear velocity curve can have sharper curves, # e.g. at the transition from μ ≈ μ_s -const d = 1e-3 # representative grain size [m] +#const d = 1e-3 # representative grain size [m] +d = 0.04 # representative grain size [m] - Damsgaard et al 2013 -const ρ_s = 2.485e3 # grain material density [kg/m^3] +ρ_s = 2.485e3 # grain material density [kg/m^3] ## Domain size -const origo_z = 0.0 +origo_z = 0.0 #const L_z = 20.0*d -#const L_z = 200.0*d -const L_z = 0.5 +L_z = 0.7 ## Spatial coordiantes -const z = collect(range(origo_z, L_z, length=nz)) -const Δz = z[2] - z[1] +z = collect(range(origo_z, L_z, length=nz)) +Δz = z[2] - z[1] ## Allocate other arrays μ = zero(z) # local stress ratio @@ -61,9 +64,6 @@ g_ghost = zeros(size(z)[1]+2) # local fluidity with ghost nodes ## Shear plastic strain rate (eq 2) γ_dot_p(g, μ) = g.*μ -## Stress ratio at the upper wall -#μ_wall(τ_wall, P_wall) = τ_wall.*P_wall - ## Normal stress p_lithostatic(P_wall, z) = P_wall .+ (1 - ϕ).*ρ_s.*G.*(L_z .- z) @@ -104,18 +104,6 @@ end #friction(τ, p) = τ./(p .+ 1e-16) -## Fluidity -#fluidity(p, μ, g) = 1.0./(ξ.(μ).^2.0) .* (g .- g_local.(p, μ)) - -# ## set up the forcing function for the Poisson equation. The forcing is the -# ## right-hand side of the fluidity equation -# function forcing(p, μ, g_ghost) -# return fluidity.(μ, g_ghost[2:end-1], p) -# end - -## 1d Laplacian operator (2nd order central finite difference) -#laplacian(phi, i, dx) = (phi[i-1] - 2.0*phi[i] + phi[i+1])/dx - ## A single iteration for solving a Poisson equation Laplace(phi) = f on a ## Cartesian grid. The function returns the normalized residual value function poisson_solver_1d_iteration(g_in, g_out, r_norm, @@ -205,7 +193,6 @@ end function plot_profile(z, v, label, filename) PyPlot.clf() PyPlot.plot(v, z, "+k") - #PyPlot.gca().invert_yaxis() PyPlot.xlabel(label) PyPlot.ylabel("\$z\$ [m]") PyPlot.tight_layout() @@ -219,23 +206,22 @@ init_μ(μ_wall, ϕ, ρ_s, G, z, P_wall) = # Main -## Set velocity BCs -v_x[1] = v_x_bot +for P_wall in P_wall_ + ## Set velocity BCs + v_x[1] = v_x_bot -## Calculate stressses -p = p_lithostatic(P_wall, z) -μ = init_μ(μ_wall, ϕ, ρ_s, G, z, P_wall) -#τ = shear_stress(v_x, Δz) + ## Calculate stressses + p = p_lithostatic(P_wall, z) + μ = init_μ(μ_wall, ϕ, ρ_s, G, z, P_wall) -#f = forcing(p, μ, g_ghost) -#g_ghost[2:end-1] = f + implicit_1d_jacobian_poisson_solver(g_ghost, p, μ, Δz) -implicit_1d_jacobian_poisson_solver(g_ghost, p, μ, Δz) + v_x = γ_dot_p(g_ghost[2:end-1], μ) -v_x = γ_dot_p(g_ghost[2:end-1], μ) + plot_profile(z, v_x, "Shear velocity, \$v_x\$ [m/s]", "1d_fd_simple_shear_v_x_P$(P_wall).png") + plot_profile(z, μ, "Stress ratio, μ [-]", "1d_fd_simple_shear_mu_P$(P_wall).png") + plot_profile(z, p, "Normal stress, \$p\$ [Pa]", "1d_fd_simple_shear_p_P$(P_wall).png") + plot_profile(z, g_ghost[2:end-1], "Fluidity, \$g\$", "1d_fd_simple_shear_g_P$(P_wall).png") +end -plot_profile(z, v_x, "Shear velocity, \$v_x\$ [m/s]", "1d_fd_simple_shear_v_x.png") -plot_profile(z, μ, "Stress ratio, μ [-]", "1d_fd_simple_shear_mu.png") -plot_profile(z, p, "Normal stress, \$p\$ [Pa]", "1d_fd_simple_shear_p.png") -#plot_profile(z, f, "Forcing, \$f\$", "1d_fd_simple_shear_f.png") -plot_profile(z, g_ghost[2:end-1], "Fluidity, \$g\$", "1d_fd_simple_shear_g.png") +end # end let