commit 9f6b79535d4c51ac755a88255173c5382d54d4d8
parent 29d74ee0276bec09dd8593645f4668907539eb2f
Author: Anders Damsgaard <andersd@riseup.net>
Date: Fri, 12 May 2017 16:48:30 -0400
first check previous grid position during ice floe grid sorting
Diffstat:
1 file changed, 22 insertions(+), 10 deletions(-)
diff --git a/src/grid.jl b/src/grid.jl
@@ -88,17 +88,29 @@ function sortIceFloesInOceanGrid!(simulation::Simulation; verbose=false)
continue
end
- i, j = findCellContainingPoint(simulation.ocean,
- simulation.ice_floes[idx].lin_pos)
+ # After first iteration, check if ice floe is in same cell before
+ # traversing entire grid
+ i_old, j_old = simulation.ice_floes[idx].ocean_grid_pos
+ if simulation.time > 0. &&
+ i_old > 0 && j_old > 0 &&
+ isPointInCell(simulation.ocean, i_old, j_old,
+ simulation.ice_floes[idx].lin_pos)
+ i = i_old
+ j = j_old
- # remove ice floe if it is outside of the grid
- if i == 0 && j == 0
- disableIceFloe!(simulation, idx)
- continue
- end
+ else
+ i, j = findCellContainingPoint(simulation.ocean,
+ simulation.ice_floes[idx].lin_pos)
- # add cell to ice floe
- simulation.ice_floes[idx].ocean_grid_pos = [i, j]
+ # remove ice floe if it is outside of the grid
+ if i == 0 && j == 0
+ disableIceFloe!(simulation, idx)
+ continue
+ end
+
+ # add cell to ice floe
+ simulation.ice_floes[idx].ocean_grid_pos = [i, j]
+ end
# add ice floe to cell
push!(simulation.ocean.ice_floe_list[i, j], idx)
@@ -157,7 +169,7 @@ conformal mapping approach (`method = "Conformal"`). The area-based approach is
more robust. This function returns `true` or `false`.
"""
function isPointInCell(ocean::Ocean, i::Int, j::Int, point::Array{float, 1};
- method::String="Area")
+ method::String="Conformal")
sw, se, ne, nw = getCellCornerCoordinates(ocean, i, j)