# BSTART-TRB

**Cylindrical/Tapered Roller Bearing Slice Stress Calculation Module**

A high-performance Python package for calculating contact stress distribution in roller bearings using the slice method with Fortran computational core.

## Features

- 🚀 **Fast Fortran Core**: Compiled Fortran code via f2py for optimal performance
- 📦 **Pre-compiled Binary**: No Fortran compiler required for installation
- 🎯 **Type-Safe**: Complete type hints and IDE support
- 🔬 **Accurate**: Uses influence coefficient method based on elastic contact theory
- 📊 **Flexible**: Supports various crown types (linear, circular, logarithmic)

## Installation

```bash
pip install bstart-trb
```

**Note**: This package includes pre-compiled binaries for Windows (x64). Support for other platforms coming soon.

## Quick Start

```python
from slice_wrapper import (
    slice_stress,
    RollerParams,
    RacewayParams,
    CrownType,
    RacewayType,
)

# Define cylindrical roller parameters
roller = RollerParams(
    d1=10.0,              # Small end diameter (mm)
    d2=10.0,              # Large end diameter (mm)
    length=9.6,           # Effective length (mm)
    alfa=0.0,             # Half cone angle (degrees)
    tilt=0.0,             # Tilt angle (degrees)
    crown_type=CrownType.LOGARITHMIC,
    curve_q=14100.0,      # Design load (N)
)

# Define outer ring raceway parameters
raceway = RacewayParams(
    diameter=-150.0,      # Negative for concave surface (mm)
    raceway_type=RacewayType.OUTER,
    fai=0.0,              # Half cone angle (degrees)
)

# Calculate slice stress distribution
result = slice_stress(roller, raceway, load=1340.86, n_slice=30)

# Access results
print(f"Max stress: {result.max_stress:.0f} MPa")
print(f"Contact deflection: {result.deflection:.6f} mm")
print(f"Stress uniformity: {result.stress_uniformity:.2%}")
print(f"Contact slices: {result.contact_slices}/{result.n_slice}")
```

## What is Slice Calculation?

The slice method divides the roller-raceway contact into multiple slices along the roller length to accurately calculate stress distribution. This is essential for:

- Capturing edge stress concentration effects
- Analyzing the impact of crown modifications
- Predicting bearing life more accurately
- Understanding load distribution along roller length

## Key Parameters

### Roller Parameters

- `d1`, `d2`: Roller diameters (mm) - equal for cylindrical rollers
- `length`: Effective roller length (mm)
- `alfa`: Half cone angle (degrees) - 0 for cylindrical rollers
- `tilt`: Roller tilt angle (degrees)
- `crown_type`: Crown modification type
  - `STRAIGHT`: No crown modification
  - `CIRCULAR`: Circular crown
  - `LOGARITHMIC`: Logarithmic crown (recommended)
- `curve_q`: Design load (N) for optimal stress distribution

### Raceway Parameters

- `diameter`: Raceway diameter (mm) - negative for outer ring (concave)
- `raceway_type`: `INNER` or `OUTER`
- `fai`: Raceway cone angle (degrees)

### Calculation Parameters

- `load`: Applied load on roller (N)
- `n_slice`: Number of slices (default 30, max 50)

## Theory

This package implements the **influence coefficient method** based on elastic half-space contact theory:

1. Discretizes roller into slices
2. Calculates elastic coupling between slices (influence coefficient matrix)
3. Solves linear system using Gaussian elimination
4. Iterates to convergence for contact area and load balance

The method is more accurate than simplified Hertz formulas as it accounts for:
- Elastic coupling between slices
- Dynamic contact area determination
- Edge loading effects
- Crown modification influence

## Requirements

- Python >= 3.12
- NumPy >= 2.0.0

## Platform Support

| Platform | Status |
|----------|--------|
| Windows (x64) | ✅ Supported |
| Linux | 🚧 Coming soon |
| macOS | 🚧 Coming soon |

## License

MIT License - See LICENSE file for details.

## Author

Gu Lei

## References

- Harris, T.A., Kotzalas, M.N. - *Rolling Bearing Analysis*, 5th Edition
- Johnson, K.L. - *Contact Mechanics*
- ISO/TS 16281:2008 - Rolling bearings calculation methods

## Contributing

Contributions are welcome! Please feel free to submit issues or pull requests.
