commit f9d909579743e69ab0ccdc2014884c54ad962249
parent 4cb1c336f00a3cb7613e7ad2efb5a5de5e3cbc16
Author: Anders Damsgaard <andersd@riseup.net>
Date: Wed, 3 Jan 2018 15:09:34 -0500
Fix grain positions in tests and improve regular grid performance
Diffstat:
4 files changed, 46 insertions(+), 43 deletions(-)
diff --git a/src/grid.jl b/src/grid.jl
@@ -164,8 +164,8 @@ function sortGrainsInGrid!(simulation::Simulation, grid::Any; verbose=true)
else
if grid.regular_grid
- i, j = Int.(floor.(simulation.grains[idx].lin_pos
- ./ grid.dx[1:2])) + [1,1]
+ i, j = Int.(ceil.(simulation.grains[idx].lin_pos
+ ./ grid.dx[1:2]))
else
# Search for point in 8 neighboring cells
@@ -275,9 +275,12 @@ This function is a wrapper for `getCellCornerCoordinates()` and
"""
function getNonDimensionalCellCoordinates(grid::Any, i::Int, j::Int,
point::Vector{Float64})
-
- sw, se, ne, nw = getCellCornerCoordinates(grid.xq, grid.yq, i, j)
- return conformalQuadrilateralCoordinates(sw, se, ne, nw, point)
+ if grid.regular_grid
+ return (point - Float64.([i-1,j-1]).*grid.dx[1:2])./grid.dx[1:2]
+ else
+ sw, se, ne, nw = getCellCornerCoordinates(grid.xq, grid.yq, i, j)
+ return conformalQuadrilateralCoordinates(sw, se, ne, nw, point)
+ end
end
export isPointInCell
@@ -296,7 +299,7 @@ function isPointInCell(grid::Any, i::Int, j::Int,
method::String="Conformal")
if grid.regular_grid
- if [i,j] == Int.(floor.(point ./ grid.dx[1:2])) + [1,1]
+ if [i,j] == Int.(ceil.(point ./ grid.dx[1:2]))
return true
else
return false
diff --git a/test/contact-search-and-geometry.jl b/test/contact-search-and-geometry.jl
@@ -7,8 +7,8 @@ info("#### $(basename(@__FILE__)) ####")
info("Testing interGrainPositionVector(...) and findOverlap(...)")
sim = Granular.createSimulation("test")
sim = Granular.createSimulation(id="test")
-Granular.addGrainCylindrical!(sim, [ 0., 0.], 10., 1., verbose=false)
-Granular.addGrainCylindrical!(sim, [18., 0.], 10., 1., verbose=false)
+Granular.addGrainCylindrical!(sim, [ 0.01, 0.01], 10., 1., verbose=false)
+Granular.addGrainCylindrical!(sim, [18.01, 0.01], 10., 1., verbose=false)
position_ij = Granular.interGrainPositionVector(sim, 1, 2)
overlap_ij = Granular.findOverlap(sim, 1, 2, position_ij)
diff --git a/test/memory-management.jl b/test/memory-management.jl
@@ -102,8 +102,8 @@ end
info("Checking if memory is freed after ended collision (all to all)")
sim = Granular.createSimulation(id="test")
-Granular.addGrainCylindrical!(sim, [0., 0.], 10., 1., verbose=false)
-Granular.addGrainCylindrical!(sim, [20.05, 0.], 10., 1., verbose=false)
+Granular.addGrainCylindrical!(sim, [1., 1.], 10., 1., verbose=false)
+Granular.addGrainCylindrical!(sim, [21.05, 1.], 10., 1., verbose=false)
sim.grains[1].lin_vel[1] = 0.1
Granular.setTotalTime!(sim, 10.0)
Granular.setTimeStep!(sim, epsilon=0.07, verbose=false)
@@ -113,8 +113,8 @@ Granular.run!(sim, verbose=false)
info("Checking if memory is freed after ended collision (cell sorting)")
sim = Granular.createSimulation(id="test")
-Granular.addGrainCylindrical!(sim, [0., 0.], 10., 1., verbose=false)
-Granular.addGrainCylindrical!(sim, [20.05, 0.], 10., 1., verbose=false)
+Granular.addGrainCylindrical!(sim, [1., 1.], 10., 1., verbose=false)
+Granular.addGrainCylindrical!(sim, [21.05, 1.], 10., 1., verbose=false)
sim.ocean = Granular.createRegularOceanGrid([2, 2, 2], [40., 40., 10.])
sim.grains[1].lin_vel[1] = 0.1
Granular.setTotalTime!(sim, 10.0)
@@ -131,8 +131,8 @@ Granular.run!(sim, verbose=false)
@test Base.summarysize(sim) == original_sim_size_recursive
sim = Granular.createSimulation(id="test")
-Granular.addGrainCylindrical!(sim, [0., 0.], 10., 1., verbose=false)
-Granular.addGrainCylindrical!(sim, [20.05, 0.], 10., 1., verbose=false)
+Granular.addGrainCylindrical!(sim, [1., 1.], 10., 1., verbose=false)
+Granular.addGrainCylindrical!(sim, [21.05, 1.], 10., 1., verbose=false)
sim.atmosphere = Granular.createRegularAtmosphereGrid([2, 2, 2], [40., 40., 10.])
sim.grains[1].lin_vel[1] = 0.1
Granular.setTotalTime!(sim, 10.0)
@@ -149,8 +149,8 @@ Granular.run!(sim, verbose=false)
@test Base.summarysize(sim) == original_sim_size_recursive
sim = Granular.createSimulation(id="test")
-Granular.addGrainCylindrical!(sim, [0., 0.], 10., 1., verbose=false)
-Granular.addGrainCylindrical!(sim, [20.05, 0.], 10., 1., verbose=false)
+Granular.addGrainCylindrical!(sim, [1., 1.], 10., 1., verbose=false)
+Granular.addGrainCylindrical!(sim, [21.05, 1.], 10., 1., verbose=false)
sim.atmosphere = Granular.createRegularAtmosphereGrid([2, 2, 2], [40., 40., 10.])
sim.ocean = Granular.createRegularOceanGrid([2, 2, 2], [40., 40., 10.])
sim.grains[1].lin_vel[1] = 0.1
diff --git a/test/wall.jl b/test/wall.jl
@@ -195,7 +195,7 @@ Granular.interactWalls!(sim)
info("Full collision with wall")
sim = Granular.createSimulation()
sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
-Granular.addGrainCylindrical!(sim, [1.2, 0.], 1., 2., verbose=false)
+Granular.addGrainCylindrical!(sim, [1.2, 0.5], 1., 2., verbose=false)
Granular.addWallLinearFrictionless!(sim, [1., 0.], 0., verbose=false)
sim.walls[1].contact_viscosity_normal = 1e3
sim.grains[1].lin_vel[1] = -0.2
@@ -209,7 +209,7 @@ lin_vel1 = sim.grains[1].lin_vel
sim = Granular.createSimulation()
sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
-Granular.addGrainCylindrical!(sim, [1.2, 0.], 1., 2., verbose=false)
+Granular.addGrainCylindrical!(sim, [1.2, 0.5], 1., 2., verbose=false)
Granular.addWallLinearFrictionless!(sim, [1., 0.], 0., verbose=false)
sim.walls[1].contact_viscosity_normal = 1e4
sim.grains[1].lin_vel[1] = -0.2
@@ -227,38 +227,38 @@ info("# Testing wall dynamics")
info("Wall present, no contact, fixed (default)")
sim = Granular.createSimulation()
sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
-Granular.addGrainCylindrical!(sim, [ 0., 0.], 1., 2., verbose=false)
-Granular.addWallLinearFrictionless!(sim, [1., 0.], -1.01, verbose=false)
+Granular.addGrainCylindrical!(sim, [ 1., 1.], 1., 2., verbose=false)
+Granular.addWallLinearFrictionless!(sim, [1., 0.], -0.01, verbose=false)
Granular.setTimeStep!(sim, verbose=false)
Granular.interactWalls!(sim)
Granular.updateWallKinematics!(sim)
@test sim.walls[1].force ≈ 0.
@test sim.walls[1].acc ≈ 0.
@test sim.walls[1].vel ≈ 0.
-@test sim.walls[1].pos ≈ -1.01
+@test sim.walls[1].pos ≈ -0.01
@test sim.grains[1].force[1] ≈ 0.
@test sim.grains[1].force[2] ≈ 0.
info("Wall present, no contact, fixed (TY2)")
sim = Granular.createSimulation()
sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
-Granular.addGrainCylindrical!(sim, [ 0., 0.], 1., 2., verbose=false)
-Granular.addWallLinearFrictionless!(sim, [1., 0.], -1.01, verbose=false)
+Granular.addGrainCylindrical!(sim, [ 1., 1.], 1., 2., verbose=false)
+Granular.addWallLinearFrictionless!(sim, [1., 0.], -0.01, verbose=false)
Granular.setTimeStep!(sim, verbose=false)
Granular.interactWalls!(sim)
Granular.updateWallKinematics!(sim, method="Two-term Taylor")
@test sim.walls[1].force ≈ 0.
@test sim.walls[1].acc ≈ 0.
@test sim.walls[1].vel ≈ 0.
-@test sim.walls[1].pos ≈ -1.01
+@test sim.walls[1].pos ≈ -0.01
@test sim.grains[1].force[1] ≈ 0.
@test sim.grains[1].force[2] ≈ 0.
info("Wall present, no contact, fixed (TY3)")
sim = Granular.createSimulation()
sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
-Granular.addGrainCylindrical!(sim, [ 0., 0.], 1., 2., verbose=false)
-Granular.addWallLinearFrictionless!(sim, [1., 0.], -1.01, verbose=false)
+Granular.addGrainCylindrical!(sim, [ 1., 1.], 1., 2., verbose=false)
+Granular.addWallLinearFrictionless!(sim, [1., 0.], -0.01, verbose=false)
Granular.setTimeStep!(sim, verbose=false)
Granular.interactWalls!(sim)
@test_throws ErrorException Granular.updateWallKinematics!(sim, method="asdf")
@@ -266,27 +266,27 @@ Granular.updateWallKinematics!(sim, method="Three-term Taylor")
@test sim.walls[1].force ≈ 0.
@test sim.walls[1].acc ≈ 0.
@test sim.walls[1].vel ≈ 0.
-@test sim.walls[1].pos ≈ -1.01
+@test sim.walls[1].pos ≈ -0.01
@test sim.grains[1].force[1] ≈ 0.
@test sim.grains[1].force[2] ≈ 0.
info("Wall present, contact, fixed")
sim = Granular.createSimulation()
sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
-Granular.addGrainCylindrical!(sim, [ 0., 0.], 1., 2., verbose=false)
-Granular.addWallLinearFrictionless!(sim, [1., 0.], -1.01, verbose=false)
+Granular.addGrainCylindrical!(sim, [ 1., 1.], 1., 2., verbose=false)
+Granular.addWallLinearFrictionless!(sim, [1., 0.], -0.01, verbose=false)
Granular.setTimeStep!(sim, verbose=false)
Granular.interactWalls!(sim)
Granular.updateWallKinematics!(sim)
@test sim.walls[1].acc ≈ 0.
@test sim.walls[1].vel ≈ 0.
-@test sim.walls[1].pos ≈ -1.01
+@test sim.walls[1].pos ≈ -0.01
info("Wall present, no contact, velocity BC")
sim = Granular.createSimulation()
sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
-Granular.addGrainCylindrical!(sim, [ 0., 0.], 1., 2., verbose=false)
-Granular.addWallLinearFrictionless!(sim, [1., 0.], -1.01,
+Granular.addGrainCylindrical!(sim, [ 1., 1.], 1., 2., verbose=false)
+Granular.addWallLinearFrictionless!(sim, [1., 0.], -0.01,
bc="velocity", vel=1.0,
verbose=false)
Granular.setTimeStep!(sim, verbose=false)
@@ -295,15 +295,15 @@ Granular.updateWallKinematics!(sim)
@test sim.walls[1].force ≈ 0.
@test sim.walls[1].acc ≈ 0.
@test sim.walls[1].vel ≈ 1.
-@test sim.walls[1].pos > -1.01
+@test sim.walls[1].pos > -0.01
@test sim.grains[1].force[1] ≈ 0.
@test sim.grains[1].force[2] ≈ 0.
info("Wall present, no contact, velocity BC (TY2)")
sim = Granular.createSimulation()
sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
-Granular.addGrainCylindrical!(sim, [ 0., 0.], 1., 2., verbose=false)
-Granular.addWallLinearFrictionless!(sim, [1., 0.], -1.01,
+Granular.addGrainCylindrical!(sim, [ 1., 1.], 1., 2., verbose=false)
+Granular.addWallLinearFrictionless!(sim, [1., 0.], -0.01,
bc="velocity", vel=1.0,
verbose=false)
Granular.setTimeStep!(sim, verbose=false)
@@ -312,15 +312,15 @@ Granular.updateWallKinematics!(sim, method="Two-term Taylor")
@test sim.walls[1].force ≈ 0.
@test sim.walls[1].acc ≈ 0.
@test sim.walls[1].vel ≈ 1.
-@test sim.walls[1].pos > -1.01
+@test sim.walls[1].pos > -0.01
@test sim.grains[1].force[1] ≈ 0.
@test sim.grains[1].force[2] ≈ 0.
info("Wall present, no contact, velocity BC (TY3)")
sim = Granular.createSimulation()
sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
-Granular.addGrainCylindrical!(sim, [ 0., 0.], 1., 2., verbose=false)
-Granular.addWallLinearFrictionless!(sim, [1., 0.], -1.01,
+Granular.addGrainCylindrical!(sim, [ 1., 1.], 1., 2., verbose=false)
+Granular.addWallLinearFrictionless!(sim, [1., 0.], -0.01,
bc="velocity", vel=1.0,
verbose=false)
Granular.setTimeStep!(sim, verbose=false)
@@ -330,15 +330,15 @@ Granular.updateWallKinematics!(sim, method="Three-term Taylor")
@test sim.walls[1].force ≈ 0.
@test sim.walls[1].acc ≈ 0.
@test sim.walls[1].vel ≈ 1.
-@test sim.walls[1].pos > -1.01
+@test sim.walls[1].pos > -0.01
@test sim.grains[1].force[1] ≈ 0.
@test sim.grains[1].force[2] ≈ 0.
info("Wall present, contact, velocity BC (TY2)")
sim = Granular.createSimulation()
sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
-Granular.addGrainCylindrical!(sim, [ 0., 0.], 1., 2., verbose=false)
-Granular.addWallLinearFrictionless!(sim, [1., 0.], -0.9,
+Granular.addGrainCylindrical!(sim, [ 1., 1.], 1., 2., verbose=false)
+Granular.addWallLinearFrictionless!(sim, [1., 0.], 0.1,
bc="velocity", vel=1.0,
verbose=false)
Granular.setTimeStep!(sim, verbose=false)
@@ -352,8 +352,8 @@ Granular.updateWallKinematics!(sim, method="Two-term Taylor")
info("Wall present, contact, velocity BC (TY2)")
sim = Granular.createSimulation()
sim.ocean = Granular.createRegularOceanGrid([1, 1, 1], [10., 20., 1.0])
-Granular.addGrainCylindrical!(sim, [ 0., 0.], 1., 2., verbose=false)
-Granular.addWallLinearFrictionless!(sim, [1., 0.], -0.9,
+Granular.addGrainCylindrical!(sim, [ 1., 1.], 1., 2., verbose=false)
+Granular.addWallLinearFrictionless!(sim, [1., 0.], 0.1,
bc="velocity", vel=1.0,
verbose=false)
Granular.setTimeStep!(sim, verbose=false)