This is my personal project to study Monte-Carlo simulations of monodispersed hard spheres in 3D.
It is not very fast. If you need large scale simulation, maybe you want to use hoomd-blue.
You need to have Eigen and pybind11 to build the code. The project can be built with CMake, normally you will do,
mkdir build cd build cmake .. make make installAs a result, the python module (with name chard_sphere.cpython-xx-xxx.so) will be created in folder lib, as well as the static C++ library (libhard_sphere.a).
The user is expceted to interact with the library via the Python interface. Typically, one shuold
- copy the file
chard_sphere.cpython-xx-xxx.soto the working directory; or - add the folder
libto$PYTHONPATH.
After that, you should be able to execute the command from hsmc import chard_sphere in Python.
The following snippest present the way to start a simulation
from hsmc import chard_sphere from hsmc.analysis import dump_xyz, TCCOTF import numpy as np n_particle = 1000 box = [30, 50, 60] # box size in X, Y, and Z is_pbc = [True, True, False] # no PBC in the z-direction is_hard = [False, False, True] # hard walls along z-direction r_skin = 5.0 # create the system system = chard_sphere.HSMC( n=n_particle, box=box, is_pbc=is_pbc, is_hard=is_hard, r_skin=r_skin ) # randomly fill non-overlapping hard spheres system.fill_hs() # reduce the box size slowly to reach desired volume fraction system.crush(0.50, 0.02) # print the overview of the system print(system) # perform 1000 Monte-Carlo sweeps, collect the configuration every 100 frames configurations = np.empty((10, n_particle, 3)) for i in range(10): for _ in range(100): system.sweep() # retrieve the positions of the particles positions = system.get_positions() configurations[i] = positions.T # save the positions into an xyz file dump_xyz( 'hard_sphere.xyz', positions.T, comment="box:[" + ",".join([ # write box as the comment f"{L:.8f} (PBC? {p}; Hard? {h})" for L, p, h in zip(system.get_box(), is_pbc, is_hard) ]) + "]" )