Belly cargo capacity

How much cargo a passenger widebody can take on a long route, how well that is known a month ahead, and how much of it to sell before it is.

Cargo gets whatever weight and volume are left once passengers, bags and fuel are on board. A Boeing 787-9 flies a 9,800 km route daily for a year: see each departure's capacity, how its forecast narrows, and how much cargo to sell ahead. Companion to Air Cargo 101, chapter 10. Route, demand and costs are illustrative; aircraft limits are public.

Departure
or click any day in sections 2 and 4

Loading the route…

How it works

Background

A passenger aircraft's hold is not a fixed amount of space. Cargo gets whatever weight and volume are left once the passengers, their bags and the fuel are on board, and on a long route flown into the wind the fuel can eat into it badly. A Boeing 787-9 flies a 9,800 km route once a day for a year. Each departure's passengers come from a booking curve, its bags from the passengers, and its fuel from the headwind of the day, all within the aircraft's maximum take-off, zero fuel and landing weights from Boeing's airport planning document. The page shows the capacity that results on every departure, how the forecast of it narrows as departure gets closer, which days are payload restricted, and then the decision: how much cargo to sell at each point, when selling too much means offloading it at a cost. That last part reuses the overbooking rule of the cargo revenue management page.

The aircraft and the route

A Boeing 787-9 in a 290-seat, two-class layout. Its limits come from Boeing's airport planning document: maximum design take-off weight 254,692 kg, maximum design landing weight 192,776 kg, maximum design zero fuel weight 181,436 kg, usable fuel 101,522 kg, and a lower deck of 20 LD-3 container positions forward and 16 aft (4.5 m³ each) plus an 11.4 m³ bulk hold. The document doesn't give an operating empty weight, which depends on the airline's cabin; the page assumes a dry operating weight (aircraft, crew, catering and water) of 132,000 kg, which is illustrative. Passengers and bags use EASA's standard masses: 84 kg per adult including hand baggage and 15 kg per checked bag on an intercontinental flight. The route, 9,800 km flown at a true airspeed of 900 km/h, is illustrative, as is everything below except where a source is named. All inputs are in bellycapacity.json.

Fuel

The flight time is t = distance ÷ (900 − headwind) + 0.4 h for taxi, climb and descent. The fuel model is the Breguet range equation in its simplest form: each hour of flight burns a fixed share k = 2.5% of the aircraft's weight, so take-off weight ÷ landing weight = ekt. The aircraft lands with a reserve R = 7,000 kg (alternate airport and final reserve) plus a 5% contingency it usually doesn't use. With a = (ekt − 1) ÷ (1 − 0.05 (ekt − 1)), the trip fuel for a zero fuel weight Z is a (Z + R), the take-off weight is (Z + R)(1 + 1.05 a) and the landing weight (Z + R)(1 + 0.05 a). Each weight limit then gives a highest zero fuel weight, and the cargo it allows is that minus the dry operating weight, the passengers and the bags. With a full cabin, its bags, no cargo and no wind, the model's aircraft could fly about 13,700 km at its maximum take-off weight, under the 15,370 km Boeing quotes for the 787-9 (Boeing doesn't say what load that figure assumes).

Volume. The first 70 bags go in the bulk hold and the rest 40 to an LD-3; every other position takes cargo, filled to 80% of its volume because freight never packs perfectly. At the route's average density of 165 kg per m³, a position holds about 594 kg. The cargo capacity is the smaller of what the weight limits allow and the volume times that density. A real load planner works in both dimensions at once (see cargo revenue management); one number in kilos keeps this page readable.

The year of departures

Passengers. The airline accepts up to 300 bookings for the 290 seats. A departure's demand is a Poisson draw whose mean varies with the season (260 bookings in late January to 300 in late July) times a gamma factor with a 12% coefficient of variation. Each request's booking time follows the curve: the share made at least h days out is 1 ÷ (1 + (h ÷ 35)1.6), so half are made by 35 days out, 56% by 30, 93% by 7 and over 99% by 1. 96% of those booked turn up, and no more than 290 board. See the booking curve page for how real ones are built.

Bags. 1.05 checked bags per passenger in winter to 1.25 in summer, with a 0.08 spread from flight to flight, known only at check-in.

Headwind. The average headwind component on the route goes from 100 km/h in late January to 15 km/h in late July. Each day adds an anomaly with a 30 km/h spread that carries over from one day to the next (correlation 0.75), so windy days come in spells.

The forecast

At h days out the forecaster knows the bookings so far, Bh, and draws everything else 600 times (400 for the year-long sections, 1,500 for the revenue curves in section 5). Passengers still to book: the demand level is updated from the bookings so far (a gamma prior and Poisson bookings give a gamma posterior with shape k + Bh and rate k + μ F(h), where F(h) is the booking curve and k = 1 ÷ 0.12²), then the remaining bookings are a Poisson draw, then the no-shows a binomial one. Bags are drawn from the season's bag rate. Wind: a forecast made h days ahead explains a share s(h) of the day's anomaly: 90% at 1 day, 80% at 2, 50% at 5, 30% at 7, 10% at 10 and nothing from 14 days on. The forecaster's headwind is the season's average plus s times the forecast anomaly, with the remaining spread √(1 − s) × 30 km/h. The forecasts are built so that they only ever sharpen as departure gets closer. These skill figures are illustrative, but the shape, useful to about a week and good at two days, is how weather forecasts behave. "Where the uncertainty comes from" redraws one source at a time with the other two held at their averages.

How much to sell

Selling L kilos earns r per kilo flown and costs c per kilo offloaded. The cargo tendered is T L, where the tender ratio T (no-shows and short tenders together) averages 0.82 with a 0.07 spread, and the capacity C is the forecast. Net revenue is r min(T L, C) − c (T L − C)+. One more kilo sold adds r × T when it fits and loses c × T when it doesn't, so the best limit L* is the point where the tender-weighted chance that it doesn't fit, P(T L > C), equals r ÷ (r + c). The page finds it exactly from the forecast draws: sort them by C ÷ T and take the tender-weighted quantile at r ÷ (r + c). It is the critical-fractile rule of booking limits (overbooking) and of the cargo overbooking in cargo revenue management, here in one dimension.

The five policies in section 5: sell to the forecast (limit = average forecast capacity, no overbooking); overbook to the average (average forecast capacity ÷ 0.82, the worked example in Air Cargo 101, chapter 08); the rule, set once 30 days out; the rule, re-set at each checkpoint (30, 21, 14, 10, 7, 5, 3, 2 and 1 days out); and, as a benchmark no airline has, the rule with the capacity known in advance, where only the tender is uncertain. Cargo requests for a departure total 1.6 times the year's average capacity times a lognormal factor with a 25% spread, and arrive late: the share that has arrived by h days out is 1 ÷ (1 + (h ÷ 5)1.6), so 5% by 30 days, 37% by 7 and half in the last 5 days. Each departure's actual tender ratio is drawn once and shared by all five policies.

Everything runs in your browser from a seeded generator (mulberry32), so the page opens on the same year every time. scripts/bellycapacity/check.js runs the same code, copied from this page, in Node: it prints the year's figures and checks the booking-limit rule against a brute-force search.

Sources

Limitations

This is a personal project and isn't affiliated with any airline.