spheropack.stop.Jammed#

class spheropack.stop.Jammed(pressure=1000000000.0, relax_windows=4, step=0.2, start_pressure=1000.0)#

Compress quasi-statically until the packing is jammed.

The spheres grow at the requested growth rate until the median per-sphere reduced pressure reaches start_pressure. From then on the radii alternate between relaxation at fixed size (relax_windows pressure windows of 10 collisions per sphere, energy conserved) and growth steps that close the fraction step of the estimated remaining gap to jamming (relative size step / Z). The run stops when the median pressure in a relaxation window (fixed radii) exceeds pressure.

The median is insensitive to rattlers and to a few spheres that collide at very high rates. Slower protocols (more relaxation, smaller steps) come closer to an isostatic contact network at higher cost. For 1000 equal spheres at growth rate 0.02 the force-bearing contacts reach about 94% of the isostatic number with relax_windows=2, step=0.5, 97% with the defaults (1.75 times the run time) and 98% with relax_windows=4, step=0.1 (3 times). Pressures above about 1e11 bring the gaps between touching spheres close to round-off.

step is limited to 0.5: larger steps overshoot, the packing then relaxes back to a lower pressure during the next relaxation, and the protocol can cycle without progress.

Requires the "elastic_growing" collision rule.

Parameters:
__init__(pressure=1000000000.0, relax_windows=4, step=0.2, start_pressure=1000.0)#
Parameters:
Return type:

None

Methods

__init__([pressure, relax_windows, step, ...])

Attributes

kind

name

pressure

relax_windows

start_pressure

step