Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

FS-ACHERNAR · SW · TOOL 001

In preparation

Trusting a simulation

A simulated apogee is an estimate: this guide shows how far off it has been on real flights, and which way it errs.

This guide is for a flier who reads a simulated apogee to pick a motor, plan a waiver or a field’s ceiling, or set up a flight. It explains what a simulator can and can’t know about a flight, how big its misses have been, and which miss to plan for. It is the first of the guides in Rocketry explained, which explain the physics behind the numbers HPR Sim prints.

A simulation can be wrong in what it is told and in how it works. The first is its inputs: the masses and the balance point in the design file, the finish of the paint, the motor’s real thrust, and the day’s wind and air. The second is its models: above all the drag, which a simulator estimates from the rocket’s shape instead of measuring it.

Scattering the inputs shows the first kind. HPR Sim’s Monte Carlo command, hpr mc, flies the rocket many times, each with its inputs drawn afresh, and prints the spread (Monte Carlo dispersion). It can’t show the second kind: a model that is wrong the same way on every run moves every run together.

Only flights that really flew show the second kind. The comparisons below fly each rocket’s design in the day’s weather and set its apogee against the altimeter’s. So they measure both kinds at once, and the altimeter’s own error with them: the weather is the day’s, but the masses and the finish are the design file’s, as most fliers’ files are, and an altimeter reads the air’s pressure, not the height (Reading a flight log).

A miss is the simulated apogee less the logged one, as a share of the logged one. A positive miss means the simulator said higher than the rocket flew:

miss = (simulated apogee − logged apogee) / logged apogee

For example, the public flight of Cavour, Politecnico di Torino, EuRoC 2023 read 2,789 m (9,150 ft) on its altimeter at the top, and an altimeter riding HPR Sim’s flight of its design would have read 2,946 m (9,665 ft). The miss is (2,946 − 2,789) / 2,789 = +5.63% (report). EuRoC is the European Rocketry Challenge. On the public flights, both sides of a miss are altimeter readings.

Across 53 logged flights of fliers’ own designs, each flown as drawn in its day’s air, HPR Sim’s apogee averaged +8.73% above the logged one (report). Each logged apogee there is the altimeter’s reading turned into the height climbed in that day’s air, so the comparison leans on that conversion too. Without their signs, the misses averaged 12.95%, and 26 were within 10% either way. The figure counts them by size.

The misses lean high: 40 of the 53 simulated apogees are above the logged one. And they spread wide: the lowest read between 15% and 20% low, the highest past +30% high.

OpenRocket, flying the same files in each day’s wind and the pad’s air, averaged +7.79% above and missed by 12.02% without signs (report). The two simulators agreed with each other within 5% on 52 of the 53 flights. So most of the miss is one they share, and where it comes from isn’t pinned down: in what both are given (the design file, the motor’s curve, the logged apogee they are scored against), or in models they have in common. A second simulator checks how the first is coded, not what the two share.

The 7 public flights are university teams’ rockets, flown in a reanalysis of their days’ weather, one of them in another year’s (report). HPR Sim’s apogee missed them by 6.04% on average without signs, from −8.90% to +10.40% one by one, and with signs by −0.25%, so on these the highs and lows nearly cancel. That is still outside the project’s own 5% target (Accuracy). The note HPR Sim prints with every apogee quotes the 53, the larger set and the less flattering one (the trust note’s decision record).

A miss can flatter or warn, and which one depends on the plan. For a waiver or a field’s ceiling, a simulated apogee below the real one flatters: the rocket climbs past the height that was planned for. A simulated apogee above the real one mainly costs height. For a contest’s lowest altitude, or a motor picked to reach a height, the sides swap, and the high side flatters.

The figure marks the low side, and a test ties the mark to the sign of a miss: the figure’s code marks the bins of negative misses, and a_low_simulated_apogee_is_a_negative_miss holds that a simulated apogee below the logged one makes a negative miss in the report’s rows. Of the 53 flights, 13 read low, the lowest of them between 15% and 20% low (report). A sample is not a bound: a rocket unlike these may miss by more.

