commit 95cdb6dd109d1a82e9ae6d0f20e46d2929b5dd80
parent c1aa4dce15eba37cc67913aa232337e9205feb70
Author: Anders Damsgaard <anders@adamsgaard.dk>
Date: Fri, 5 Apr 2019 09:15:14 +0200
Add Dirichlet BC and improve BC calls
Diffstat:
1 file changed, 46 insertions(+), 12 deletions(-)
diff --git a/1d_fd_simple_shear.jl b/1d_fd_simple_shear.jl
@@ -90,10 +90,27 @@ function g_local(p, μ)
end
## Update ghost nodes for g from current values
-## BC: neumann (dg/dx = 0)
-function g_set_bc_neumann(g_ghost)
- g_ghost[1] = g_ghost[2]
- g_ghost[end] = g_ghost[end-1]
+## BC: Neumann (dg/dx = 0)
+function set_bc_neumann(g_ghost, boundary)
+ if boundary == "-z"
+ g_ghost[1] = g_ghost[2]
+ elseif boundary == "+z"
+ g_ghost[end] = g_ghost[end-1]
+ else
+ @error "boundary '$boundary' not understood"
+ end
+end
+
+## Update ghost nodes for g from current values
+## BC: Dirichlet (g = 0)
+function set_bc_dirichlet(g_ghost, boundary, value=0.0)
+ if boundary == "-z"
+ g_ghost[1] = value
+ elseif boundary == "+z"
+ g_ghost[end] = value
+ else
+ @error "boundary '$boundary' not understood"
+ end
end
## Compute shear stress from velocity gradient using finite differences
@@ -158,7 +175,8 @@ function implicit_1d_jacobian_poisson_solver(g, p, μ, Δz,
for iter=1:max_iter
- g_set_bc_neumann(g)
+ set_bc_neumann(g, "+z")
+ set_bc_dirichlet(g, "-z")
if verbose
println("g after BC: ")
println(g)
@@ -215,23 +233,39 @@ init_μ(μ_wall, ϕ, ρ_s, G, z, P_wall) =
# Main
+PyPlot.clf()
for P_wall in P_wall_
- ## Set velocity BCs
- v_x[1] = v_x_bot
- ## Calculate stressses
+ ## calculate stresses
p = p_lithostatic(P_wall, z)
μ = init_μ(μ_wall, ϕ, ρ_s, G, z, P_wall)
+ ## solve for fluidity
implicit_1d_jacobian_poisson_solver(g_ghost, p, μ, Δz)
+ ## calculate shear velocitiesj
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")
+
+ ## plot results
+ P = Int(round(P_wall/1e3))
+ PyPlot.plot(v_x/maximum(v_x), z, "+-", label="\$P_{wall}\$ = $P kPa")
+ # plot_profile(z, v_x, "Shear velocity, \$v_x\$ [m/s]",
+ # "1d_fd_simple_shear_v_x_P$(P)kPa.png")
+ # plot_profile(z, μ, "Stress ratio, μ [-]",
+ # "1d_fd_simple_shear_mu_P$(P)kPa.png")
+ # plot_profile(z, p, "Normal stress, \$p\$ [Pa]",
+ # "1d_fd_simple_shear_p_P$(P)kPa.png")
+ # plot_profile(z, g_ghost[2:end-1], "Fluidity, \$g\$",
+ # "1d_fd_simple_shear_g_P$(P)kPa.png")
end
+PyPlot.xlabel("Normalized shear displacement, [m]")
+PyPlot.ylabel("Vertical position, \$z\$ [m]")
+PyPlot.legend()
+PyPlot.tight_layout()
+PyPlot.savefig("1d_fd_simple_shear_v_x.png")
+PyPlot.close()
+
end # end let