commit 9377d1980d99d3dcf6b1a344a58e6e3233a17a49
parent 3b72b5d77be841aba8b0a2080279f86437a09da4
Author: Anders Damsgaard <andersd@riseup.net>
Date: Wed, 1 Nov 2017 15:04:16 -0400
add fields for grid boundary conditions
Diffstat:
5 files changed, 41 insertions(+), 22 deletions(-)
diff --git a/src/atmosphere.jl b/src/atmosphere.jl
@@ -17,6 +17,8 @@ function createEmptyAtmosphere()
Array{Vector{Int}}(1, 1),
+ 0, 0, 0, 0,
+
false)
end
@@ -127,6 +129,7 @@ function createRegularAtmosphereGrid(n::Vector{Int},
zl,
u, v,
Array{Array{Int, 1}}(size(xh, 1), size(xh, 2)),
+ 0, 0, 0, 0,
false)
end
diff --git a/src/contact_search.jl b/src/contact_search.jl
@@ -3,8 +3,8 @@ export findContacts!
"""
findContacts!(simulation[, method])
-Top-level function to perform an inter-grain contact search, based on ice
-floe linear positions and contact radii.
+Top-level function to perform an inter-grain contact search, based on grain
+linear positions and contact radii.
The simplest contact search algorithm (`method="all to all"`) is the most
computationally expensive (O(n^2)). The method "ocean grid" bins the grains
diff --git a/src/datatypes.jl b/src/datatypes.jl
@@ -188,7 +188,14 @@ mutable struct Ocean
h::Array{Float64, 4}
e::Array{Float64, 4}
+ # Grains in grid cells
grain_list::Array{Vector{Int}, 2}
+
+ # Boundary conditions for grains
+ bc_west::Integer
+ bc_south::Integer
+ bc_east::Integer
+ bc_north::Integer
end
#=
@@ -245,6 +252,12 @@ mutable struct Atmosphere
grain_list::Array{Vector{Int}, 2}
+ # Boundary conditions for grains
+ bc_west::Integer
+ bc_south::Integer
+ bc_east::Integer
+ bc_north::Integer
+
# If true the grid positions are identical to the ocean grid
collocated_with_ocean_grid::Bool
end
diff --git a/src/ocean.jl b/src/ocean.jl
@@ -17,7 +17,8 @@ function createEmptyOcean()
zeros(1,1,1,1),
zeros(1,1,1,1),
zeros(1,1,1,1),
- Array{Array{Int, 1}}(1, 1))
+ Array{Array{Int, 1}}(1, 1),
+ 0, 0, 0, 0)
end
export readOceanNetCDF
@@ -59,7 +60,8 @@ function readOceanNetCDF(velocity_file::String, grid_file::String)
v,
h,
e,
- Array{Array{Int, 1}}(size(xh, 1), size(xh, 2))
+ Array{Array{Int, 1}}(size(xh, 1), size(xh, 2)),
+ 0, 0, 0, 0
)
return ocean
end
@@ -239,7 +241,8 @@ function createRegularOceanGrid(n::Array{Int, 1},
xh, yh,
zl, zi,
u, v, h, e,
- Array{Array{Int, 1}}(size(xh, 1), size(xh, 2)))
+ Array{Array{Int, 1}}(size(xh, 1), size(xh, 2)),
+ 0, 0, 0, 0)
end
export addOceanDrag!
diff --git a/test/memory-management.jl b/test/memory-management.jl
@@ -6,13 +6,13 @@ info("Testing memory footprint of Granular types")
sim = Granular.createSimulation()
empty_sim_size = 96
-empty_sim_size_recursive = 472
+empty_sim_size_recursive = 544
@test sizeof(sim) == empty_sim_size
@test Base.summarysize(sim) == empty_sim_size_recursive
-size_per_icefloe = 352
-size_per_icefloe_recursive = 1136
+size_per_grain = 352
+size_per_grain_recursive = 1136
info("Testing memory usage when adding grains")
for i=1:100
@@ -22,17 +22,17 @@ for i=1:100
@test sizeof(sim.grains) == sizeof(Int)*i
@test sizeof(sim.grains[:]) == sizeof(Int)*i
- @test Base.summarysize(sim.grains) == size_per_icefloe_recursive*i +
+ @test Base.summarysize(sim.grains) == size_per_grain_recursive*i +
sizeof(Int)*i
@test Base.summarysize(sim) == empty_sim_size_recursive + sizeof(Int)*i +
- size_per_icefloe_recursive*i
+ size_per_grain_recursive*i
- @test Base.summarysize(sim.grains[i]) == size_per_icefloe_recursive
+ @test Base.summarysize(sim.grains[i]) == size_per_grain_recursive
for j=1:i
- @test sizeof(sim.grains[j]) == size_per_icefloe
- @test Base.summarysize(sim.grains[j]) == size_per_icefloe_recursive
+ @test sizeof(sim.grains[j]) == size_per_grain
+ @test Base.summarysize(sim.grains[j]) == size_per_grain_recursive
end
end
@@ -60,7 +60,7 @@ for i=1:10
@test sizeof(sim) == empty_sim_size
@test Base.summarysize(sim) == empty_sim_size_recursive +
sizeof(Int)*length(sim.grains) +
- size_per_icefloe_recursive*length(sim.grains)
+ size_per_grain_recursive*length(sim.grains)
end
info("Check memory when stepping time with two separate grains")
@@ -73,7 +73,7 @@ for i=1:10
@test sizeof(sim) == empty_sim_size
@test Base.summarysize(sim) == empty_sim_size_recursive +
sizeof(Int)*length(sim.grains) +
- size_per_icefloe_recursive*length(sim.grains)
+ size_per_grain_recursive*length(sim.grains)
end
info("Check memory when stepping time with two interacting grains (all to all)")
@@ -86,7 +86,7 @@ for i=1:10
@test sizeof(sim) == empty_sim_size
@test Base.summarysize(sim) == empty_sim_size_recursive +
sizeof(Int)*length(sim.grains) +
- size_per_icefloe_recursive*length(sim.grains)
+ size_per_grain_recursive*length(sim.grains)
end
info("Check memory when stepping time with two interacting grains (cell sorting)")
@@ -124,11 +124,11 @@ Granular.setTotalTime!(sim, 10.0)
Granular.setTimeStep!(sim, epsilon=0.07, verbose=false)
Granular.run!(sim, single_step=true, verbose=false)
original_sim_size_recursive = Base.summarysize(sim)
-original_icefloes_size_recursive = Base.summarysize(sim.grains)
+original_grains_size_recursive = Base.summarysize(sim.grains)
original_ocean_size_recursive = Base.summarysize(sim.ocean)
original_atmosphere_size_recursive = Base.summarysize(sim.atmosphere)
Granular.run!(sim, verbose=false)
-@test Base.summarysize(sim.grains) == original_icefloes_size_recursive
+@test Base.summarysize(sim.grains) == original_grains_size_recursive
@test Base.summarysize(sim.ocean) == original_ocean_size_recursive
@test Base.summarysize(sim.atmosphere) == original_atmosphere_size_recursive
@test Base.summarysize(sim) == original_sim_size_recursive
@@ -142,11 +142,11 @@ Granular.setTotalTime!(sim, 10.0)
Granular.setTimeStep!(sim, epsilon=0.07, verbose=false)
Granular.run!(sim, single_step=true, verbose=false)
original_sim_size_recursive = Base.summarysize(sim)
-original_icefloes_size_recursive = Base.summarysize(sim.grains)
+original_grains_size_recursive = Base.summarysize(sim.grains)
original_ocean_size_recursive = Base.summarysize(sim.ocean)
original_atmosphere_size_recursive = Base.summarysize(sim.atmosphere)
Granular.run!(sim, verbose=false)
-@test Base.summarysize(sim.grains) == original_icefloes_size_recursive
+@test Base.summarysize(sim.grains) == original_grains_size_recursive
@test Base.summarysize(sim.ocean) == original_ocean_size_recursive
@test Base.summarysize(sim.atmosphere) == original_atmosphere_size_recursive
@test Base.summarysize(sim) == original_sim_size_recursive
@@ -161,11 +161,11 @@ Granular.setTotalTime!(sim, 10.0)
Granular.setTimeStep!(sim, epsilon=0.07, verbose=false)
Granular.run!(sim, single_step=true, verbose=false)
original_sim_size_recursive = Base.summarysize(sim)
-original_icefloes_size_recursive = Base.summarysize(sim.grains)
+original_grains_size_recursive = Base.summarysize(sim.grains)
original_ocean_size_recursive = Base.summarysize(sim.ocean)
original_atmosphere_size_recursive = Base.summarysize(sim.atmosphere)
Granular.run!(sim, verbose=false)
-@test Base.summarysize(sim.grains) == original_icefloes_size_recursive
+@test Base.summarysize(sim.grains) == original_grains_size_recursive
@test Base.summarysize(sim.ocean) == original_ocean_size_recursive
@test Base.summarysize(sim.atmosphere) == original_atmosphere_size_recursive
@test Base.summarysize(sim) == original_sim_size_recursive