Granular.jl

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

commit dec15a9e0cb198b20df8eaab444a6d03d2a1a80e
parent 764f9a160974b94ffec0b0572a0bcdc2cbc49336
Author: Anders Damsgaard <andersd@riseup.net>
Date:   Mon,  1 May 2017 10:28:19 -0400

add function for cell center coordinates, add tests

Diffstat:
Mexamples/nares_strait.jl | 18+++++++++++++++---
Msrc/grid.jl | 22++++++++++++++++++++++
Mtest/grid.jl | 8++++++++
3 files changed, 45 insertions(+), 3 deletions(-)

diff --git a/examples/nares_strait.jl b/examples/nares_strait.jl @@ -81,7 +81,8 @@ noise_amplitude = floe_padding Base.Random.srand(1) for y in (L[2] - r - noise_amplitude):(-(2.*r + floe_padding)):((L[2] - Ly_constriction)/2. + Ly_constriction) - for x in (Lx*.125):(2.*r + floe_padding):(Lx*.875 - 2.*r) + for x in (r + noise_amplitude):(2.*r + floe_padding):(Lx - r - + noise_amplitude) if iy % 2 == 0 x += 1.5*r end @@ -104,8 +105,19 @@ end n = length(sim.ice_floes) - n_walls info("added $(n) ice floes") -# Run temporal loop +# Set temporal parameters SeaIce.setTotalTime!(sim, 24.*60.*60.) SeaIce.setOutputFileInterval!(sim, 60.) SeaIce.setTimeStep!(sim) -SeaIce.run!(sim, status_interval=1) + +# Run simulation for 10 time steps, then add new icefloes from the top +while sim.time < sim.time_total + for it=1:10 + SeaIce.run!(sim, status_interval=1, single_step=true) + end + for i=1:size(sim.ocean.xh, 1) + if sim.ocean.ice_floe_list[i, end] == [] + SeaIce.addIceFloeCylindrical(sim, [x, y], r, h, verbose=false) + end + end +end diff --git a/src/grid.jl b/src/grid.jl @@ -145,8 +145,15 @@ end export getCellCornerCoordinates """ + getCellCornerCoordinates(ocean, i, j) + Returns ocean-grid corner coordinates in the following order (south-west corner, south-east corner, north-east corner, north-west corner). + +# Arguments +* `ocean::Ocean`: ocean object containing grid. +* `i::Int`: x-index of cell. +* `j::Int`: y-index of cell. """ function getCellCornerCoordinates(ocean::Ocean, i::Int, j::Int) sw = [ocean.xq[ i, j], ocean.yq[ i, j]] @@ -156,6 +163,21 @@ function getCellCornerCoordinates(ocean::Ocean, i::Int, j::Int) return sw, se, ne, nw end +export getCellCenterCoordinates +""" + getCellCenterCoordinates(ocean, i, j) + +Returns ocean-grid center coordinates (h-point). + +# Arguments +* `ocean::Ocean`: ocean object containing grid. +* `i::Int`: x-index of cell. +* `j::Int`: y-index of cell. +""" +function getCellCenterCoordinates(ocean::Ocean, i::Int, j::Int) + return [ocean.xh[i, j], ocean.yh[i, j]] +end + export areaOfTriangle "Returns the area of an triangle with corner coordinates `a`, `b`, and `c`." function areaOfTriangle(a::Array{float, 1}, diff --git a/test/grid.jl b/test/grid.jl @@ -8,6 +8,14 @@ info("#### $(basename(@__FILE__)) ####") ocean = SeaIce.readOceanNetCDF("Baltic/00010101.ocean_month.nc", "Baltic/ocean_hgrid.nc") +info("Testing coordinate retrieval functions") +sw, se, ne, nw = SeaIce.getCellCornerCoordinates(ocean, 1, 1) +@test sw ≈ [6., 53.] +@test se ≈ [7., 53.] +@test ne ≈ [7., 54.] +@test nw ≈ [6., 54.] +@test SeaIce.getCellCenterCoordinates(ocean, 1, 1) ≈ [6.5, 53.5] + info("Testing area-determination methods") @test SeaIce.areaOfTriangle([0., 0.], [1., 0.], [0., 1.]) ≈ .5 @test SeaIce.areaOfTriangle([1., 0.], [0., 1.], [0., 0.]) ≈ .5