Granular.jl

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

commit 096493f9edeeac3865b46f0f99699401ac4a3622
parent 03f252d361bad9d81b06ea1643a28f95835bb337
Author: Anders Damsgaard <andersd@riseup.net>
Date:   Mon,  6 Nov 2017 22:15:47 -0500

add zeroKinematics function

Diffstat:
Msrc/grain.jl | 66++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mtest/grain.jl | 11+++++++++++
2 files changed, 77 insertions(+), 0 deletions(-)

diff --git a/src/grain.jl b/src/grain.jl @@ -568,6 +568,8 @@ end export totalGrainKineticTranslationalEnergy """ + totalGrainKineticTranslationalEnergy(simulation) + Returns the sum of translational kinetic energies of all grains in a simulation """ @@ -587,6 +589,8 @@ end export totalGrainKineticRotationalEnergy """ + totalGrainKineticRotationalEnergy(simulation) + Returns the sum of rotational kinetic energies of all grains in a simulation """ function totalGrainKineticRotationalEnergy(simulation::Simulation) @@ -761,3 +765,65 @@ function plotGrainSizeDistribution(simulation::Simulation; info(filename) end end + +export enableOceanDrag! +""" + enableOceanDrag!(grain) + +Enable ocean-caused drag on the grain, with values by Hunke and Comeau (2011). +""" +function enableOceanDrag!(grain::GrainCylindrical) + grain.ocean_drag_coeff_vert = 0.85 + grain.ocean_drag_coeff_horiz = 5e-4 +end + +export enableAtmosphereDrag! +""" + enableAtmosphereDrag!(grain) + +Enable atmosphere-caused drag on the grain, with values by Hunke and Comeau +(2011). +""" +function enableAtmosphereDrag!(grain::GrainCylindrical) + grain.atmosphere_drag_coeff_vert = 0.4 + grain.atmosphere_drag_coeff_horiz = 2.5e-4 +end +export disableOceanDrag! +""" + disableOceanDrag!(grain) + +Disable ocean-caused drag on the grain. +""" +function disableOceanDrag!(grain::GrainCylindrical) + grain.ocean_drag_coeff_vert = 0. + grain.ocean_drag_coeff_horiz = 0. +end + +export disableAtmosphereDrag! +""" + disableAtmosphereDrag!(grain) + +Disable atmosphere-caused drag on the grain. +""" +function disableAtmosphereDrag!(grain::GrainCylindrical) + grain.atmosphere_drag_coeff_vert = 0. + grain.atmosphere_drag_coeff_horiz = 0. +end + +export zeroKinematics! +""" + zeroKinematics!(simulation) + +Set all grain forces, torques, accelerations, and velocities (linear and +rotational) to zero in order to get rid of all kinetic energy. +""" +function zeroKinematics!(sim::Simulation) + for grian in sim.grains + grain.lin_vel .= zeros(2) + grain.lin_acc .= zeros(2) + grain.force .= zeros(2) + grain.ang_vel .= zeros(2) + grain.ang_acc .= zeros(2) + grain.torque .= zeros(2) + end +end diff --git a/test/grain.jl b/test/grain.jl @@ -52,3 +52,14 @@ Granular.setBodyForce!(sim.grains[1], [1., 2.]) Test.@test sim.grains[1].external_body_force ≈ [1., 2.] Granular.addBodyForce!(sim.grains[1], [1., 2.]) Test.@test sim.grains[1].external_body_force ≈ [2., 4.] + +info("Testing zeroKinematics!") +sim.grains[1].force .= ones(2) +sim.grains[1].lin_acc .= ones(2) +sim.grains[1].lin_vel .= ones(2) +sim.grains[1].torque .= ones(2) +sim.grains[1].ang_acc .= ones(2) +sim.grains[1].ang_vel .= ones(2) +Granular.zeroKinematics!(sim) +Test.@test Grain.totalGrainKineticTranslationalEnergy(sim) ≈ 0. +Test.@test Grain.totalGrainKineticRotationalEnergy(sim) ≈ 0.