Why Mexico City is hard to simulate
SECTOR’s engine carries assumptions about altitude that I never set on purpose. They are sea-level assumptions, and they were easy to get wrong without noticing, because so much of what I build and test against sits low, KJFK most of all. Mexico City does not sit low. The valley floor is at 7,316 feet, and the assumptions failed one at a time.
I am not the controller here and not an authority on the airspace. I am the guy trying to make the place run as software, which is a different problem from flying it. Mexico City is the hardest version of that problem I have hit.
The first thing to break was the safety net, and it broke because of me, not because of the airspace. My minimum-altitude alerter shipped with a sea-level floor, so at Mexico City it read a normal approach as an emergency and would not stop. An airplane descending into MMMX is legitimately low against the high ground around it, and the alerter lit the whole arrival stream before it lit anything real. A real MSAW does not behave this way. It compares absolute altitude against a terrain map, it knows the ground at MMMX is at 7,316 feet, and a correctly built one stays quiet on a normal approach.
What is genuinely harder at altitude is the room. There is far less air between the safety floor and the runway than at a sea-level field, and the floor itself climbs steeply where the valley meets the mountains. The net has to be drawn tight against terrain that is close, and the only people who can tell me when it is silent in the wrong place are the controllers who have worked the field.
The approaches do not come in straight either, and that broke the part of the engine that captures the localizer. My capture logic assumed a sea-level final: a straight course the airplane intercepts at a shallow angle. The path to runway 05R is a radius-to-fix arc, and there are two of them, one off each arrival: the UKTEN transition wraps the airplane left through about 120 degrees, EPRIM right through about 113, and each rolls out already lined up on final. For a while the airplanes flew the arc and then ran off the end of it instead of settling onto final, because the capture was built to catch a shallow intercept and there was no shallow intercept to catch. One commit in the history is named for the flight it cost me, AMX101, an Aeroméxico arrival that the late descent and the broken capture lost together.
Then there is the air itself. At 7,316 feet it is thin, and an airplane holding a given indicated airspeed is moving faster through the air and across the ground than the same airplane would at sea level. That lands on the sequencer, not just the scope. Spacing math that assumed sea-level groundspeeds runs hot at Mexico City: the tracks close on each other quicker, and there is less time to build the line. I have rebuilt the speed model more than once and I still do not treat density altitude as solved.
The same indicated airspeed, no wind and standard atmosphere, crosses the threshold faster at Mexico City because the air is thinner:
| Indicated airspeed | Groundspeed at JFK | Groundspeed at Mexico City |
|---|---|---|
| 130 kt | 130 kt | 145 kt |
| 140 kt | 140 kt | 156 kt |
| 160 kt | 160 kt | 179 kt |
A 140-knot indicated approach crosses the threshold at about 156 knots over the ground here, which at JFK would be a fast one. And it grows with altitude, so up at the merge fix a 180-knot indication is already past 215 over the ground.
The airspace will not hold still. Mexico City lands either to the northeast on runway 05 or to the southwest on 23, and the configuration changes more than the runway in use. It changes the altitude an arrival is handed to me at. Aircraft coming through DARAN are delivered lower when the field is landing 05 and higher when it is landing 23, because the distance they fly over the merge points to the runway is different in each direction. A delivery altitude at a fix is not a fixed number, it is a function of the configuration, and an engine that keeps one number per fix has nowhere to put that. I did not understand how much of the engine assumed a static map until the map had to move.
Mexico City is not one airport in the valley, and the reason that is hard is not the count. New York runs three big airports in one terminal area too, with more traffic than Mexico City sees. The difference is the room. New York’s fields sit at sea level under open air, so its flows can be stacked with thousands of feet between them. Mexico City’s three fields, MMMX, Toluca (MMTO) at over 8,400 feet, and Felipe Ángeles (MMSM, the field most people call AIFA, opened in 2022), sit in a bowl walled by terrain from 13,000 to nearly 18,000 feet. Arrivals cross the merge fixes around 12,500 feet with the field at 7,316, about 5,000 feet to lose, in terrain, with no room to stack the flows on top of each other and little room to route around them. The terminal area was redrawn around all three on a point merge, an arrival procedure suited to a place where you cannot just vector airplanes out into open air to fix the spacing.
The next thing the place demands is the one I have not built yet. Mexico City’s afternoon convection in the rainy season closes the field for stretches, and simulating that means airplanes that hold, a fuel state that runs down while they do, and somewhere to send them when the neighbors are full too.