Skip to content

Tribological wear resistance estimator: a zero-hassle CLI utility for rapid abrasive and erosive wear estimation (terminal plots + 3D viz) directly from STEP parts. It is ideal for engineers and researchers who need fast, reproducible wear estimates without endless lab trials.

License

Notifications You must be signed in to change notification settings

dmtkac/knowera-wearcheck

Repository files navigation

Wearcheck: tribological wear resistance estimator

Created for "Knowera" by Dmytro Tkachivskyi, PhD

Table of contents

Short description

Wearcheck is a zero‐hassle cross-platform CLI (command line interface) tribological utility for quick abrasive or erosive mechanical wear‐risk estimates on CAD parts. A conjunction of Archard's equation (modified for erosion and 3-body sliding or abrasion wheel cases), β-curve distribution function and FreeCAD software is used for accurate wear prediction.

Screenshots

Erosive wear in terminal

Image 1. Determining erosion of AISI 316L steel in terminal under 42° impact angle, using theoretical β-distribution curve

Abrasion wear in 3D

Image 2. Visualising sliding abrasive wear of Hardox 400 steel in 3D

Erosive wear in 3D

Image 3. Visualising aribitrary heat map during erosive wear of TiC-NiMo + AISI 316L cermet in 3D

Theoretical Erosive wear and heat map in 3D

Image 4. Theoretical erosive wear and heat map of ICE's parts with complex geometry. (It would be impossible to check them for the given conditions in real life)

Elaborate description

Wearcheck is a single-command “what-if” calculator for mech­anical wear of part of any geometrical complexity. It is aimed at engineers who need a first-order answer now, long before a full DOE or dozens of ASTM/GOST (and other standards) coupons can be scheduled.

Use Wearcheck when you do care about wear, but don’t have the calendar, budget or lab capacity to test every permutation:

  • One command in terminal gives almost instant answer: the script converts the STEP to a mesh, shoots rays to find exposed facets, applies an angle-weighted Archard/β-model, and prints:
    • predicted volume loss & risk tier;
    • a plain-text angular wear curve (abrasion or erosion);
    • an optional colour map on the real geometry.
  • Explore the full design space: vary load, speed, particle flow, material, impact angle without cutting a single extra coupon.
  • Bridge data gaps: when only one ("Time" value for ARWW) or two reference points (30° and 90° for AEW) exist, Wearcheck fits a smooth β-distribution so you still see the whole curve.
  • No heavyweight CAE or GUI: everything is CLI-friendly and runs on commodity hardware; FreeCAD is only called in head-less mode.
  • Fully portable: the system takes up 2 minutes to set up and works on any machine with Python ≥ 3.9 and FreeCAD ≥ 0.21.

Features

Flag / Argument What it means Default / Notes
Positional STEP / STL / OBJ The 3-D part to analyse. Omit it and the bundled 25 × 50 × 10 mm coupon is used.
--mat, --material Material under test   (key in materials.json) mandatory
--wt, --wear-type Mechanism: abrasion (3-body sliding) or erosion (particle impact) abrasion
--impact X Y Z / --angle ° Attack direction - either a full 3-D vector (--impact) for real parts or a simple polar angle (--angle) for flat coupons. required for erosion
--med, --medium Abrasive / erodent name  (key in erodents.json) Silica_Sand
--load Normal load W (N) – abrasion only 130 N
--velocity, --vel Particle or belt speed v (m · s⁻¹) v_ref from erodent DB
--feed-rate, --fr Mass flow rate (g · s⁻¹) mandatory
--time, --t Exposure duration t (s) mandatory
--visualize, --vis Show a PyVista 3-D scene with risk map, scalar bar, hot/cold toggle, grid & camera shortcuts. off
--interactive, --int Prompt for calibration of custom LOW / MEDIUM / HIGH risk thresholds. off
Keyboard hot-keys in viewer G grid, M wear ⇄ heat, I screenshot, 1–9 preset views.

