tkeep grid BCs during resize, fix plotting in shear example - Granular.jl - Jul… | |
git clone git://src.adamsgaard.dk/Granular.jl | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 44d111b2b68c2f33de09016bb1d8cc4deb7af478 | |
parent d0323bbd5778d9fa552a76d59ea3b5cf7a2496cd | |
Author: Anders Damsgaard <[email protected]> | |
Date: Thu, 16 Nov 2017 07:55:06 -0800 | |
keep grid BCs during resize, fix plotting in shear example | |
Diffstat: | |
M examples/shear.jl | 18 ++++++++++-------- | |
M src/atmosphere.jl | 8 ++++++-- | |
M src/grid.jl | 13 +++++++++++-- | |
M src/ocean.jl | 8 ++++++-- | |
4 files changed, 33 insertions(+), 14 deletions(-) | |
--- | |
diff --git a/examples/shear.jl b/examples/shear.jl | |
t@@ -25,7 +25,8 @@ Granular.fitGridToGrains!(sim, sim.ocean) | |
# Make the top and bottom boundaries impermeable, and the side boundaries | |
# periodic, which will come in handy during shear | |
-Granular.setGridBoundaryConditions!(sim.ocean, "impermeable", "north south") | |
+Granular.setGridBoundaryConditions!(sim.ocean, "impermeable", "north south", | |
+ verbose=false) | |
Granular.setGridBoundaryConditions!(sim.ocean, "periodic", "east west") | |
# Add gravitational acceleration to all grains and disable ocean-grid drag | |
t@@ -131,10 +132,9 @@ defined_normal_stress = ones(length(effective_normal_stre… | |
Granular.getWallNormalStress(sim, stress_type="effective") | |
PyPlot.subplot(211) | |
PyPlot.subplots_adjust(hspace=0.0) | |
-ax1 = gca() | |
+ax1 = PyPlot.gca() | |
PyPlot.setp(ax1[:get_xticklabels](),visible=false) # Disable x tick labels | |
PyPlot.plot(time, compaction) | |
-PyPlot.xlabel("Time [s]") | |
PyPlot.ylabel("Top wall height [m]") | |
PyPlot.subplot(212, sharex=ax1) | |
PyPlot.plot(time, defined_normal_stress) | |
t@@ -242,26 +242,28 @@ Granular.render(sim, trim=false) | |
# Plot time vs. shear stress and dilation | |
PyPlot.subplot(211) | |
PyPlot.subplots_adjust(hspace=0.0) | |
-ax1 = gca() | |
+ax1 = PyPlot.gca() | |
PyPlot.setp(ax1[:get_xticklabels](),visible=false) # Disable x tick labels | |
PyPlot.plot(time, shear_stress) | |
+PyPlot.ylabel("Shear stress [Pa]") | |
PyPlot.subplot(212, sharex=ax1) | |
PyPlot.plot(time, dilation) | |
PyPlot.xlabel("Time [s]") | |
-PyPlot.ylabel("Shear stress [Pa]") | |
+PyPlot.ylabel("Volumetric strain [-]") | |
PyPlot.savefig(sim.id * "-time_vs_shear-stress.pdf") | |
PyPlot.clf() | |
# Plot shear strain vs. shear stress and dilation | |
PyPlot.subplot(211) | |
PyPlot.subplots_adjust(hspace=0.0) | |
-ax1 = gca() | |
+ax1 = PyPlot.gca() | |
PyPlot.setp(ax1[:get_xticklabels](),visible=false) # Disable x tick labels | |
-PyPlot.plot(time, shear_stress) | |
+PyPlot.plot(shear_strain, shear_stress) | |
+PyPlot.ylabel("Shear stress [Pa]") | |
PyPlot.subplot(212, sharex=ax1) | |
PyPlot.plot(shear_strain, dilation) | |
PyPlot.xlabel("Shear strain [-]") | |
-PyPlot.ylabel("Shear stress [Pa]") | |
+PyPlot.ylabel("Volumetric strain [-]") | |
PyPlot.savefig(sim.id * "-shear-strain_vs_shear-stress.pdf") | |
PyPlot.clf() | |
diff --git a/src/atmosphere.jl b/src/atmosphere.jl | |
t@@ -110,7 +110,11 @@ function createRegularAtmosphereGrid(n::Vector{Int}, | |
L::Vector{Float64}; | |
origo::Vector{Float64} = zeros(2), | |
time::Array{Float64, 1} = zeros(1), | |
- name::String = "unnamed") | |
+ name::String = "unnamed", | |
+ bc_west::Integer = 1, | |
+ bc_south::Integer = 1, | |
+ bc_east::Integer = 1, | |
+ bc_north::Integer = 1) | |
xq = repmat(linspace(origo[1], origo[1] + L[1], n[1] + 1), 1, n[2] + 1) | |
yq = repmat(linspace(origo[2], origo[2] + L[2], n[2] + 1)', n[1] + 1, 1) | |
t@@ -133,7 +137,7 @@ function createRegularAtmosphereGrid(n::Vector{Int}, | |
zl, | |
u, v, | |
Array{Array{Int, 1}}(size(xh, 1), size(xh, 2)), | |
- 1, 1, 1, 1, | |
+ bc_west, bc_south, bc_east, bc_north) | |
false) | |
end | |
diff --git a/src/grid.jl b/src/grid.jl | |
t@@ -928,17 +928,26 @@ function fitGridToGrains!(simulation::Simulation, grid::… | |
"Use all-to-all contact search instead.") | |
end | |
+ | |
if typeof(grid) == Ocean | |
simulation.ocean = createRegularOceanGrid(vcat(n, 1), vcat(L, 1.), | |
origo=[min_x, min_y], | |
- time=[0.], name="fitted") | |
+ time=[0.], name="fitted", | |
+ bc_west = grid.bc_west, | |
+ bc_south = grid.bc_south, | |
+ bc_east = grid.bc_east, | |
+ bc_north = grid.bc_north) | |
elseif typeof(grid) == Atmosphere | |
simulation.atmosphere = createRegularAtmosphereGrid(vcat(n, 1), | |
vcat(L, 1.), | |
origo=[min_x, | |
min_y], | |
time=[0.], | |
- name="fitted") | |
+ name="fitted", | |
+ bc_west = grid.bc… | |
+ bc_south = grid.bc… | |
+ bc_east = grid.bc… | |
+ bc_north = grid.bc… | |
end | |
if verbose | |
diff --git a/src/ocean.jl b/src/ocean.jl | |
t@@ -220,7 +220,11 @@ function createRegularOceanGrid(n::Array{Int, 1}, | |
L::Vector{Float64}; | |
origo::Vector{Float64} = zeros(2), | |
time::Vector{Float64} = zeros(1), | |
- name::String = "unnamed") | |
+ name::String = "unnamed", | |
+ bc_west::Integer = 1, | |
+ bc_south::Integer = 1, | |
+ bc_east::Integer = 1, | |
+ bc_north::Integer = 1) | |
xq = repmat(linspace(origo[1], origo[1] + L[1], n[1] + 1), 1, n[2] + 1) | |
yq = repmat(linspace(origo[2], origo[2] + L[2], n[2] + 1)', n[1] + 1, 1) | |
t@@ -246,7 +250,7 @@ function createRegularOceanGrid(n::Array{Int, 1}, | |
zl, zi, | |
u, v, h, e, | |
Array{Array{Int, 1}}(size(xh, 1), size(xh, 2)), | |
- 1, 1, 1, 1) | |
+ bc_west, bc_south, bc_east, bc_north) | |
end | |
export addOceanDrag! |