tkeep grid BCs during resize, fix plotting in shear example - Granular.jl - Julia package for granular dynamics simulation
 (HTM) git clone git://src.adamsgaard.dk/Granular.jl
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 44d111b2b68c2f33de09016bb1d8cc4deb7af478
 (DIR) parent d0323bbd5778d9fa552a76d59ea3b5cf7a2496cd
 (HTM) Author: Anders Damsgaard <andersd@riseup.net>
       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(-)
       ---
 (DIR) 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_stress)) *
            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()
        
 (DIR) 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
        
 (DIR) diff --git a/src/grid.jl b/src/grid.jl
       t@@ -928,17 +928,26 @@ function fitGridToGrains!(simulation::Simulation, grid::Any;
                      "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_west,
       +                                                            bc_south = grid.bc_south,
       +                                                            bc_east  = grid.bc_east,
       +                                                            bc_north = grid.bc_north)
            end
        
            if verbose
 (DIR) 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!