The growth rate#

The growth rate is the one parameter that decides what kind of packing the Lubachevsky-Stillinger algorithm produces. This page defines it, explains why it is defined this way, and gives guidance for choosing it.

Definition#

\[ \Gamma = \frac{1}{v_\mathrm{th}}\,\frac{\mathrm{d}\langle d\rangle}{\mathrm{d}t}, \qquad v_\mathrm{th} = \sqrt{k_BT/m}, \]

where \(\langle d\rangle\) is the arithmetic mean diameter of the spheres and \(v_\mathrm{th}\) the thermal speed: the standard deviation of one Cartesian velocity component. \(\Gamma\) is a ratio of two speeds, so it is dimensionless and independent of the units of length.

Physical meaning. While a sphere moving at the thermal speed travels one mean diameter, the mean diameter grows by the fraction \(\Gamma\). Equivalently, during a compression that starts from points, a sphere moving at \(v_\mathrm{th}\) travels \(1/\Gamma\) final mean diameters. At \(\Gamma = 0.02\) that is 50 diameters: enough collisions for the spheres to rearrange locally, too few for them to find a crystal.

The mean speed is \(\langle|\mathbf v|\rangle = \sqrt{8/\pi}\,v_\mathrm{th} \approx 1.60\,v_\mathrm{th}\) in 3D and \(\sqrt{\pi/2}\,v_\mathrm{th} \approx 1.25\,v_\mathrm{th}\) in 2D. To express the growth rate relative to the mean speed, divide \(\Gamma\) by these factors.

Why this definition#

  • It contains both the size and the speed. The behaviour of the algorithm depends on how far spheres travel, in diameters, while they grow. A growth rate in units of 1/time (as in the legacy code) only means something together with the particle size and the velocity scale; \(\Gamma\) combines them.

  • It enters the collision rule directly. For equal spheres every contact distance grows at speed \(\Gamma v_\mathrm{th}\), which is the minimum separation speed after a collision (see The algorithm).

  • It is the same in 2D and 3D. The normal approach speed of colliding spheres has the same distribution in both dimensions when measured in \(v_\mathrm{th}\); measured in the mean speed it would not.

  • The arithmetic mean diameter is the natural reference. All spheres have the same mass, so their speeds do not depend on their size, and the contact distance of a random pair, \(a_i + a_j\), grows on average at \(\mathrm{d}\langle d\rangle/\mathrm{d}t\). Every diameter grows in proportion: sphere \(i\) grows at \(\Gamma\,v_\mathrm{th}\,d_i/\langle d\rangle\).

Choosing the growth rate#

Measured with spheropack: 1000 spheres in a periodic box, packed until jammed (density="max", default Jammed() stop, default collision rule), mean of 5 seeds. The crystalline fraction uses spheropack.analysis.crystalline(); “contacts” is the number of contacts between force-bearing spheres relative to the isostatic number (spheropack.analysis.isostaticity()). The data are in docs/data/growth_rate_sweep.json and are regenerated by benchmarks/sweep_growth_rate.py.

\(\Gamma\)

equal spheres: \(\phi_J\)

crystalline

contacts

10% polydisperse: \(\phi_J\)

collisions per sphere

0.3

0.637

0.2%

0.956

0.639

3000

0.1

0.634

0.4%

0.953

0.636

3300

0.03

0.640

0.7%

0.960

0.642

3700

0.01

0.644

1.2%

0.975

0.647

5800

0.003

0.648

2.7%

0.985

0.651

13600

0.001

0.650

4.1% (up to 14%)

0.990

0.652

35500

The standard deviation of \(\phi_J\) between seeds is about 0.001. The run time is proportional to the number of collisions: about 12 s for the fastest and 2 minutes for the slowest equal-sphere runs on one core.

What this shows:

  • Jammed packings are dense for every growth rate. With the default collision rule the jamming density of equal spheres only varies between 0.634 and 0.650. Slower growth gives denser packings, closer to isostatic: the spheres have more time to rearrange before they jam. This agrees with the known dependence of the jamming density on the compression rate of frictionless spheres.

  • Crystallisation needs very slow growth. At \(\Gamma = 10^{-3}\) only a few percent of 1000 equal spheres are crystalline; nucleation becomes likely only for slower growth or larger systems, and the density then rises towards the close packing limit \(\pi/\sqrt{18} \approx 0.7405\). Polydispersity of 10% suppresses crystallisation completely in this range.

  • Loose random packings are not jammed packings. Packings with a density well below 0.64 are obtained with a target density (density=0.58), which stops the growth before jamming. The legacy collision rule (collision_rule="legacy") jams at lower densities when growth is fast (about 0.60 at \(\Gamma = 0.16\) with stop=Pressure(1e6)), because it lets clusters of spheres lock prematurely; use it only to reproduce results of the legacy code.

Practical advice:

  • The default \(\Gamma = 0.02\) gives random close packing at a moderate cost. Use 0.003 to 0.01 for denser, more nearly isostatic packings, and check the crystalline fraction for large systems of equal spheres.

  • Equal disks in 2D crystallise easily. For random 2D packings use a mixture, for example 50:50 with size ratio 1.4.

  • For a target density below jamming a larger growth rate is faster, but the structure then deviates more from an equilibrium hard-sphere fluid at that density. Grow slowly (0.01 or less) when an equilibrium structure matters.

Relation to the legacy code#

The legacy command-line tools took a growth rate \(g\) in units of 1/time, with radii \(r_i(t) = r_i\,g t/2\) and velocity components of unit variance. This corresponds to \(\Gamma = g\,d/2\), with \(d\) the final diameter. The settings of the legacy notebooks (\(g = 0.32/d\)) correspond to \(\Gamma = 0.16\).