Skip to main content

A bed-blending stockpile engine: repose-angle deposition, Gray-Thornton kinetic size segregation, a per-cell lot ledger with provenance, and the blending metrics (variance reduction, variograms, residence time).

Project description

bedblend

CI License Version

A bed-blending stockpile engine: repose-angle deposition, Gray-Thornton kinetic size segregation, a per-cell lot ledger with provenance, and the blending metrics.

pip install bedblend

The problem it answers

A blending bed is the cheapest variance reduction available in a mineral processing plant. Material is stacked in many thin layers and reclaimed across all of them at once, so the cut delivered to the mill is an average over the layers the reclaimer crosses rather than over whichever truck arrived last.

The question a planner actually has is how much variance a given pile removes, and the honest answer is often "less than you think". The layer count is the dominant term, and it is set by the reclaim geometry rather than by the stacking geometry: a bridge reclaimer rakes the whole cross-section and crosses every layer at a station, a front-end loader takes a shallow bite and crosses a handful. This engine computes that, on a real pile, with the provenance kept.

import bedblend as bb

pad = bb.PadSpec(nx=24, ny=16, cell_m=3.0)
dumps = bb.generate_stream(n_dumps=120, seed=7)          # a correlated grade stream, not white noise
cfg = bb.RunConfig(pad=pad, stacking="chevron", reclaim="fullface",
                   n_passes=12, sr=1.0, cut_tonnes=600.0)

result = bb.simulate(cfg, dumps)
m = result.metrics
print(f"{len(result.cuts)} cuts, VRR {m.vrr:.3f} against the 1/N ideal {m.vrr_ideal:.3f}")
print(f"{m.n_layers_mean:.1f} layers per cut")
43 cuts, VRR 0.093 against the 1/N ideal 0.046
21.9 layers per cut

The ratio is variance OUT over variance IN, on a tonnage base, so lower is better and 1.0 means the bed did nothing. It is reported next to the 1/N bound because the gap between them is the interesting quantity: it is what the pile fails to recover, and it is driven by the autocorrelation of the incoming stream. Layers only average if they are independent.

What is in it

Module What it computes
heightfield Mass-conserving relaxation to an imposed angle of repose. A priority cascade with a water-filling toppling rule; the ordered transfers ARE the avalanche path.
segregation Gray-Thornton kinetic sieving in the flowing layer, dphi/dt + ... - Sr d/dz[phi(1-phi)] = 0, solved with a Godunov flux so the concentration shocks survive. Sr = 0 degenerates to a passive tracer, which is the negative control.
pile The pad, the per-cell lot stacks, and four reclaim geometries (full face, bucket wheel, end, loader). Every reclaimed tonne carries provenance fractions back to the truck loads that made it.
stacking Five build geometries: chevron, windrow, cone shell, chevcon, strata.
blending Tonnage-weighted variance, VRR, the 1/N bound, mixing effect, experimental variograms with a spherical fit.
rtd Residence-time distribution and its FIFO/LIFO character.
stream A geostatistically correlated truck stream, generated exactly from a one-step recursion.

What it does NOT claim

  • The angle of repose is imposed, not emergent. This is a continuum height-field model, not DEM. It reproduces the geometry a given repose angle produces; it does not predict that angle from particle properties.
  • The segregation number Sr is a parameter, not a measurement. Gray and Thornton's non-dimensional group is supplied, and the honest use is to sweep it and report the sensitivity.
  • It is not a blending optimizer. It evaluates a pile; it does not choose one.
  • It is not plant metal accounting. It stops at the reclaimed stream.

Determinism

A run is a pure function of (parameters, seed). The stream generator is a 32-bit xorshift feeding Box-Muller, written out explicitly rather than using random or numpy, so the same stream can be reproduced bit for bit by an implementation in another language. That is what makes an in-browser mirror of this engine checkable against it.

References

The equations and their provenance:

  • Gray, J.M.N.T. and Thornton, A.R. (2005), A theory for particle size segregation in shallow granular free-surface flows, Proc. R. Soc. A 461, 1447-1473. doi:10.1098/rspa.2004.1420
  • Bak, P., Tang, C. and Wiesenfeld, K. (1987), Self-organized criticality: an explanation of 1/f noise, Phys. Rev. Lett. 59, 381. doi:10.1103/PhysRevLett.59.381
  • Gerstner, W. and Schramm, G. — see docs/ for the blending-bed literature and the measured mixing effects the 1/N comparison is calibrated against.
  • Kumral, M. (2006), Bed blending design incorporating multiple regression modelling and genetic algorithms, J. S. Afr. Inst. Min. Metall. 106, 229-236.

Licence

MIT. See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bedblend-0.3.0.tar.gz (102.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bedblend-0.3.0-py3-none-any.whl (92.1 kB view details)

Uploaded Python 3

File details

Details for the file bedblend-0.3.0.tar.gz.

File metadata

  • Download URL: bedblend-0.3.0.tar.gz
  • Upload date:
  • Size: 102.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for bedblend-0.3.0.tar.gz
Algorithm Hash digest
SHA256 125652c87cdcb5c9b8c2e64d40d052fa1974d8a061a26b0bbee18546971350a3
MD5 5b3996e0a6b34172a856aea7a43560d5
BLAKE2b-256 3c2a45479acc3202c604c8ffc91ccda1a81d3e6fe38f4e5f712a02d015ae5ff3

See more details on using hashes here.

Provenance

The following attestation bundles were made for bedblend-0.3.0.tar.gz:

Publisher: publish.yml on fsantibanezleal/CAOS_BedBlend

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file bedblend-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: bedblend-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 92.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for bedblend-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7cf16af0e278fa6100fd7835ed2d4777281c00ce01f86b393068e9822db64eec
MD5 8a8423a8166eded569735a2f2c63c8ec
BLAKE2b-256 e0fd0c7420950feffa9eb03f427a1200e9ab0d174a28c3a945c05cca66f828b0

See more details on using hashes here.

Provenance

The following attestation bundles were made for bedblend-0.3.0-py3-none-any.whl:

Publisher: publish.yml on fsantibanezleal/CAOS_BedBlend

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page