Chargeable weight & ULD build-up
Which shipments to put in a widebody's lower deck, and why loading the best-paying cargo first can leave weight or space unused.
Cargo pays on its chargeable weight, actual or volumetric, whichever is higher, but the hold fills with real kilos and cubic metres in containers and pallets (ULDs). Load 40 shipments into an A350-900 lower deck by hand, or with best rate first or mix dense and light. It goes with Cargo 101, chapter 03.
The shipments, their rates, tonight's weight allowance, the positions' distances from the reference point and the centre-of-gravity window are all illustrative. The sizes and weights of the containers and pallets, and the number of each that fit in the hold, come from the manufacturers' sources listed at the bottom.
Loading the shipments…
1. Forty shipments, two kinds of kilo
Each shipment is a number of identical pieces with a size, a weight and a rate per chargeable kilo. Light cargo pays on its volume, so it is charged for more kilos than it weighs; dense cargo pays on its weight and leaves space empty. Together they ask for more than tonight's flight can take, in both weight and space, so something stays behind.
Weight against volume
Click a shipment to add it to your own load or take it offThe list
Tick a box to build your own load in section 2. Click a heading to sort.2. Build the load
Each loaded shipment is packed piece by piece: first into containers and pallets already started, then into new ones, until every position is used or the weight runs out. A shipment flies whole or not at all. The built containers and pallets are then put in positions, and the cargo's centre of gravity is checked against a window around the reference point.
The lower deck, seen from above
Nose on the left. Hover or tap a container or pallet for its contents.3. Best rate first, or mix dense and light
Loading the best rate per chargeable kilo first sounds right, and on this list it means light cargo first, because e-commerce and garments pay the highest rates. The space runs out while there is weight to spare, and the dense cargo that could have used it stays behind. Mixing charges each shipment for the share of the remaining weight and the remaining space it would take, so it steers the load towards the corner where both run out together.
How the hold fills, shipment by shipment
Gross weight against cargo volumeThe two loads side by side
The same list in all four hold layouts
Containers give more space per metre of hold; pallets carry more weight per position and take pieces too long for a container. Revenue per flight, illustrative.
4. Over 1,000 shipment lists
One list can be lucky. The same two rules were run on 1,000 generated lists of 40 shipments, for every hold layout and weight allowance. The gap depends on how short of weight the flight is and on the layout. With a tight allowance and a hold of containers, weight is the only limit and loading by rate does about as well. With weight to spare, or with pallets, which hold less, loading by rate fills the space with light cargo and leaves kilos unused.
Mixing against best rate first, list by list
Average revenue per flight
1,000 lists, balanced positionsHow it works
Background
Air cargo pays on its chargeable weight: the actual weight, or its volume counted at 166.67 kg per cubic metre, whichever is higher. But the hold fills with real kilos and real cubic metres, packed into containers and onto pallets of fixed sizes, called unit load devices (ULDs). 40 generated shipments, some dense, some standard, some light, compete for a lower deck laid out like an A350-900's. Load them by hand, or let one of two simple rules do it: best rate first, or mix dense and light so that the weight and the space run out together. The cargo revenue management page makes the same trade-off booking by booking, with bid prices.
Chargeable weight
IATA's general rule is to divide a shipment's volume in cm³ by 6,000 to get its volume weight, and to charge on whichever is higher, the volume weight or the actual weight. For a shipment of w kg and v m³: cw = max(w, 166.67 v), and revenue = rate × cw. Cargo denser than 166.67 kg per m³ pays on its weight; lighter cargo pays on its volume. No rounding is applied (in practice, carriers round chargeable weight up to the next half kilo or kilo).
The 40 shipments
Every list has 12 dense, 16 standard and 12 light shipments, in a random order, drawn from a seeded generator (mulberry32) so the page opens on the same list every time; "New list of 40" moves to the next seed. A shipment is n identical pieces. For each profile (all in uldbuild.json, all illustrative):
Each piece's three sides are the profile's typical sides times a lognormal factor (20% spread), kept between 20 and 300 cm; 30% of dense shipments have one long side of 175 to 290 cm, too long for an LD3. The shipment's total volume is drawn around the profile's typical volume (lognormal), and the number of pieces is that volume divided by one piece's, rounded, between 1 and 80. The density (lognormal around the profile's) sets the weight of a piece, to the half kilo. The rate is lognormal around the profile's rate with an 8% spread.
The hold
The layout is that of an A350-900's lower deck in Airbus's aircraft characteristics document: the forward hold takes 20 LD3 containers or 6 pallets of 96 × 125 in, the aft hold 16 LD3s or 5 pallets, over 16.2 m and 13.6 m. The page offers the four combinations of those standard loads. Mixed loads within one compartment are possible on real aircraft but aren't modelled. The bulk hold at the back, where loose bags and small pieces go, is left out.
Two figures are assumptions rather than published numbers: a pallet in the lower deck is built to about 160 cm, the height of the hold under the contour (an LD3, built for the same hold, is 161.6 cm tall), and its usable volume is taken as 11.5 m³, less than its 7.74 m² base times that height because the lower deck's contour cuts the corners. Boxes never fill a container exactly, so only 85% of each ULD's internal volume can hold cargo (the stowage factor, an assumption).
The weight available is what the flight can take tonight in the lower deck, cargo plus the ULDs' own weight. It depends on the passengers, their bags and the fuel, and the three settings are illustrative.
Build-up
A piece fits in an LD3 if, with its sides sorted from longest to shortest, they are at most 150, 135 and 135 cm, so that it passes the 139 × 155 cm door with some clearance; on a pallet, at most 310, 238 and 155 cm (both limits are assumptions). Loading a shipment goes piece by piece: first into containers and pallets already started (the tightest one that can take all the pieces left, otherwise the one with the most room, so a shipment is spread over as few as possible), as long as the ULD's net weight (maximum gross weight minus tare), its stowable volume and the flight's weight allowance allow; then into new ones, an LD3 if the pieces fit in one and an LD3 position is free, otherwise a pallet. Starting a ULD adds its tare to the flight's weight. If a piece can't be placed, the whole shipment is taken off again and marked as left behind, with the reason.
Best rate first tries the shipments in order of rate per chargeable kilo, highest first. Mix dense and light repeatedly picks, among the shipments not yet tried, the one with the highest revenue per share of what is left: R / (w / Wleft + v / Vleft), where Wleft is the weight allowance not yet used and Vleft is the stowable volume still free, in started ULDs and free positions. A dense shipment uses a large share of the weight and a small share of the space, a light one the opposite, so as soon as one resource gets scarcer than the other, the shipments that lean on the other one rise to the top. It is the same idea as the two bid prices on the cargo revenue management page, without solving a linear program. Your pick starts from the load on screen and loads the ticked shipments with the same build-up rules, in the order they were loaded, then each new tick in the order it was added.
Neither rule is optimal. The best load is a two-dimensional bin-packing problem with a knapsack on top, and with some lists and a tight allowance, best rate first comes out a little ahead.
Positions and centre of gravity
Each position has an arm, its distance in metres from a reference point near the wing (negative forward). The forward hold is placed from −18.5 m to −2.3 m and the aft hold from +3.2 m to +16.8 m, and positions are evenly spaced in each. These arms are illustrative, not the A350's. Balanced takes the built ULDs from heaviest to lightest and puts each in the free position that keeps the cargo's total moment (weight × arm) closest to zero. Front to back puts them in the order they were built, from the nose backwards. The cargo's centre of gravity is Σ weight × arm / Σ weight, and the check passes if it lies within ±2.5 m of the reference, an illustrative window.
Section 4 is precomputed by scripts/uldbuild/precompute.js with the same code as this page, on lists 1 to 1,000, for every hold layout and weight allowance, and stored in uldbuild-batch.json. The script also checks every load: no ULD over its maximum gross weight or stowable volume, no flight over its allowance, every piece in a ULD it fits in, and no position used twice. Sections 1 to 3 run live in your browser.
Sources
- IATA, "Air cargo tariffs and rules: what you need to know" (July 2021): the volume divisor of 6,000 cm³ per kg and chargeable weight as the higher of volume and actual weight (checked October 2026).
- Avius ULD, AKE lower deck containers: base 1,534 × 1,562 mm, height 1,616 mm, maximum gross weight 1,588 kg, internal volume 4.30 m³ (checked October 2026).
- VRR, AKE/QKE container: tare 54 kg for its lightweight fire-resistant model (aluminium AKEs weigh more), door opening 1,393 × 1,546 mm; and PMC pallet: base 2,438 × 3,175 mm, maximum gross weight 6,804 kg, tare 88 to 101.5 kg depending on thickness (checked October 2026).
- ACL Airshop, ULD container specifications: the LD3 as a widebody lower-deck container, 1,626 mm tall, 4.3 m³ internal volume, 1,588 kg (checked October 2026).
- Airbus, A350-900 Aircraft Characteristics, Airport and Maintenance Planning, preliminary data, revision of December 2012, section 2-6: forward hold 20 LD3s or 6 pallets of 88 or 96 × 125 in, aft hold 16 LD3s or 5 pallets, compartment lengths 16.221 m and 13.578 m. Airbus publishes the current edition on its aircraft characteristics page.
- Charts drawn with D3 7.9.0.
Limitations
- Packing is by volume, with a fixed stowage factor and a size check per piece. Real build-up is three-dimensional: pieces are stacked, some can't be turned or have things put on top, and how well a ULD is filled depends on the mix of shapes inside it. A real build-up can do better or worse than 85%.
- Weight and balance is reduced to one centre-of-gravity check on the cargo alone, against an illustrative window. A real load sheet works with the whole aircraft (passengers, bags, fuel and how it burns off), uses the aircraft's own weight-and-balance envelope, and also checks the weight limit of each position, each compartment and the floor per running metre and per square metre, which are often well below a pallet's own maximum gross weight. None of those is modelled.
- A shipment flies whole or not at all. Carriers do split large shipments across flights, and a forwarder may tender pre-built ULDs, which this page doesn't cover.
- Each hold layout is one of the standard all-container or all-pallet loads per compartment. Real aircraft can mix them, and passengers' bags take some of the containers in the forward or aft hold.
- Dangerous goods, live animals, perishables and temperature-controlled cargo have their own positions, separation rules and ULDs, and aren't modelled. Neither are the costs of handling, building and flying the ULDs, so "revenue" here is what the shipments pay, not the profit of carrying them.
- The rates are given. A cargo revenue management system would instead price or accept each shipment against the value of the weight and the space it takes, before anything reaches the warehouse (see Cargo 101, chapter 07 and the cargo revenue management page).
This is a personal project and isn't affiliated with any airline.