Skip to main content

Open-source pavement structure and operating-cost analysis toolkit for mine haul roads

Project description

HaulPave

Open-source pavement structure and operating-cost analysis toolkit for mine haul roads.

CI PyPI Python 3.10+ License: MIT

What HaulPave Does

  • Computes traffic loading (CESA and design coverages) from a mining fleet composition.
  • Determines pavement layer thicknesses using USACE CBR and TRH 14 empirical methods.
  • Estimates comparative operating costs (tire, fuel, maintenance) across road surface scenarios.
  • Generates structured design summaries with full versioning metadata.

What HaulPave Does NOT Do

HaulPave is not a complete haul road engineering tool. It does not cover geometric design, drainage, berm design, intersection layout, grade control, or traffic operations. All outputs require review by a qualified engineer. See SCOPE.md.

Installation

pip install haulpave

Quick Start

from haulpave.vehicle_registry import list_all, find_by_id
from haulpave.models.traffic import FleetUnit, TrafficInput
from haulpave.traffic.cesa import compute_cesa
from haulpave.pavement import cbr_thickness_from_coverages
from haulpave.economics import compare_scenarios, RoadScenario
from haulpave.reporting import build_design_summary

# 1. Pick a vehicle from the built-in registry
cat797f = find_by_id("cat-797f")  # Caterpillar 797F, 6104 kN GVW

# 2. Compute CESA from fleet
traffic = TrafficInput(
    fleet=[FleetUnit(vehicle=cat797f.vehicle, trips_per_day=30)],
    design_life_years=10,
    working_days_per_year=250,
)
result = compute_cesa(traffic)
print(f"Design CESA: {result.total_cesa:.2e}")

# 3. CBR pavement thickness
thickness_mm = cbr_thickness_from_coverages(
    subgrade_cbr=8.0,
    design_coverages=result.total_cesa,
)
print(f"Required thickness: {thickness_mm:.0f} mm")

# 4. Compare surface scenarios
scenarios = [
    RoadScenario(name="Asphalt", surface="asphalt", thickness_mm=thickness_mm,
                 haul_distance_km=10, trips_per_day=30),
    RoadScenario(name="Gravel",  surface="gravel",  thickness_mm=400,
                 haul_distance_km=10, trips_per_day=30),
]
comparison = compare_scenarios(scenarios)
for s in comparison.scenarios:
    print(f"{s.name}: fuel ${s.fuel_cost_usd_per_year:,.0f}/yr")

# 5. Build a versioned summary
summary = build_design_summary(
    inputs={"subgrade_cbr": 8.0},
    results={"thickness_mm": thickness_mm},
)
print(summary.package_version, summary.generated_at)

API Overview

Module Key symbols
haulpave.vehicle_registry list_all(), find_by_id(id), VehicleEntry
haulpave.traffic.cesa compute_cesa(TrafficInput)CesaResult
haulpave.traffic.coverages compute_coverages(TrafficInput)CoveragesResult
haulpave.pavement cbr_thickness_from_coverages(), trh14_thickness_from_coverages(), design_pavement()
haulpave.economics compare_scenarios([RoadScenario])ComparisonResult
haulpave.reporting build_design_summary(inputs, results)DesignSummary

Built-in Vehicle Registry

Four OEM mining trucks with GVW and 25/75 front/rear axle-load split (CAT Performance Handbook Ed. 47):

ID Model GVW (kN)
cat-797f Caterpillar 797F 6 104
kom-960e Komatsu 960E 5 925
cat-789d Caterpillar 789D 3 304
cat-785d Caterpillar 785D 2 641

Status

Phase Content Status
Phase 0 — Benchmark Foundation Benchmarks 01–05, Pydantic models, USACE CBR curves ✅ Done (v0.1.0)
Phase 1 — MVP CESA engine, coverages engine, CBR pavement design ✅ Done (v0.1.0)
Phase 2 — TRH 14 + comparison TRH 14 engine, USACE vs TRH 14 comparison ✅ Done (v0.2.0)
Phase 3 — Economics + registry Vehicle registry, rolling-resistance cost model, design summary ✅ Done (v0.3.0)
Phase 4 — Docs + community MkDocs site, case studies, CLI polish ⏳ Planned (2026-Q4)

Design Principles

  • Benchmark-first: every calculation method is tested against hand-computed examples before engine code is written.
  • Confidence labeling: benchmark_tested / method_implemented / experimental on all outputs.
  • Honest documentation: explicit assumptions, limitations, and method references.
  • SI units internally: mm, km, kN, kPa, tonnes — no implicit unit mixing.
  • Open-source hygiene: no proprietary data redistribution; OEM data requires source attribution.

License

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

haulpave-0.3.0.tar.gz (69.9 kB view details)

Uploaded Source

Built Distribution

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

haulpave-0.3.0-py3-none-any.whl (38.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: haulpave-0.3.0.tar.gz
  • Upload date:
  • Size: 69.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for haulpave-0.3.0.tar.gz
Algorithm Hash digest
SHA256 b700b046be88409ad7bfb1c23f1fa4c3b2f9e461426af592488c7e9dadf439c7
MD5 5c545ab8020d2da1686f317b0bc94b25
BLAKE2b-256 bdb29ab59b6e5f65c0c14d1cb10aa076a5d4cd874b66714eb76899dde86b66f6

See more details on using hashes here.

File details

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

File metadata

  • Download URL: haulpave-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 38.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for haulpave-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f6436e8e2ca0e7993f9f3346b201041df842ab28eca6b6d196e54ca3ec828db5
MD5 2861008756e74e85afeda425c9f645bd
BLAKE2b-256 bfe9ede5ec8660074dece9e147e6105cc1dc9ac5610f40a93fbed524add7a65c

See more details on using hashes here.

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