One of the public flights shows the low side. An altimeter riding HPR Sim’s flight of Juno III, Projeto Jupiter, Spaceport America Cup 2023 would have read 2,923.4 m (9,591 ft) at the top; the team’s altimeter read 3,151.5 m (10,340 ft), a miss of −7.24% (report). The real altimeter read 228.1 m (748 ft) higher than the simulated one, and its log ends just short of the top. The report finds this miss consistent with the motor’s impulse, as the example sets it. So plan a ceiling with room above the simulated apogee; how much room is the flier’s and the RSO’s call, and this guide has no number for it.

This is the guide’s worked example: the small rocket the repository keeps for its how-to guides, flown many times over with its mass, its drag and its motor’s impulse each scattered. The command gives each scatter as one standard deviation, as a share of the value: --mass-sd 0.02 for the mass. The drag’s scatter is a guessed spread around HPR Sim’s own drag: it widens the runs, but it can’t show a drag that is wrong the same way on every run.

$ hpr mc validation/fixtures/ork/guides/level-1.ork --runs 200 --seed 2026 --mass-sd 0.02 --drag-sd 0.05 --impulse-sd 0.03
Level 1 guide rocket (level-1.ork)
configuration 1 of 2: [H170M-10]
help: --config flies the others, by number or name: 2 [I175WS-9]

200 simulated flights, seed 2026: 0 failed
                        nominal     mean  std dev       5%   median      95%
apogee (m AGL)           1065.1   1072.4     41.5   1006.2   1072.8   1137.3
apogee (ft AGL)            3494     3519      136     3301     3520     3731
landing distance (m)        0.7      0.7      0.0      0.7      0.7      0.8
landing distance (ft)         2        2        0        2        2        3

200 of 200 flights landed, centered 0.7 m (2 ft) west and 0.0 m (0 ft) north of the pad
landing ellipse                   semi-major            semi-minor  heading   flights inside
50%                             0.0 m (0 ft)          0.0 m (0 ft)   090° T            74.5%
95%                             0.1 m (0 ft)          0.0 m (0 ft)   090° T            98.0%
95%, the next flight            0.1 m (0 ft)          0.0 m (0 ft)   090° T            98.5%

motor: 1 × H170M (from the bundled catalog, as of 2026-09-17) in `Motor mount tube`, lit at launch
launched at 0.00000° N, 0.00000° E, 0 m (0 ft) above sea level, from a 1.5 m (4.9 ft) vertical rail, in calm air
scattered, one standard deviation each: --mass-sd 0.02, --drag-sd 0.05, --impulse-sd 0.03
note: the file's 1 recovery device flies as OpenRocket flies it: each opens fully at its event, with the file's drag coefficient or OpenRocket's own, and once one opens the rocket descends as a point under the open devices' drag alone
warning: drag, the nominal flight: issue #67: a cone-like nose's or shoulder's pressure drag reads high from Mach 0.8 (about twice a measured cone's at Mach 0.85, still +15% at 1.5), so the apogee, the top speed and the drift read low, and the flutter margin and the largest dynamic pressure look better than they are; this flight reaches Mach 0.84 at 1.7 s (https://github.com/nrdptel/fusionspace-eridanus/issues/67)
warning: drag, the nominal flight: issue #68: base drag reads high from Mach 0.8 to 1.2 (0.225 against a measured 0.156 at Mach 0.9), so the apogee, the top speed and the drift read low, and the flutter margin and the largest dynamic pressure look better than they are; this flight reaches Mach 0.84 at 1.7 s (https://github.com/nrdptel/fusionspace-eridanus/issues/68)
warning: drag, the nominal flight: issue #18: skin friction is taken as fully turbulent, but on a smooth surface the flow stays laminar near the nose, where friction is lower: HPR Sim's drag reads high by 3.6% on RocketPy's Calisto at Mach 0.3; if this surface is that smooth, the drag reads high, so the apogee, the top speed and the drift read low, and the flutter margin and the largest dynamic pressure look better than they are (https://github.com/nrdptel/fusionspace-eridanus/issues/18)
warning: stability, the nominal flight: issue #172: the static margin read up to 0.1108 calibers higher than OpenRocket's on four private designs, for a reason not yet found, so this flight's margin may read high by as much (https://github.com/nrdptel/fusionspace-eridanus/issues/172)