Assumptions

  • Erosive mode
    --angle ( -a ) or --impact x y z (--imp x y z) describe only the polar angle θ between the abrasive jet and the horizontal plane. The auxiliary angles β and δ, and particles flying distance defined in the standard (e.g., GOST 23.201-78) are already absorbed into the fitted Archard/β coefficients; you do not enter them separately.

  • Abrasive (sliding) mode
    The mechanical wear volume predicted by the 3-body Archard equation is mapped as a uniform thinning over the test surface. In real ASTM G65 tests the scar is oval-shaped and centred; the visual map therefore differs, but the total wear (mm³) and the wear rate (mm³/N·m) are calibrated to match reference coupon results as closely as possible.

  • Coated parts (HVOF spraying, cladding, etc.)
    When your material is a coating on a substrate (not a solid block like Hardox 400), the predicted wear depth refers to how much of that coating layer is removed. Always compare the script’s estimated wear height on the test surface to your known coating thickness — if the wear depth exceeds the layer thickness, the substrate would be exposed in a real test.

Prerequisites

  • Python ≥ 3.9 (to check run "python3 --version" and "pip3 --version");
  • FreeCAD ≥ 0.21 (to check run "freecadcmd --version" or "freecadcmd --v).

Getting Python

  • Windows
    Download and run the official installer from https://www.python.org/downloads/windows/ and make sure to check “Add Python 3.x to PATH” during installation

  • Linux

    sudo apt update && apt install python3 python3-venv python3-pip  # Debian-based
    
    sudo dnf install python3 python3-virtualenv python3-pip # Fedora/RHEL
  • MacOS

    brew install python

Getting FreeCAD

  • Windows
    Download and run the official installer of FreeCAD desktop package from https://www.freecad.org/downloads.php and make sure to check “Add FreeCAD to PATH” during installation

  • Linux

    sudo apt update && sudo apt install freecad # Debian-based
    
    sudo dnf install freecad # Fedora/RHEL
  • MacOS

    brew install freecad

Wearcheck package installation

If this is familiar for you, clone the repository; otherwise download and unzip the following archive:

curl -LO https://github.com/dmtkac/knowera-wearcheck/archive/refs/heads/main.zip

# first time using
cd ~/path/to/the/unzipped/archive # switch to where archive was unzipped
python3 -m venv .venv # create virtual environment in the current directory (only first time)
source .venv/bin/activate # activate virtual environment in the current directory
pip install -e . # install dependencies

# subsequent using
cd ~/path/to/the/unzipped/archive # switch to where archive was unzipped
source .venv/bin/activate # activate virtual environment in the current directory

wearcheck --mat "Hardox 400" ... # run with standard 25x50x10 mm step part
wearcheck "/path/to/part.step" --mat "TiC-NiMo + AISI 316L" ... # run with any custom part on the system

wearcheck --help # call help if needed

deactivate # exit virtual environment

Adding your own data

Adding new material (materials.json)

Fill 7 keys per material: hardness_MPa, wear_k, e30, e90, beta_a, beta_b; (optionally keep hardness_HV or hardness_HBW for reference).

Step What you measure / calculate JSON field(s) you fill
1. Hardness Any scale is OK (HV, HBW, GPa)  → convert to MPa:
MPa = HV × 9.807   or   MPa = HBW × 9.807
"hardness_MPa": …
(optionally, keep the raw number, e.g. "hardness_HV": …)
2. Abrasion coupon (ASTM G65) Measure coupon volume loss Q_exp (mm³). Note load W [N], sliding distance L [m], abrasive mass M [kg].
3. Archard 3-body factor wear_k = (Q_exp · H_MPa) / (W · L · M) "wear_k": …
4. Erosion coupons Air-jet / slurry tests on flat coupons at 30 ° and 90 °. Record AEW (mm³ / kg). "e30": … "e90": …
5. β-curve shape Tweak beta_a > 1, beta_b > 1 until the theoretical curve crosses your e30 & e90 points smoothly. (Use e30 = e90 = 1 temporarily while tuning.) "beta_a": … "beta_b": …
6. Insert block e.g., Cr3C2-Ni
"Cr3C2-Ni": {
  "hardness_HV": 1270,
  "hardness_MPa": 12446,
  "wear_k": 41.61e5,
  "e30": 8.956e7,
  "e90": 13.89e7,
  "beta_a": 1.2,
  "beta_b": 1
}

Verify

wearcheck "Cr3C2-Ni" --wt erosion   --med "Silica Sand"  --a 42   --vel 40   --fr 2.5   --t 2400
wearcheck "Cr3C2-Ni" --wt abrasion   --med "Silica Sand"  --vel 2.4   --fr 6.17   --t 300

Adding new erodent (erodents.json)

Each abrasive / erodent entry needs only two values:

Key Meaning Example
factor Relative aggressiveness (dimensionless).
1.0 is the baseline “Silica Sand”.
Wear volume predicted by the model is multiplied by this factor.
Silica Sand → 1.00
White Alumina → 1.73
v_ref Reference particle speed (m · s⁻¹) at which your empirical e30/e90 were measured.
The code scales wear with ((v / v_{ref})^{n}) where n defaults to 2 or is given per material.
40.0 m/s

Determining erodent aggressiveness factor

  1. Run the same coupon test (30 ° or 90 °) with the baseline sand and with your new abrasive;
  2. Compute the ratio of volume-loss per kilogram: factor = AEW_alumina_30/AEW_silica_30 (or AEW_alumina_90/AEW_silica_90);
  3. Round to two decimals and enter as "factor";
  4. Add to erodents.json:
{
  "Silica Sand"  : { "factor": 1.00, "v_ref": 40.0 },
  "Alumina Wheel": { "factor": 1.73, "v_ref": 60.0 },
  ...
}

How was the Alumina factor determined (1.73)?

Once Cr3C2–Ni entered the materials library in materials.json, it became possible to run wear predictions under identical β-curve calibration for both Silica Sand and an Alumina Wheel at the speed used in AEW dataset (in this case 60 m/s) over the 30°–90° range (in this case only AEW_30 and AEW_90 were used). Comparing silica-simulated wear rate to published AEW data, which used alumina wheel, revealed that Cr3C2–Ni lost about 73% more volume per kilogram with alumina than with silica under the same conditions. That directly yields the 1.73 aggressiveness factor for the Alumina Wheel entry.

Verify

wearcheck "Hardox 400" --wt abrasion --med "Alumina Wheel" --vel 3.2 --fr 4.5 --t 600 
wearcheck "TiC-NiMo + AISI 316L" --wt abrasion --med "Alumina Wheel" --vel 2.4 --fr 6.0 --t 300

Story behind Wearcheck

This tool is a product of R&D interest of Knowera enterprise (for whom Wearcheck I initially developed it back in 2022) and background from my PhD research on sliding and impact wear of HVOF-sprayed hardmetal/steel composites. In 2024 it was decided to share project's version 0.1.0 source code with the scientific/coding community. Most of the materials database (Hardox 400, AISI 316L, TiC-NiMo + 316L) comes directly from my own coupon work-ups. An additional entries (material Cr3C2-Ni and erodent Alumina Wheel) were incroprated from my colleagues' research (I. Hussainova et al., 2007) to show that the same β-curve/Archard framework adapts to any "material + medium" pair once two calibration points are known.

Wearcheck is therefore both:

  • a personal lab notebook distilled to code, and
  • a generic template other researchers can extend with their own materials.json rows and erodent descriptions.

Licensing

This work is licensed under the MIT License.

Support this project

If this utility helps you save machine time or sparks ideas for your own experiments, please cite it — or better, contribute your data back to the library or codebase, so it keeps growing, enriching FOSS ecosystem.

Also, if you enjoyed this project or found it useful, consider supporting me! Your donations help me to maintain and develop future improvements.

Donate with PayPal button

Donate with Crypto

About

Tribological wear resistance estimator: a zero-hassle CLI utility for rapid abrasive and erosive wear estimation (terminal plots + 3D viz) directly from STEP parts. It is ideal for engineers and researchers who need fast, reproducible wear estimates without endless lab trials.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages