From 81b36e6bbe83de23805acdf8b6866368f42e81a9 Mon Sep 17 00:00:00 2001 From: Andrew Simonson Date: Sat, 15 Aug 2026 21:37:28 -0500 Subject: [PATCH] extend the drag term to air medium -- phi4 caught what the ground-only fix missed Running a real phi4 pass-4 review pass surfaced a Rotorcraft + Gas Turbine combo with a "speed" of 3,127 m/s (Mach 9), and the model's own review text called it out directly: "unrealistic for urban commuting, likely indicating an error." The reasoning for leaving air out of DRAG_POWER_COEFF_BY_MEDIUM ("its L/D-based cruise model is already a reasonable velocity-roughly-linear approximation") was wrong for the same reason ground was wrong before: L/D-based drag force is also roughly velocity-independent within a design cruise band, so it's still just a mass-proportional constant with no v^2 term pushing back, and inverting power/resistance for achieved speed had no ceiling there either. Added an aircraft-like reference cross-section (0.5 * rho_air * Cd(~0.2) * frontal_area(~3.5 m^2)) to DRAG_POWER_COEFF_BY_MEDIUM for "air", reusing the same closed-form cubic solve already built for ground. Confirmed: the same combo's speed dropped from 3,127 m/s to 125.9 m/s (a fast but physically plausible rotorcraft cruise), and a second phi4 pass-4 run on the corrected data no longer flags it -- the review now discusses the speed score as a genuine strength instead of an apparent error. Water hull drag remains a known, unaddressed gap (would need its own reference, not a car's or aircraft's frontal area). Co-Authored-By: Claude Sonnet 5 --- src/physcom/engine/pipeline.py | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/physcom/engine/pipeline.py b/src/physcom/engine/pipeline.py index bf64168..bd98719 100644 --- a/src/physcom/engine/pipeline.py +++ b/src/physcom/engine/pipeline.py @@ -278,19 +278,31 @@ SPECIFIC_ENERGY_CONSUMPTION_J_PER_KG_M: dict[str, float] = { # # DRAG_POWER_COEFF_BY_MEDIUM below adds that missing term: a mass-INDEPENDENT # drag power coefficient (0.5 * air_density * drag_coefficient * frontal_area, -# W per (m/s)^3) added on top of the existing mass-proportional term. Ground -# only for now (the diagnosed case, and where a car-like reference -# cross-section is a defensible categorical estimate the way the rest of -# this file's constants are); air's existing L/D-based model is already a -# reasonable velocity-roughly-linear cruise approximation and doesn't have -# this problem, and water hull drag would need its own (different) treatment -# rather than reusing a car's frontal area, so it's left as a known -# remaining gap rather than guessed at here. +# W per (m/s)^3) added on top of the existing mass-proportional term. +# +# "air" was originally left out of this table on the reasoning that its +# L/D-based cruise model was already a reasonable velocity-roughly-linear +# approximation -- true for computing energy per meter during a normal +# cruise, but WRONG for the exact same reason ground was wrong: L/D-based +# drag force is also roughly velocity-independent within a design cruise +# band, so it's still just "resistance = mass-proportional constant" with +# no v^2 term, and inverting power/resistance for achieved speed still had +# no ceiling. Confirmed live: a Rotorcraft + Gas Turbine combo showed a +# "speed" of 3,127 m/s (Mach 9) with phi4's pass-4 review flagging it +# directly ("unrealistic for urban commuting, likely indicating an +# error"). Added below with an aircraft-like reference cross-section. +# Water hull drag would need its own (different) treatment rather than +# reusing either reference, so it's left as a known remaining gap. DRAG_POWER_COEFF_BY_MEDIUM: dict[str, float] = { # 0.5 * rho_air(1.225 kg/m^3) * Cd(~0.3) * frontal_area(~2.2 m^2, small # car reference) -- sanity check: at 30 m/s (108 km/h) this alone costs # ~11kW, in the right ballpark for real highway cruise power. "ground": 0.5 * 1.225 * 0.3 * 2.2, + # 0.5 * rho_air(1.225) * Cd(~0.2, streamlined fuselage) * frontal_area + # (~3.5 m^2, small aircraft/rotorcraft reference) -- sanity check: at + # 60 m/s (a fast urban rotorcraft cruise) this alone costs ~46kW, in + # the right ballpark for a light helicopter's real cruise power. + "air": 0.5 * 1.225 * 0.2 * 3.5, } # Structural manufacturing cost, $ per kg of platform mass -- certification @@ -974,7 +986,7 @@ class Pipeline: # Achieved steady-state cruise speed, DERIVED from this specific # build's actual power_density, the medium's mass-proportional - # resistance, and (ground only, see DRAG_POWER_COEFF_BY_MEDIUM) a + # resistance, and (ground/air, see DRAG_POWER_COEFF_BY_MEDIUM) a # mass-independent aerodynamic drag term -- not a platform-declared # constant. A build with more power than the platform's bare # target_velocity requires achieves a genuinely higher speed here;