Granular.jl

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

commit 05ee37055f8e1b65c450eb5fd04b8e9a94d85e2e
parent 8deef26410a7c1879ab698a6f5f7bfcb06faea59
Author: Anders Damsgaard <andersd@riseup.net>
Date:   Wed, 17 Jan 2018 17:56:19 -0500

Update tests to reflect added detection of contacts between fixed grains

Diffstat:
Mtest/collision-2floes-normal.jl | 127+++++++++++++++++++++++++++++++++++--------------------------------------------
Mtest/contact-search-and-geometry.jl | 10+++++-----
2 files changed, 61 insertions(+), 76 deletions(-)

diff --git a/test/collision-2floes-normal.jl b/test/collision-2floes-normal.jl @@ -273,76 +273,61 @@ E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim) @test E_kin_rot_init ≈ E_kin_rot_final @test sim.grains[2].lin_pos[1] > grain2_pos_init[1] +#= +info("# Test stability under collision with fixed particles different allow_*_acc") r = 10. -for angle in linspace(0, 2π, 4) - info("## Contact angle: $angle") - - info("Testing behavior with two fixed grains and allow_*_acc") - sim = Granular.createSimulation(id="test") - Granular.addGrainCylindrical!(sim, [0., 0.], r, 1., verbose=verbose) - Granular.addGrainCylindrical!(sim, [2.0*r*cos(angle), 2.0*r*sin(angle)], - r, 1., verbose=verbose) - sim.grains[1].fixed = true - sim.grains[2].fixed = true - - E_kin_lin_init = Granular.totalGrainKineticTranslationalEnergy(sim) - E_kin_rot_init = Granular.totalGrainKineticRotationalEnergy(sim) - grain1_pos_init = sim.grains[1].lin_pos - grain2_pos_init = sim.grains[2].lin_pos - - Granular.setTotalTime!(sim, 10.0) - Granular.setTimeStep!(sim, epsilon=0.07) - sim_init = deepcopy(sim) - - info("Both fixed, no allow_*_acc, no cohesion (TY2)") - sim = deepcopy(sim_init) - #sim.grains[2].allow_y_acc = true # should not influence result - tol = 0.02 - Granular.run!(sim, temporal_integration_method="Two-term Taylor", verbose=verbose) - E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim) - E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim) - @test E_kin_lin_init ≈ E_kin_lin_final atol=E_kin_lin_init*tol - @test E_kin_rot_init ≈ E_kin_rot_final - @test sim.grains[1].lin_pos ≈ grain1_pos_init - @test sim.grains[2].lin_pos ≈ grain2_pos_init - - info("Both fixed, no allow_*_acc, no cohesion (TY3)") - sim = deepcopy(sim_init) - #sim.grains[2].allow_y_acc = true # should not influence result - tol = 0.02 - Granular.run!(sim, temporal_integration_method="Three-term Taylor", verbose=verbose) - E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim) - E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim) - @test E_kin_lin_init ≈ E_kin_lin_final atol=E_kin_lin_init*tol - @test E_kin_rot_init ≈ E_kin_rot_final - @test sim.grains[1].lin_pos ≈ grain1_pos_init - @test sim.grains[2].lin_pos ≈ grain2_pos_init - - info("Both fixed, no allow_*_acc, cohesion (TY2)") - sim = deepcopy(sim_init) - #sim.grains[2].allow_y_acc = true # should not influence result - sim.grains[1].tensile_strength = 200e3 - sim.grains[2].tensile_strength = 200e3 - tol = 0.2 - Granular.run!(sim, temporal_integration_method="Two-term Taylor", verbose=verbose) - E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim) - E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim) - @test E_kin_lin_init ≈ E_kin_lin_final atol=E_kin_lin_init*tol - @test E_kin_rot_init ≈ E_kin_rot_final - @test sim.grains[1].lin_pos ≈ grain1_pos_init - @test sim.grains[2].lin_pos ≈ grain2_pos_init - - info("Both fixed, no allow_*_acc, cohesion (TY3)") - sim = deepcopy(sim_init) - #sim.grains[2].allow_y_acc = true # should not influence result - sim.grains[1].tensile_strength = 200e3 - sim.grains[2].tensile_strength = 200e3 - tol = 0.02 - Granular.run!(sim, temporal_integration_method="Three-term Taylor", verbose=verbose) - E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim) - E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim) - @test E_kin_lin_init ≈ E_kin_lin_final atol=E_kin_lin_init*tol - @test E_kin_rot_init ≈ E_kin_rot_final - @test sim.grains[1].lin_pos ≈ grain1_pos_init - @test sim.grains[2].lin_pos ≈ grain2_pos_init +i = 1 +for tensile_strength in [0.0, 200e3] + for angle in linspace(0, 2π, 7) + for allow_x_acc in [false, true] + for allow_y_acc in [false, true] + info("Test $i") + info("Contact angle: $angle rad") + info("allow_x_acc = $allow_x_acc") + info("allow_y_acc = $allow_y_acc") + info("tensile_strength = $tensile_strength Pa") + + sim = Granular.createSimulation() + sim.id = "test-$i-$allow_x_acc-$allow_y_acc-C=$tensile_strength" + Granular.addGrainCylindrical!(sim, [0., 0.], r, 1., verbose=verbose) + Granular.addGrainCylindrical!(sim, [2.0*r*cos(angle), 2.0*r*sin(angle)], + r, 1., verbose=verbose) + sim.grains[1].lin_vel = r/10.0 .* [cos(angle), sin(angle)] + + E_kin_lin_init = Granular.totalGrainKineticTranslationalEnergy(sim) + E_kin_rot_init = Granular.totalGrainKineticRotationalEnergy(sim) + grain1_pos_init = sim.grains[1].lin_pos + grain2_pos_init = sim.grains[2].lin_pos + + sim.grains[1].fixed = true + sim.grains[2].fixed = true + + sim.grains[1].allow_x_acc = allow_x_acc + sim.grains[2].allow_x_acc = allow_x_acc + sim.grains[1].allow_y_acc = allow_y_acc + sim.grains[2].allow_y_acc = allow_y_acc + + sim.grains[1].tensile_strength = tensile_strength + sim.grains[2].tensile_strength = tensile_strength + + Granular.setTotalTime!(sim, 20.0) + Granular.setTimeStep!(sim, epsilon=0.07) + sim_init = deepcopy(sim) + + info("TY3") + sim = deepcopy(sim_init) + tol = 0.02 + Granular.setOutputFileInterval!(sim, 1.0) + Granular.run!(sim, temporal_integration_method="Three-term Taylor", + verbose=verbose) + Granular.render(sim) + E_kin_lin_final = Granular.totalGrainKineticTranslationalEnergy(sim) + E_kin_rot_final = Granular.totalGrainKineticRotationalEnergy(sim) + @test E_kin_lin_init ≈ E_kin_lin_final atol=E_kin_lin_init*tol + + i += 1 + end + end + end end +=# diff --git a/test/contact-search-and-geometry.jl b/test/contact-search-and-geometry.jl @@ -26,7 +26,7 @@ info("Testing findContacts(...)") sim = deepcopy(sim_copy) Granular.findContacts!(sim) -sim.grains[1].fixed = true +sim.grains[1].enabled = false # 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] @@ -65,8 +65,8 @@ end @test_throws ErrorException Granular.findContacts!(sim, method="") sim = deepcopy(sim_copy) -sim.grains[1].fixed = true -sim.grains[2].fixed = true +sim.grains[1].enabled = false +sim.grains[2].enabled = false Granular.findContacts!(sim) for ic=1:sim.Nc_max @test 0 == sim.grains[1].contacts[ic] @@ -182,8 +182,8 @@ end sim = deepcopy(sim_copy) sim.ocean = Granular.createRegularOceanGrid([4, 4, 2], [80., 80., 2.]) -sim.grains[1].fixed = true -sim.grains[2].fixed = true +sim.grains[1].enabled = false +sim.grains[2].enabled = false Granular.sortGrainsInGrid!(sim, sim.ocean) Granular.findContactsInGrid!(sim, sim.ocean)