Three relay satellites parked 17,032 km over the equator, a hot spare, and a 12 m deep-space dish on the crater floor. Every headline number on this page came out of a solver — HFSS, COMSOL, Geant4, an orbit integrator, two discrete-event sims and a coding Monte Carlo — and then survived an independent two-agent audit that caught seven bad claims.
An areostationary orbit makes a satellite hang motionless over Jezero. That one fact shapes everything else in this district.
Mars rotates once every 24 h 37 m; at a radius of 20,428 km an orbit takes exactly as long. Park three relays there, 120° apart, and every base between ±71° latitude sees at least one of them forever — no passes, no windows, no handovers. A fourth satellite loiters 16° away as a hot spare. Each relay carries two 3 m Ka/X dishes staring at the planet, a 2.5 m gimbaled dish for the Earth trunk, and 30 m of solar wing.
On the ground, a 12 m Cassegrain (com-station-01) answers back: a 20 K cryo-cooled front end for G/T 51.8 dB/K, an 800 W transmit chain for EIRP 98 dBW, and a hydrogen-maser timebase good to 1×10⁻¹⁵ — because coherent two-way ranging is how you know where your "stationary" star actually is. Its 0.05° pencil beam pins a point 17,032 km up, and the servo loop never gets to rest.
A comms satellite is one equation made of metal. Every subsystem exists to feed a term of it.
We refused to leave any term to a textbook formula. The 3 m Ka dish is 320 wavelengths across — too big for full-wave — so we solved the feed horn in HFSS (17.96 dBi, 24° beam), then integrated that real pattern over the reflector. The hybrid gave 58.2 dBi with an aperture efficiency of 0.68 that decomposes into spillover 0.94 × taper 0.72 — and a beam of 0.226°, almost half the 0.4° the hand formula had promised. That single correction cascaded into the attitude budget: pointing must now hold 0.046°, twice as tight as first written.
The same discipline picked the reflector material. A coupled thermal-structural solve with a 20 K front-to-back gradient bows an aluminum dish by 5.66 mm RMS — a Ruze loss of −250 dB, a dead antenna. CFRP at 1 ppm/K bows 0.246 mm, and after a one-time focus trim the residual is 0.006 mm (−0.0003 dB). "Ka dishes are carbon fiber" stopped being a convention and became a verdict. A frequency sweep closed the loop on the transmit side: S11 −26.6 dB at 32 GHz, mismatch loss 0.01 dB — the 74 dBW EIRP assumption holds.
The ground half of the equation closes the loop. With the cryo front end holding Tsys at 75 K, all three station links shut with banked margin: relay downlink 600 Mbps with 24.7 dB to spare, uplink 100 Mbps with 45 dB, and the conjunction-season direct-to-Earth path 500 bps across 2.5 AU with 21.4 dB. The bank exists for the planet's sake — a full global dust storm costs the downlink ≈9.5 dB (5 dB of attenuation plus the receiver warming from 75 K to 212 K as it stares through hot dust), and the link rides it out without dropping a rate step. One term of the budget even exists as hardware: the LNA's DC lifeline was designed as a real two-layer PCB — an HEMT bias sequencer that builds the negative gate rail first, interlocks the drain behind a comparator, trips at 24 mA — verified to 0 netlist mismatches, autorouted with 0 failed nets, design-reviewed, and exported to fabrication Gerbers.
The platform's job is to point, power and park the antenna — for 1,350 eclipses and 5×10¹⁰ protons per cm².
Radiation. A Geant4 Monte Carlo fired 2×10⁵ solar protons (King-type spectrum) into an aluminum slab: behind 4 mm the 15-year dose is just 7.1 krad. Mars has no global magnetic field, hence no trapped belts — the environment is ~10× milder than Earth GEO, so radiation-tolerant (30 krad) parts suffice. The solar cells, naked but for coverglass, fade to 5.4 kW EOL — still clearing the 3 kW eclipse load at end of life.
Eclipse. A transient thermal solve showed the wing plunging from −25 °C to −152 °C in each 78-minute eclipse — a 127 °C swing, 1,350 times over the mission. That number is simultaneously why the 5 kWh battery exists and why solar-cell interconnect fatigue drives qualification. Steady-state analysis can never see it.
Parking. Mars' gravity field is lumpy — the Tharsis bulge makes its triaxial term ~40× Earth's. A numerically integrated propagation (validated first on Earth GEO: 1.76 m/s/yr, textbook value) mapped drift acceleration around the whole ring: worst longitude costs 33 m/s/yr, but the Jezero slot at 77.4°E sits 3.3° from an equilibrium point and costs only 5.1 m/s/yr. Fifteen years of station-keeping: 109 m/s — versus 529 at the worst slot. Choosing the longitude was worth 5× the propellant.
And the slot chooses the science. Occultation is the free radio-science by-product of the Earth link: an areostationary relay is motionless over Mars but circles it once per sol in inertial space, so whenever Earth's areocentric declination falls below 9.64° it slips behind the planet once a sol, and ingress and egress each cut a limb profile. Where? The tangent point is pinned at the slot longitude ±80.4° — its latitude set by Earth's declination alone, sweeping equator-to-pole across a season. Which means the satellite parked over the city never samples the city's own air: from 77.4°E it sounds 157.8°E and 357.0°E. Sampling Jezero needs a second satellite at 77.4 ± 79.8°. Only 77.4°E had a recorded rationale; the other two slots were just "120° apart". Re-cutting them to 157.2°E and 297.3°E puts the eastern tangent branch of the second satellite straight up the city meridian — an exact hit on Jezero (18.40°N, 77.37°E) whenever Earth's declination passes +3.07° — for 172 sols per Mars year, one profile a sol. It is also cheaper: 157.2°E sits 6.9° from the stable equilibrium at 164.1°E, and fleet east-west keeping falls from 52.8 to 43.3 m/s/yr. The bill is coverage margin — the largest slot gap grows to 140.1° against a 141.15° limit, leaving 0.55° once the station-keeping deadband is counted. Accepted as designed: the seam sits at 227°E on the equator with nothing under it, an 8° mask is on record as the relief valve (4.4°), and the slots stay — the margin's real guarantor is slot 3's ±0.25° station-keeping box.
Above the hardware sits a 780-day rhythm: Earth swings from 0.5 to 2.67 AU, and for two weeks the Sun blocks the trunk entirely.
An hour-by-hour simulation of one full synodic cycle — real planetary geometry, rate scaling as 1/d², a hard blackout whenever the Sun-Earth-probe angle drops below 2° — delivers 65 Tb of science per cycle. The 14.4-day conjunction blackout is not an input; it falls out of the geometry. The 500 Gb on-board buffer turns out to be sized almost exactly right: collecting a 0.35 Mbps critical stream through the blackout fills 435 Gb, and the backlog takes 70 days to drain because conjunction sits at maximum range where the trunk is slowest. The users' 150 Mbps Ka link is 150× faster than the trunk's average — not waste, but the whole point of a relay: collect fast, trickle home.
At the bottom of the stack, a from-scratch LDPC Monte Carlo (rate-1/2, min-sum decoding) measured the modem's distance to the physical limit: the waterfall crosses BER 10⁻⁴ at 2.0 dB, 1.8 dB from the Shannon bound — and, as a free lesson, the naive code construction exhibited an error floor at 2.5 dB, demonstrating in one plot why real codes use girth-conditioned constructions.
A 40 cm telescope 39 m from the big dish sends 1550 nm light to Earth two orders of magnitude faster than the radio trunk — on the days Mars lets it.
Optical works out to be the easy part. Twenty watts of average power through a 40 cm aperture puts 52 Mbps into a 5 m telescope on Earth at conjunction range (2.67 AU), and 832 Mbps at opposition — against 0.2 to 5 Mbps for the X-band direct-to-Earth path, a factor of 259× and 166×. The same model, fed the parameters of NASA's DSOC demonstration, returns 22.6 Mbps at 1.5 AU where the real thing measured 25; it also reproduces the 267 Mbps and lunar 622 Mbps ceilings. Nothing here needed inventing. What needed answering was the other question: on a planet that stages planet-wide dust storms, what is a laser link actually worth?
The answer is an availability ledger, and it is not flattering. Dust of ~µm radius is a Mie scatterer at 1550 nm and a Rayleigh non-event at Ka's 9.4 mm: the same storm that costs the radio downlink 9.5 dB and no outage puts a 27.7 dB wall in front of the laser. A 300-Mars-year Monte Carlo over synthesized optical-depth time series — seasonal baseline, regional storm arrivals, global events, day-to-day scatter, its climatology pinned to the weather station's τ statistics — gives 93.3% long-run availability: 96.7% in an ordinary year, 85.6% in a global-storm year, when the link is simply gone for a stretch that reaches 94 sols. That outage is not schedulable and no amount of margin buys it back.
So the architecture writes itself. The laser is a high-rate ramp for science traffic; the radio is the trunk, permanently. City telemetry and emergency commanding never leave the three-tier RF chain — Ka relay, X-band direct-to-Earth, and the 3 m emergency dish at 500 bps. The two are not redundant so much as complementary: one is fast and interruptible, the other slow and unbreakable, and grain size decides which is which. Handover runs off the same τ the weather station already publishes: below 1 the laser carries bulk science; from 1 to 2 it derates on rate; from 2 to 3.5 only the high-value queue moves, and the usable window shrinks with solar geometry; at τ ≥ 3.5 the cover shuts, the optics stay clean, and everything falls back to Ka. A global storm backlogs about 42 TB, which the trunk drains in roughly 72 sols afterwards — slow drainage is geometry, not a fault.
Three things about Mars turned out to help. Seeing is extraordinary: the refractive-index structure constant scales with the square of density, so the Fried parameter at 1550 nm is about 30 m and a 40 cm aperture is diffraction-limited in broad daylight with no adaptive optics. Daylight is unavoidable anyway — Earth is an inner planet from here, never more than 41° from the Sun, so there is no night shift to wait for. And the sky background that would end the story on Earth is beaten not by darkness but by field of view: the Martian daytime sky at 1550 nm is in fact brighter than a good terrestrial site, and optical still wins 6.6× once the seeing-limited field is folded in. Pointing is where the price is paid. The beam is 3.9 µrad wide and Earth has moved while the light was in transit, so the transmit direction leads the beacon by up to 360 µrad — 93 beamwidths. Point where you see it and you miss the planet.
Two conclusions arrived by being wrong first. The cover petals were drawn as 3 mm aluminium; a shell eigenfrequency solve put their first mode at 7.99 Hz, 28% away from the 6.25 Hz vortex shedding of the tube in a 25 m/s storm — resonance, not margin. They are now a honeycomb sandwich at 45.2 Hz, which is also half the areal mass. And the detector array grew from 16 to 64 pixels to make the near-range cap honest, which quietly broke the cold budget: 64 direct readout lines draw 167 mW against 250 mW of cooling, a margin of 1.50 where the design claimed 2.5. Eight-to-one RF multiplexing put it back to 3.4× — the alternative, a bigger cryocooler, would have taken the station from 3.7 to 6.4 kW and rewritten its whole power ledger to avoid building one multiplexer.
Every number above, and the run that produced it. Twelve simulations reached the archive on the radio side and thirteen ledgers on the optical side — 42 gates, all green; nothing on this page is a bare assertion.
| Claim | Value | Produced by |
|---|---|---|
| Ka dish gain (full-wave feed + aperture integration) | 58.2 dBi | mars-com-relay/sim/hfss_horn.py + po_reflector.py |
| Half-power beamwidth → pointing requirement | 0.226° → 0.046° | po_reflector.py (12(e/θ)² ≤ 0.5 dB) |
| Feed return loss @ 32 GHz | −26.6 dB | hfss_return_loss.py |
| Thermal bow, Al vs CFRP reflector | 5.66 vs 0.006 mm | dish_thermoelastic.java (COMSOL coupled) |
| Radiator panel operating point | −92 °C @ 125 W | radiator_thermal.java (energy closes to 0.003 W) |
| Eclipse wing swing | −25 → −152 °C | eclipse_transient.java |
| First wing bending mode (plate proxy) | ~0.1 Hz | array_modal.java → ADCS bandwidth ceiling |
| 15-yr dose behind 4 mm Al | 7.1 krad | spe_dose.mac (Geant4/GATE 9.4, 2×10⁵ p) |
| EOL array power | 5.4 kW | Geant4 fluence + displacement-damage factor |
| EW station-keeping @ 77.4°E / worst slot | 5.1 / 33 m/s·yr | stationkeep.py (method validated on Earth GEO) |
| Occultation tangent offset from slot meridian | ±80.4° | occultation_slots.py (numeric = closed form) |
| Slot re-cut: fleet EW keeping, city-meridian sampling | 52.8 → 43.3 m/s·yr | slot_tradeoff.py |
| City-meridian soundings per Mars year | 172 sols | occultation_slots.py (season |dec| < 9.64°) |
| 15-yr ΔV budget → propellant fraction | 109 m/s → 7.1% | stationkeep.py + mass_budget.py |
| Wet mass / 4-sat constellation | 1,362 kg / 5.4 t | mass_budget.py (each line traced to a sim) |
| Science per synodic cycle · blackout length | 65 Tb · 14.4 d | network_des.py (hourly, 780 d) |
| Dish-time utilization, nominal fleet | 9.2% | schedule_des.py (priority M/G/2) |
| Measured gap to Shannon (rate-1/2 LDPC) | 1.8 dB | ldpc_ber.py (all-zero-codeword MC) |
| Ground station G/T · EIRP | 51.8 dB/K · 98 dBW | mars-com-station/link-budget.json |
| Downlink margin @ 600 Mbps · uplink @ 100 Mbps | 24.7 · 45.0 dB | mars-com-station/link-budget.json |
| Conjunction direct-to-Earth @ 500 bps, 2.5 AU | 21.4 dB margin | mars-com-station/link-budget.json |
| Global dust storm hit on downlink (atten + Tsys 75→212 K) | ≈9.5 dB, no outage | mars-com-station/link-budget.json (dust_storm) |
| LNA bias-sequencer PCB: schematic / routing / fab files | 0 mismatch · 0 failed nets · Gerber | mars-com-station/hw/lna_bias_spec.md |
| Optical downlink, conjunction range (2.67 AU) · opposition (0.38 AU) | 52 Mbps · 832 Mbps | mars-optical/sim/o01_link_budget.py |
| Optical advantage over the X-band direct-to-Earth path | 259× far · 166× near | o01_link_budget.py (both ends' assets stated) |
| Global dust storm attenuation at 1550 nm (vs 9.5 dB at Ka) | 27.7 dB → link zeroed | mars-optical/sim/o02_dust_availability.py |
| Long-run optical availability · ordinary year · global-storm year | 93.3% · 96.7% · 85.6% | o07_tau_montecarlo.py (300 Mars-year MC) |
| Longest single optical outage · backlog · drain time | 94 sols · 42 TB · ~72 sols | o07_tau_montecarlo.py (outage-duration distribution) |
| Handover threshold, tracking loop killed by daytime sky background | τ = 3.5 | o02_dust_availability.py + o13_frontend_spectral.py |
| Point-ahead angle, max · median (beam is 3.9 µrad) | 360 · 244 µrad | o03_pointing_vibration.py (2v⊥/c, full synodic sweep) |
| Pointing budget after wind and servo were solved in the time domain | 0.35 µrad RSS | o03 + o08_wind_servo.py (von Karman + two-stage loop) |
| Fried parameter at 1550 nm → no adaptive optics needed | r₀ ≈ 30 m | o03_pointing_vibration.py (Cn² density scaling) |
| Earth's maximum elongation from Mars → daylight-only operation | 41.0° | o05_daylight_conjunction.py |
| Daytime background penalty vs a good Earth site (field-of-view limited) | 0.15× (6.6× better) | o05_daylight_conjunction.py |
| Conjunction outage, optical (±3° keep-out) vs radio (SEP < 2°) | 33 d vs 14 d | o05_daylight_conjunction.py (reproduces the relay's 14.4 d) |
| Detector choice: SNSPD vs InGaAs SPAD, far end · near end | 4.9× · 28× | o11_detector_choice.py (efficiency × bits/photon) |
| Cover petal first mode, bare 3 mm sheet vs honeycomb sandwich | 7.99 vs 45.2 Hz | mars-optical/comsol/shell_modal.java (COMSOL Shell) |
| Mount first structural mode → drivetrain stiffness spec | 62.9 Hz → ≥27 Hz | mars-optical/comsol/mount_modal.java |
| Readout heat load, 64 direct lines vs 8:1 multiplexed | 1.50× vs 3.4× margin | o12_readout_heatload.py (4 K stage) |
| Filter passband floor set by Doppler → capacity gain when narrowed | 0.18 nm → +35% data/yr | o13_frontend_spectral.py |
| Station draw · radiator area (cryocooler is 75% of it) | 3.7 kW · 15 m² | o06_power_siting.py (closed twice, via heat rejection) |
The sims were only half the story. The other half was being wrong in public.
solver bugThe transparent-wall horn. Assigning the radiation boundary to every outer face of the air domain silently included faces coplanar with the metal horn wall — making the metal invisible. The horn solved as a bare open waveguide, 7.31 dBi. The tell: two different geometries returned results identical to 12 significant figures. If two runs agree that well, they solved the same wrong model.
flipped conclusionThe radiator that was "too cold". A 125 W single-panel model said the radiators were 7× oversized and the real risk was freezing. The independent review caught the contradiction: the satellite's own power budget dissipates ~3 kW, and at system level the same radiators are 1.6× undersized. Both statements are true — at different model boundaries. The lesson got a name here: the boundary of the model is the boundary of the conclusion.
claims auditSeven numbers died in review. Two agents re-derived every card: the 2 Mbps conjunction data rate was off by 10 dB (~0.2 Mbps is the truth — MRO, with 8.6 dB more link, manages under 1); the nadir footprint was quoted 2× too large; the pointing spec passed 0.85 dB of loss instead of 0.5; the solar flux was labeled perihelion but was the mean. Every implementation had survived; every error lived in the claims layer.
honest lossSBR+ never converged. Three attempts to solve the full 3 m dish in HFSS's ray solver built the geometry and the linked feed source correctly, then hung in headless mode. We stopped, kept the script and the diagnosis, and let the reviewer-verified physical-optics result stand. A blocked attempt, recorded, beats a fabricated success.
ops bugThe DES caught a policy bug. The first pass gave the "critical stream" a 0.35 Mbps floor — higher than the link itself near conjunction. The buffer could only grow. No static budget table would ever have surfaced it; the fix (a two-tier floor) is now part of the ops concept.
claims auditThe ground station's G/T was wrong by 19.5 dB. Its first spec sheet said 32.3 dB/K — dimensionally sound, plausible, wrong. Building the link budget forced the recomputation (G − 10·log₁₀Tsys = 70.5 − 18.8 = 51.8 dB/K); every downstream margin on this page would have been garbage on the bad number. Doing the budget is the audit.
design reviewThe protection board couldn't see its own most likely failure. The LNA bias sequencer's gate-good interlock watched the negative rail, not the gate voltage — a trim-pot wiper going open (the most common pot failure) would have drifted the gate to zero with the drain hot: the exact transistor-killing event the board exists to prevent, invisible to its own interlock. Rev B fixes it with a single 100 kΩ pulldown that fails toward deep pinch-off; the same review also flipped a power-down RC that made shutdown 47 ms too slow (one diode: slow up, instant down).
honest floorThe autorouter has a floor, and it's documented. The grid router closed every net on the bias board but left 44 sub-6-mil clearance violations across 76 track segments. Bigger board: still 44. Thinner tracks: still 44. It is a structural limit of the router, so the Gerbers ship flagged "DFM before fab" instead of pretending a clean bill.
The constellation flies in the city's orbit view, and the knowledge base travels with it.
Open the viewer and press M for the orbit view. The three relays and the spare sit on the cyan areostationary ring — pan toward them and a summary card appears at 8,000 km; keep closing to 2,500 km and the card switches to whichever subdevice is nearest, eight in all, each carrying its physics layer (why the number is what it is) and its sim layer (which run pinned it). The coverage-limit rings at ±71° and the beam lines to Jezero and Earth are drawn from the same numbers as this page.
Back on the surface, walk to the comms yard and press V to inspect com-station-01: the 12 m dish tracks a relay overhead in slow azimuth-elevation drift, the feed dewar, maser cabinet and 3 m emergency dish each carry their own card. URL shortcuts: ?view=orbit jumps straight to the constellation; ?inspect=com-station-01 lands you at the dish.