Granular.jl

Julia package for granular dynamics simulation
git clone git://src.adamsgaard.dk/Granular.jl
Log | Files | Refs | README | LICENSE

commit daaeb360962b25bc3312ae43f07fb6d445f94b1d
parent 8b1cd340b84b6f8c0481f128f91a054872906aa8
Author: Anders Damsgaard <andersd@riseup.net>
Date:   Fri, 17 Nov 2017 14:08:56 -0500

fix GSD plotting when there is no size variance and add option to specify gnuplot terminal

Diffstat:
Msrc/grain.jl | 34++++++++++++++++++++--------------
Mtest/grain.jl | 12++++++++----
2 files changed, 28 insertions(+), 18 deletions(-)

diff --git a/src/grain.jl b/src/grain.jl @@ -744,7 +744,8 @@ function plotGrainSizeDistribution(simulation::Simulation; nbins::Int=12, size_type::String = "contact", figsize::Tuple = (6,4), - filetype::String = "png", + filetype::String = "pdf", + gnuplot_terminal::String = "pdfcairo", verbose::Bool = true, skip_fixed::Bool = true, log_y::Bool = false, @@ -772,14 +773,28 @@ function plotGrainSizeDistribution(simulation::Simulation; writedlm(datafile, diameters) gnuplotscript = Base.Filesystem.tempname() + #if maximum(diameters) ≈ minimum(diameters) + #info("Overriding `nbins = $nbins` -> `nbins = 1`.") + #nbins = 1 + #end + open(gnuplotscript, "w") do f write(f, """#!/usr/bin/env gnuplot - set out "$(filename)" - set xlabel "Diameter [m]" + set term $gnuplot_terminal size 12 cm,8 cm + set out "$(filename)"\n""") + if log_y + write(f, "set logscale y\n") + end + write(f, """set xlabel "Diameter [m]" set ylabel "Count [-]" - set style histogram - plot "$(datafile)" + binwidth = $((maximum(diameters) - minimum(diameters)+1e-7)/nbins) + binstart = $(minimum(diameters)) + set boxwidth 1.0*binwidth + set style fill solid 0.5 + set key off + hist = 'u (binwidth*(floor((\$1-binstart)/binwidth)+0.5)+binstart):(1.0) smooth freq w boxes' + plot "$(datafile)" i 0 @hist ls 1 """) end @@ -791,15 +806,6 @@ function plotGrainSizeDistribution(simulation::Simulation; end end - - xlabel = "Diameter [m]" - ylabel = "Count [-]" - if log_y - error("Logarithmic axis scaling isn't yet supported with GR histograms") - # try anyway - GR.setscale(GR.OPTION_Y_LOG) - GR.setscale(GR.OPTION_FLIP_X) - end if verbose info(filename) end diff --git a/test/grain.jl b/test/grain.jl @@ -32,14 +32,18 @@ Granular.compareGrains(sim.grains[1], sim.grains[2]) info("Testing GSD plotting ") Granular.plotGrainSizeDistribution(sim) +@test isfile("test-grain-size-distribution.pdf") +rm("test-grain-size-distribution.pdf") +Granular.plotGrainSizeDistribution(sim, filetype="png", + gnuplot_terminal="pngcairo") @test isfile("test-grain-size-distribution.png") rm("test-grain-size-distribution.png") Granular.plotGrainSizeDistribution(sim, skip_fixed=false) -@test isfile("test-grain-size-distribution.png") -rm("test-grain-size-distribution.png") +@test isfile("test-grain-size-distribution.pdf") +rm("test-grain-size-distribution.pdf") Granular.plotGrainSizeDistribution(sim, size_type="areal") -@test isfile("test-grain-size-distribution.png") -rm("test-grain-size-distribution.png") +@test isfile("test-grain-size-distribution.pdf") +rm("test-grain-size-distribution.pdf") @test_throws ErrorException Granular.plotGrainSizeDistribution(sim, size_type="asdf") info("Testing external body force routines")