This is a Julia package to simulate the dynamics of hard-sphere fluids using an event-driven algorithm ("exact" calculation of each collision). The code is designed to work in any number of spatial dimensions.
Simple visualizations in 2D and 3D using Makie are also provided.
The following is with the as-yet-unreleased master
branch:
using HardSphereDynamics, StaticArrays
# create box:
table = HardSphereDynamics.RectangularBox(SA[-0.5, -0.5, -1.0],
SA[+0.5, +0.5, +3.0])
# create fluid:
d = 3 # spatial dimension
n = 20 # number of spheres
r = 0.1 # radius
fluid = HardSphereFluid{d,Float64}(table, n, r)
initial_condition!(fluid, lower=table.lower, upper=-table.lower)
# set up simulation:
collision_type = ElasticCollision()
flow_type = ExternalFieldFlow(SA[0.0, 0.0, -10.0])
event_handler = AllToAll(fluid, flow_type)
simulation = HardSphereSimulation(
fluid, event_handler, flow_type, collision_type);
# time evolution:
δt = 0.01
final_time = 100
states, times = evolve!(simulation, δt, final_time);
# visualization:
using Makie
visualize_3d(states, sleep_step=0.005, lower=table.lower, upper=-table.lower)
- David P. Sanders, Departamento de Física, Facultad de Ciencias, Universidad Nacional Autónoma de México (UNAM) & Visiting researcher, MIT
Financial support is acknowledged from DGAPA-UNAM PAPIIT grant IN-117117 and a Cátedra Marcos Moshinsky (2018).
The author thanks Simon Danisch for help with visualizations using Makie.jl
.