How far to trust it. Simulated from the design file, not measured; the spread above comes from the
inputs' scatter alone, not from the model's error. Against 53 logged flights of fliers' own designs,
each logged apogee the height climbed in the day's air, the simulated apogee averaged 8.7% above the
logged one; it was within 10% on 26 and read low on 13, by at most 20%. Plan a waiver or a field's
ceiling with room above this apogee; the altimeter's reading is the one to log, and the RSO decides.
More: https://hpr.fusionspace.co/accuracy.html

Read it in three parts. The table’s 5% and 95% columns are percentiles: most runs fell between them, a few on either side. The warnings name the known model gaps that bear on this flight, each with the side it pushes the numbers to: here, drag that may read high, so an apogee that may read low, the side that flatters a ceiling. The note at the end is the miss on real flights from the sections above, which the spread leaves out. The rest is the flight’s setup and its landing (Monte Carlo dispersion).

The warnings don’t settle which way this rocket will miss. They push its apogee low, yet across the 53 flights the misses leaned high on average, so causes not yet found can outweigh the known ones. A warning says which way one known gap pushes, not which way the flight will miss.

The spread and the miss don’t add as one range. The spread is this rocket’s, from inputs the command was told to scatter; the miss is a record of other rockets, and it already holds their files’ own input errors. Read the spread as how far the flight moves if the model is right and the inputs are off by about the scatter given, and the miss as how far files like this one have been from the sky.

  • Anything but apogee. No comparison here checks a top speed, a descent, a drift or a landing place against a real flight. Those are checked against other programs, which shows that HPR Sim computes what they compute, not that any of them matches the world (Accuracy).
  • Rockets unlike these. The flights are hobby and university rockets as their fliers drew them. A rocket much faster, much higher or of an odd shape sits outside them, and Accuracy lists what each comparison covers.
  • Your own rocket’s miss. A weighed rocket, its mass and balance point put in the file, removes one input error the logged flights carry; only flying it and reading the altimeter measures the rest. Reading a flight log shows how to compare.

Sources. The logged flights are published by university rocketry teams, rocketry courses and hobbyists; the 7 public flights are those RocketPy’s documentation flies against their teams’ logs. The weather is ERA5, generated using Copernicus Climate Change Service information 2026, and contains modified Copernicus Climate Change Service information 2026; neither the European Commission nor ECMWF is responsible for any use made of it. The report gives the full attribution and the ERA5 citations.

OwnerFusionSpace
TitleFusionSpace HPR · Sim: a flight simulator for hobby and high-power rockets, and its documentation
PageTrusting a simulation
DesignationFS-ACHERNAR · SW · TOOL 001
Version0.1.0, released 2026-10-08 (what it holds); the site is built from the repository’s main branch, which may be ahead of it
Date of issue2026-10-12
StatusIN PREPARATION: these pages describe the next release as the main branch holds it, so a page may describe what 0.1.0 lacks; how far to trust each result is in Accuracy so far
UnitsSI (meters, kilograms, seconds) first. Every command’s text adds US units in parentheses: feet after heights and distances, feet per second after speeds, miles per hour after the wind, °F after the air’s temperature, g after an acceleration and inches after stations along the rocket and a motor’s size; hpr motors show adds ounces or pounds. The plot gives a second scale in feet, feet per second and g. This site’s pages, unlike the program’s output, keep a motor’s nominal size in millimeters alone, as motors are named (a 54 mm motor); every other height, distance, size and speed on them gives its US units in brackets, checked as conversions (house style). JSON and exported files stay SI (units)
DataThrust curves: ThrustCurve.org’s public-domain files, catalog captured 2026-09-17. Atmosphere: U.S. Standard Atmosphere 1976, or a sounding or forecast you supply or fetch (weather). Magnetic field: WMM2025. Accuracy: the committed validation report. Every source and its terms: third-party notices.
FontsArchivo and Cascadia Mono, SIL Open Font License 1.1, served from this site; no page asks another server for anything