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:
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