tadd fields for grid boundary conditions - Granular.jl - Julia package for gran… | |
git clone git://src.adamsgaard.dk/Granular.jl | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 9377d1980d99d3dcf6b1a344a58e6e3233a17a49 | |
parent 3b72b5d77be841aba8b0a2080279f86437a09da4 | |
Author: Anders Damsgaard <[email protected]> | |
Date: Wed, 1 Nov 2017 15:04:16 -0400 | |
add fields for grid boundary conditions | |
Diffstat: | |
M src/atmosphere.jl | 3 +++ | |
M src/contact_search.jl | 4 ++-- | |
M src/datatypes.jl | 13 +++++++++++++ | |
M src/ocean.jl | 9 ++++++--- | |
M test/memory-management.jl | 34 ++++++++++++++++-------------… | |
5 files changed, 41 insertions(+), 22 deletions(-) | |
--- | |
diff --git a/src/atmosphere.jl b/src/atmosphere.jl | |
t@@ -17,6 +17,8 @@ function createEmptyAtmosphere() | |
Array{Vector{Int}}(1, 1), | |
+ 0, 0, 0, 0, | |
+ | |
false) | |
end | |
t@@ -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 | |
t@@ -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 | |
t@@ -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 | |
#= | |
t@@ -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 | |
t@@ -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 | |
t@@ -59,7 +60,8 @@ function readOceanNetCDF(velocity_file::String, grid_file::S… | |
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 | |
t@@ -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 | |
t@@ -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 | |
t@@ -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 | |
t@@ -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") | |
t@@ -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)… | |
t@@ -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 sortin… | |
t@@ -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 | |
t@@ -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 | |
t@@ -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 |