Granular.jl

Julia package for granular dynamics simulation
git clone git://src.adamsgaard.dk/Granular.jl
Log | Files | Refs | README | LICENSE

commit b0918c98604e04ea2c4f983c73e589cf7b7e9646
parent d3ccfa13eceaac8e9f56ceb7872e6c0919d79289
Author: Anders Damsgaard <andersd@riseup.net>
Date:   Wed,  1 Nov 2017 16:16:29 -0400

save and check inter-particle position vector, tests failing

Diffstat:
Msrc/contact_search.jl | 5++++-
Mtest/contact-search-and-geometry.jl | 23+++++++++++++++++++++++
2 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/src/contact_search.jl b/src/contact_search.jl @@ -192,10 +192,11 @@ function checkAndAddContact!(sim::Simulation, i::Int, j::Int, # Check if grains overlap (overlap when negative) if overlap_ij < 0. - # Check if contact is already registered + # Check if contact is already registered, and update position if so for ic=1:sim.Nc_max @inbounds if sim.grains[i].contacts[ic] == j contact_found = true + @inbounds sim.grains[i].position_vector[ic] .= position_ij break # contact already registered end end @@ -222,6 +223,8 @@ function checkAndAddContact!(sim::Simulation, i::Int, j::Int, @inbounds sim.grains[i].n_contacts += 1 @inbounds sim.grains[j].n_contacts += 1 @inbounds sim.grains[i].contacts[ic] = j + @inbounds sim.grains[i].position_vector[ic] .= + position_ij @inbounds fill!(sim.grains[i]. contact_parallel_displacement[ic] , 0.) @inbounds sim.grains[i].contact_age[ic] = 0. diff --git a/test/contact-search-and-geometry.jl b/test/contact-search-and-geometry.jl @@ -28,12 +28,15 @@ Granular.findContacts!(sim) sim.grains[1].fixed = true # The contact should be registered in ice floe 1, but not ice floe 2 @test 2 == sim.grains[1].contacts[1] +@test [-18., 0.] ≈ sim.grains[1].position_vector[1] for ic=2:sim.Nc_max @test 0 == sim.grains[1].contacts[ic] + @test [0., 0.] ≈ sim.grains[1].position_vector[ic] @test [0., 0.] ≈ sim.grains[1].contact_parallel_displacement[ic] end for ic=1:sim.Nc_max @test 0 == sim.grains[2].contacts[ic] + @test [0., 0.] ≈ sim.grains[2].position_vector[ic] @test [0., 0.] ≈ sim.grains[2].contact_parallel_displacement[ic] end @test 1 == sim.grains[1].n_contacts @@ -44,12 +47,15 @@ sim = deepcopy(sim_copy) Granular.findContacts!(sim) @test 2 == sim.grains[1].contacts[1] +@test [-18., 0.] ≈ sim.grains[1].position_vector[1] for ic=2:sim.Nc_max @test 0 == sim.grains[1].contacts[ic] + @test [0., 0.] ≈ sim.grains[1].position_vector[ic] @test [0., 0.] ≈ sim.grains[1].contact_parallel_displacement[ic] end for ic=1:sim.Nc_max @test 0 == sim.grains[2].contacts[ic] + @test [0., 0.] ≈ sim.grains[2].position_vector[ic] @test [0., 0.] ≈ sim.grains[2].contact_parallel_displacement[ic] end @test 1 == sim.grains[1].n_contacts @@ -63,10 +69,12 @@ sim.grains[2].fixed = true Granular.findContacts!(sim) for ic=1:sim.Nc_max @test 0 == sim.grains[1].contacts[ic] + @test [0., 0.] ≈ sim.grains[1].position_vector[ic] @test [0., 0.] ≈ sim.grains[1].contact_parallel_displacement[ic] end for ic=1:sim.Nc_max @test 0 == sim.grains[2].contacts[ic] + @test [0., 0.] ≈ sim.grains[2].position_vector[ic] @test [0., 0.] ≈ sim.grains[2].contact_parallel_displacement[ic] end @test 0 == sim.grains[1].n_contacts @@ -78,10 +86,12 @@ Granular.disableGrain!(sim, 1) Granular.findContacts!(sim) for ic=1:sim.Nc_max @test 0 == sim.grains[1].contacts[ic] + @test [0., 0.] ≈ sim.grains[1].position_vector[ic] @test [0., 0.] ≈ sim.grains[1].contact_parallel_displacement[ic] end for ic=1:sim.Nc_max @test 0 == sim.grains[2].contacts[ic] + @test [0., 0.] ≈ sim.grains[2].position_vector[ic] @test [0., 0.] ≈ sim.grains[2].contact_parallel_displacement[ic] end @test 0 == sim.grains[1].n_contacts @@ -94,10 +104,12 @@ Granular.disableGrain!(sim, 2) Granular.findContacts!(sim) for ic=1:sim.Nc_max @test 0 == sim.grains[1].contacts[ic] + @test [0., 0.] ≈ sim.grains[1].position_vector[ic] @test [0., 0.] ≈ sim.grains[1].contact_parallel_displacement[ic] end for ic=1:sim.Nc_max @test 0 == sim.grains[2].contacts[ic] + @test [0., 0.] ≈ sim.grains[2].position_vector[ic] @test [0., 0.] ≈ sim.grains[2].contact_parallel_displacement[ic] end @test 0 == sim.grains[1].n_contacts @@ -110,12 +122,15 @@ Granular.interact!(sim) Granular.findContacts!(sim) @test 2 == sim.grains[1].contacts[1] +@test [-18., 0.] ≈ sim.grains[1].position_vector[1] for ic=2:sim.Nc_max @test 0 == sim.grains[1].contacts[ic] + @test [0., 0.] ≈ sim.grains[1].position_vector[ic] @test [0., 0.] ≈ sim.grains[1].contact_parallel_displacement[ic] end for ic=1:sim.Nc_max @test 0 == sim.grains[2].contacts[ic] + @test [0., 0.] ≈ sim.grains[2].position_vector[ic] @test [0., 0.] ≈ sim.grains[2].contact_parallel_displacement[ic] end @test 1 == sim.grains[1].n_contacts @@ -131,10 +146,12 @@ Granular.findContactsInGrid!(sim, sim.ocean) @test 2 == sim.grains[1].contacts[1] for ic=2:sim.Nc_max @test 0 == sim.grains[1].contacts[ic] + @test [0., 0.] ≈ sim.grains[1].position_vector[ic] @test [0., 0.] ≈ sim.grains[1].contact_parallel_displacement[ic] end for ic=1:sim.Nc_max @test 0 == sim.grains[2].contacts[ic] + @test [0., 0.] ≈ sim.grains[2].position_vector[ic] @test [0., 0.] ≈ sim.grains[2].contact_parallel_displacement[ic] end @test 1 == sim.grains[1].n_contacts @@ -150,10 +167,12 @@ Granular.findContactsInGrid!(sim, sim.ocean) @test 2 == sim.grains[1].contacts[1] for ic=2:sim.Nc_max @test 0 == sim.grains[1].contacts[ic] + @test [0., 0.] ≈ sim.grains[1].position_vector[ic] @test [0., 0.] ≈ sim.grains[1].contact_parallel_displacement[ic] end for ic=1:sim.Nc_max @test 0 == sim.grains[2].contacts[ic] + @test [0., 0.] ≈ sim.grains[2].position_vector[ic] @test [0., 0.] ≈ sim.grains[2].contact_parallel_displacement[ic] end @test 1 == sim.grains[1].n_contacts @@ -169,10 +188,12 @@ Granular.findContactsInGrid!(sim, sim.ocean) for ic=1:sim.Nc_max @test 0 == sim.grains[1].contacts[ic] + @test [0., 0.] ≈ sim.grains[1].position_vector[ic] @test [0., 0.] ≈ sim.grains[1].contact_parallel_displacement[ic] end for ic=1:sim.Nc_max @test 0 == sim.grains[2].contacts[ic] + @test [0., 0.] ≈ sim.grains[2].position_vector[ic] @test [0., 0.] ≈ sim.grains[2].contact_parallel_displacement[ic] end @test 0 == sim.grains[1].n_contacts @@ -187,10 +208,12 @@ Granular.findContacts!(sim) @test 2 == sim.grains[1].contacts[1] for ic=2:sim.Nc_max @test 0 == sim.grains[1].contacts[ic] + @test [0., 0.] ≈ sim.grains[1].position_vector[ic] @test [0., 0.] ≈ sim.grains[1].contact_parallel_displacement[ic] end for ic=1:sim.Nc_max @test 0 == sim.grains[2].contacts[ic] + @test [0., 0.] ≈ sim.grains[2].position_vector[ic] @test [0., 0.] ≈ sim.grains[2].contact_parallel_displacement[ic] end @test 1 == sim.grains[1].n_contacts