Main Engine Performance
Main engine health, TSI-grade.
A 5% SFOC drift means several hundred dollars per day at sea — at scale, hundreds of thousands per year per vessel. A late cylinder overhaul means an engine failure at sea. The Main Engine Performance pipeline turns raw monthly data into something a Technical Superintendent can act on without reading every file.
Three stages
Collect telemetry → Analyse deviations → Escalate to TSI- Collect — ERP monthly performance reports, engine register, PMS counter feed; two collector modes (standard and microapp-with-visuals).
- Analyse — cylinder uniformity, SFOC variance, pressure deviation, turbocharger efficiency, overhaul countdown, and a six-month parameter rollup.
- Escalate — composite verdict routes HIGH or CRITICAL cases to the Technical Superintendent with evidence and recommended actions.
Key concept — cylinder uniformity
Even cylinder loading is the single most important indicator of engine health. A cylinder running hotter than its neighbours points to a fuel-injector defect, a stuck exhaust valve, or piston-ring blow-by — usually weeks before the engine itself flags an alarm.
Deviation per cylinder against the engine mean:
ΔTᵢ = Tᵢ − mean(T)
OK |ΔTᵢ| ≤ 30 °CWARNING 30 °C < |ΔTᵢ| ≤ 50 °CCRITICAL |ΔTᵢ| > 50 °CA cylinder that is hot and has low Pmax is the classic exhaust-valve signature. A cylinder that is hot and has high Pmax usually points to fuel-injector overdelivery.
Worked example — MV ONE ATLAS
IMO 9290127, MAN 8K90 MC-C. After a refresh:
| Domain | Finding |
|---|---|
| Cylinder uniformity | Cylinder 5 exhaust temp 38 °C above mean — WARNING |
| SFOC | 6.8% variance over design at 75% MCR, sustained 3 months |
| Pressure | Cylinder 5 Pmax 12 bar below mean, Pcomp normal — fuel-injector overdelivery |
| Turbocharger | η_tc down 9% over 3 reports — cleaning recommended |
| Overhaul | Cylinder 5 top-end overhaul in 380 hours — escalate |
Composite verdict: HIGH. The pipeline sets the escalation flag, updates the case to awaiting-tsi-review, and sends an A2A message to the TSI inbox:
- Schedule cylinder 5 fuel-injector replacement at next port — coordinate spares.
- Schedule turbocharger water wash within 7 days; wet-cleaning at next port.
- Plan cylinder 5 top-end overhaul at the next docking window — book superintendent attendance.
Under the hood
Data collected per report
| Domain | Data |
|---|---|
| Engine state | Running hours, RPM, load, power output |
| Per-cylinder | Pmax, Pcomp, exhaust temp, FW inlet/outlet temp, PCO outlet |
| Combustion | Mean indicated pressure, peak pressure, scavenge pressure |
| Aspiration | Turbocharger speed, boost pressure, exhaust back-pressure |
| Maintenance | Hours since last cylinder, top-end, and major overhaul |
| Alarms | Active alarms with severity at sample time |
The standard collector pulls the latest performance entry from the ERP feed. The microapp collector additionally captures polynomial baseline curves, shop-trial overlays, and tab-by-tab screenshots — used when a review will be referenced by a charterer or in a Class dispute.
SFOC variance and overhaul timing — formulas
SFOC is load-dependent — comparing raw values across operating points produces nonsense. Variance is always normalised to the maker’s design curve at the current load:
Variance % = (SFOC_actual − SFOC_design(P)) / SFOC_design(P) × 100A 3-point moving average smooths month-to-month noise. Persistent variance above 5% is flagged; above 8% triggers escalation.
Hours-to-next overhaul:
H_remaining = H_interval − (H_current − H_last_overhaul)| H_remaining | Status |
|---|---|
| < 0 | Overdue — CRITICAL |
| 0 to 500 | Imminent — escalate |
| 500 to 2000 | Port-call coordination |
| ≥ 2000 | Healthy |
Turbocharger efficiency ratio:
η_tc = P_boost / P_exhaust_backA falling η_tc across three reports is flagged for cleaning regardless of whether either pressure is individually outside spec.
Pressure deviation — failure-mode map
| Pattern | Likely cause |
|---|---|
| Pmax low + Pcomp normal | Fuel injector overdelivery / late timing |
| Pmax high + Pcomp high | Excessive compression — piston ring overhaul candidate |
| Pmax normal + Pcomp low | Compression loss — exhaust valve or ring pack |
| Scavenge low + exhaust back-pressure high | Turbocharger fouling |
| Scavenge low + cooler ΔT low | Scavenge cooler fouling |
Six-month rollup — code snapshot
Trend matters more than spot values. The analyzer builds a rolling six-month grid per cylinder per month, surfacing both missing reports and parameters whose mean is drifting.
# Build a six-month grid keyed by (cylinder, month)for unit in sorted(all_units): unit_row = {"units": unit}
for month_date, month_label in zip(six_months_dates, six_months_labels): performance = performance_data.get(month_date)
if performance == "No Data Available": current = (month_date.month == datetime.utcnow().month and month_date.year == datetime.utcnow().year) unit_row[month_label] = "Report yet to be submitted" if current \ else "Missing Report" continue
unit_data = next( (u for u in performance["data"]["parameter"] if u.get("ENGPERTRANSLINENO") == unit), None ) unit_row[month_label] = ( round(unit_data[parameter_key], 2) if unit_data and unit_data.get(parameter_key) is not None else "No Data Available" )“Report yet to be submitted” = current month, expected gap. “Missing Report” = past month — a compliance problem.
Escalation triggers
| Trigger | Severity |
|---|---|
| Cylinder deviation above 50 °C | CRITICAL |
| Cylinder overhaul overdue | CRITICAL |
| SFOC variance above 8% sustained | HIGH |
| Turbocharger boost low + exhaust high | HIGH |
| Peak pressure outside maker spec | HIGH |
| Three or more missing monthly reports | HIGH |
Why script-driven
Cylinder-deviation maths, SFOC-curve normalisation, and pressure-spec lookups all live in deterministic Python. The model interprets results into narrative; it doesn’t recompute. A review of ONE ATLAS this month and the same review next month produce identical numbers given identical inputs — the only way an audit trail holds up.