Granular.jl

Julia package for granular dynamics simulation
git clone git://src.adamsgaard.dk/Granular.jl # fast
git clone https://src.adamsgaard.dk/Granular.jl.git # slow
Log | Files | Refs | README | LICENSE Back to index

grain.jl (4021B)


      1 #!/usr/bin/env julia
      2 
      3 # Check the basic icefloe functionality
      4 
      5 @info "Writing simple simulation to VTK file"
      6 sim = Granular.createSimulation(id="test")
      7 Granular.addGrainCylindrical!(sim, [ 0., 0.], 10., 1., verbose=false)
      8 Granular.printGrainInfo(sim.grains[1])
      9 
     10 @info "Testing grain value checks "
     11 @test_throws ErrorException Granular.addGrainCylindrical!(sim, [.1, .1, .1, .1],
     12                                                           10., 1.)
     13 @test_throws ErrorException Granular.addGrainCylindrical!(sim, [.1, .1],
     14                                                           10., 1., 
     15                                                           lin_vel=[.2,.2,.2,.2])
     16 @test_throws ErrorException Granular.addGrainCylindrical!(sim, [.1, .1],
     17                                                           10., 1., 
     18                                                           lin_acc=[.2,.2,.2,.2])
     19 @test_throws ErrorException Granular.addGrainCylindrical!(sim, [.1, .1],
     20                                                           0., 1.)
     21 @test_throws ErrorException Granular.addGrainCylindrical!(sim, [.1, .1],
     22                                                           10., 1., density=-2.)
     23 @test_throws ErrorException Granular.disableGrain!(sim, 0)
     24 
     25 @info "Testing grain comparison "
     26 sim = Granular.createSimulation(id="test")
     27 Granular.addGrainCylindrical!(sim, [ 0., 0.], 10., 1., verbose=false)
     28 Granular.addGrainCylindrical!(sim, [ 0., 0.], 10., 1., verbose=false)
     29 Granular.compareGrains(sim.grains[1], sim.grains[2])
     30 Granular.findContacts!(sim)
     31 
     32 global gnuplot = true
     33 try
     34     run(`gnuplot --version`)
     35 catch return_signal
     36     if isa(return_signal, Base.IOError)
     37         @warn "Skipping plotting routines: Could not launch gnuplot process"
     38         global gnuplot = false
     39     end
     40 end
     41 if gnuplot
     42     @info "Testing GSD plotting "
     43     Granular.plotGrainSizeDistribution(sim)
     44     @test isfile("test-grain-size-distribution.png")
     45     rm("test-grain-size-distribution.png")
     46 
     47     Granular.plotGrainSizeDistribution(sim, skip_fixed=false)
     48     @test isfile("test-grain-size-distribution.png")
     49     rm("test-grain-size-distribution.png")
     50 
     51     Granular.plotGrainSizeDistribution(sim, size_type="areal")
     52     @test isfile("test-grain-size-distribution.png")
     53     rm("test-grain-size-distribution.png")
     54 
     55     @test_throws ErrorException Granular.plotGrainSizeDistribution(sim, size_type="asdf")
     56 
     57     @info "Testing grain plotting"
     58     Granular.plotGrains(sim, show_figure=false)
     59     @test isfile("test/test.grains.0.png")
     60     rm("test/test.grains.0.png")
     61 
     62     @info "  - contact_radius"
     63     Granular.plotGrains(sim, palette_scalar="contact_radius", show_figure=false)
     64     @test isfile("test/test.grains.0.png")
     65     rm("test/test.grains.0.png")
     66     @info "  - areal_radius"
     67     Granular.plotGrains(sim, palette_scalar="areal_radius", show_figure=false)
     68     @test isfile("test/test.grains.0.png")
     69     rm("test/test.grains.0.png")
     70     @info "  - color"
     71     Granular.plotGrains(sim, palette_scalar="color", show_figure=false)
     72     @test isfile("test/test.grains.0.png")
     73     rm("test/test.grains.0.png")
     74 
     75     @info "  - invalid field"
     76     @test_throws ErrorException Granular.plotGrains(sim, palette_scalar="asdf",
     77                                                    show_figure=false)
     78 end
     79 
     80 @info "Testing external body force routines"
     81 sim = Granular.createSimulation(id="test")
     82 Granular.addGrainCylindrical!(sim, [ 0., 0.], 10., 1., verbose=false)
     83 Granular.setBodyForce!(sim.grains[1], [1., 2., 0.])
     84 @test sim.grains[1].external_body_force ≈ [1., 2., 0.]
     85 Granular.addBodyForce!(sim.grains[1], [1., 2., 0.])
     86 @test sim.grains[1].external_body_force ≈ [2., 4., 0.]
     87 
     88 @info "Testing zeroKinematics!()"
     89 sim.grains[1].force .= ones(3)
     90 sim.grains[1].lin_acc .= ones(3)
     91 sim.grains[1].lin_vel .= ones(3)
     92 sim.grains[1].torque .= ones(3)
     93 sim.grains[1].ang_acc .= ones(3)
     94 sim.grains[1].ang_vel .= ones(3)
     95 Granular.zeroKinematics!(sim)
     96 @test Granular.totalGrainKineticTranslationalEnergy(sim) ≈ 0.
     97 @test Granular.totalGrainKineticRotationalEnergy(sim) ≈ 0.