{
  "note": "Every parameter of the flying-fish simulator, with its source. kind = measured (from a fetched source), secondary (quoted second-hand in a fetched source), assumed (no source; the value is a modelling choice and the slider range shows how much it matters), tuned (chosen so a sourced quantity is reproduced; which one is named). Nothing here comes from a bird. The second fish is HYPOTHETICAL: a design study that changes only morphology and physiology parameters (see physics/flier/spec.json); the equations are the real fish's.",
  "constants": {
    "g": {
      "value": 9.81,
      "unit": "m/s^2",
      "kind": "standard"
    },
    "rho_air": {
      "value": 1.225,
      "unit": "kg/m^3",
      "kind": "standard",
      "note": "sea level; same value as physics/analysis.py"
    },
    "rho_water": {
      "value": 1025,
      "unit": "kg/m^3",
      "kind": "standard",
      "note": "sea water"
    }
  },
  "fish": [
    {
      "id": "cypselurus-hiraii-L3",
      "label": "Darkedged-wing flying fish, Park and Choi 2010 specimen L3",
      "hypothetical": false,
      "mass_kg": {
        "value": 0.06,
        "kind": "measured",
        "source": "park-choi-2010 Table 1 model L3"
      },
      "standard_length_m": {
        "value": 0.203,
        "kind": "measured",
        "source": "park-choi-2010 Table 1 model L3"
      },
      "ref_area_m2": {
        "value": 0.012688,
        "kind": "measured",
        "source": "park-choi-2010 Table 1 model L3: A1 + A2 + A3 (pectoral + pelvic + body planform), the reference area of its coefficients"
      },
      "span_m": {
        "value": 0.261,
        "kind": "measured",
        "source": "park-choi-2010 Table 1 model L3 (full pectoral span S)"
      },
      "CL_max": {
        "value": 0.78,
        "alpha_deg": 35,
        "kind": "measured",
        "source": "park-choi-2010 Table 2"
      },
      "LD_max": {
        "value": 4.37,
        "alpha_deg": 0,
        "kind": "measured",
        "source": "park-choi-2010 Table 2"
      },
      "CD_min": {
        "value": 0.055,
        "alpha_deg": -10,
        "kind": "measured",
        "source": "park-choi-2010 Table 2"
      },
      "CL_at_zero_deg": {
        "value": 0.4,
        "min": 0.2,
        "max": 0.6,
        "kind": "assumed",
        "source": "no value in the text (it is in Fig. 5, not read); chosen inside the plausible range; with LD_max it fixes the drag polar"
      },
      "CL_slope_per_deg": {
        "value": null,
        "kind": "derived",
        "source": "(CL_max - CL_at_zero_deg) / 35 deg, linear up to the stall at 35 deg; shape assumed"
      },
      "CD_k": {
        "value": null,
        "kind": "derived",
        "source": "CD = CD_min + k CL^2 with k fixed by CD(0 deg) = CL(0 deg) / LD_max; quadratic polar shape assumed"
      },
      "stall_alpha_deg": {
        "value": 35,
        "kind": "measured",
        "source": "park-choi-2010: lift coefficient largest at 30-35 deg"
      },
      "glide_alpha_deg": {
        "value": 5,
        "min": -5,
        "max": 30,
        "kind": "assumed",
        "source": "the fish's chosen angle of attack in the glide is not measured; the literature cited by Park and Choi says only that glides are nearly parallel to the surface"
      },
      "body_frontal_area_m2": {
        "value": 0.0007,
        "min": 0.0003,
        "max": 0.0015,
        "kind": "assumed",
        "source": "no body depth or width in the sources; 0.0007 m^2 is a 30 mm by 30 mm ellipse-sized section for a 203 mm fish"
      },
      "water_drag_coefficient": {
        "value": 0.1,
        "min": 0.03,
        "max": 0.3,
        "kind": "assumed",
        "source": "no measured value for a flying fish; frontal-area drag coefficient of a streamlined body"
      },
      "approach_speed_m_s": {
        "value": 10,
        "kind": "secondary",
        "source": "makiguchi-2013 Discussion citing Davenport 1994: approach and leap at approximately 10 m/s (20 to 30 body lengths per second)"
      },
      "swim_thrust_N": {
        "value": null,
        "kind": "tuned",
        "source": "set equal to the water drag at the approach speed, so the submerged fish reaches 10 m/s (the secondary field value) and no faster"
      },
      "taxi_thrust_N": {
        "value": null,
        "min_factor": 0.05,
        "max_factor": 2.0,
        "kind": "tuned",
        "source": "set to the swim thrust times a factor; default 0.7 after the run-6 sweep (0.15 to 0.7): below about 0.6 the assumed lobe water drag never lets the fish reach the speed at which the fins must lift it (about 16 m/s), so it taxis indefinitely; at 0.7 it taxis about 15 m, lifts off at 16.5 m/s and glides 36 m. The factor therefore compensates for two assumed hydrodynamic values (lobe drag area fraction, water drag coefficient) and is post-hoc. The lobe sculls at up to 50 beats per second (davenport-1994) but no thrust was measured; 2.5 N is about four body weights",
        "factor": 0.7
      },
      "lobe_length_m": {
        "value": 0.05,
        "min": 0.02,
        "max": 0.08,
        "kind": "assumed",
        "source": "length of the enlarged lower caudal lobe below the body axis; not in the sources; 0.05 m is a quarter of standard length"
      },
      "pitch_at_leap_deg": {
        "value": 20,
        "kind": "measured",
        "source": "makiguchi-2013 Table 3: 20.0 +- 3.3 deg in captivity; field studies cited there give about 30 deg"
      },
      "start_depth_m": {
        "value": -1.0,
        "kind": "assumed",
        "source": "where the run starts; it only sets how long the swim phase lasts"
      },
      "reentry_min_speed_m_s": {
        "value": 5,
        "min": 2,
        "max": 9,
        "kind": "assumed",
        "source": "below this speed at re-entry the fish is taken to stop taxiing and submerge; not in the sources"
      },
      "max_glides": {
        "value": 6,
        "kind": "assumed",
        "source": "stops the run; field sequences of 400 m in 30 s (park-choi-2010 introduction) imply several taxi-glide cycles"
      },
      "ground_effect": {
        "kind": "measured",
        "source": "park-choi-2010 Fig. 12 and text (physics/ground-effect.json): lift unchanged; drag times 1 for h/b >= 0.97, falling linearly to 0.86 at h/b = 0.33 over water, held at 0.86 below that (not measured lower)"
      },
      "approach_angle_deg": {
        "value": 10,
        "min": 2,
        "max": 25,
        "kind": "assumed",
        "source": "path angle of the swim toward the surface. Davenport 1994 (abstract): the fish leaps through the surface at a shallow angle; the measured 20 deg (Makiguchi 2013) is the body pitch at the moment of leaping, not the path. Added after run 2 (deviation, physics/sim/RUNS.md)"
      },
      "takeoff_speed_target_m_s": {
        "value": 17.5,
        "min": 12,
        "max": 22,
        "kind": "assumed",
        "source": "the speed at which the fish stops trimming low and lets itself lift off; Davenport 1994 says the fish accelerates to take-off speed by taxiing with the fins expanded; free-flight airspeed is 15 to 20 m/s (secondary), so 17.5 is the midpoint. Added after run 2 (deviation)"
      },
      "taxi_trim": {
        "value": "hold tail in water",
        "kind": "assumed",
        "source": "behaviour: during the taxi the fish sets its angle of attack each step so lift balances weight at a target height of half the lobe length, with a damping term on vertical speed (gains 2 per m and 2 s per m, assumed; added after the run-5 sweep showed the undamped trim let the body creep out of the water at 10 m/s), bounded between -10 deg and the stall; the tail stays in the water until even -10 deg gives more lift than weight (about 16 m/s with this polar) or the take-off speed target; then it holds the glide angle of attack. Replaces the fixed taxi pitch of run 2 (deviation; post-hoc)"
      },
      "breach_model": {
        "value": "vertical velocity set to zero at the surface, on exit and on re-entry",
        "kind": "assumed",
        "source": "Davenport 1994 (abstract): the fish leaps through the surface at a shallow angle and then taxis with the tail beating. The model has no planing support from the water, so the shallow exit is represented by zeroing the vertical velocity when the body centre crosses z = -lobe; without it the 10 deg approach carries 1.7 m/s of upward momentum through the 5 cm taxi band and the fish pops out in half a metre (runs 2 and 3). Added after run 3 (deviation; tests 1-3 are post-hoc from run 2 on) The same rule applies on re-entry (the fish lowers the tail into the water and keeps the body out: Deng 2019 introduction), added after run 4."
      },
      "powered": {
        "value": false,
        "kind": "observed",
        "source": "davenport-1994 abstract point 6: flying fish do not flap their wings to gain lift; the real fish gets no flapping thrust in the model. Test 4 (whether its muscles COULD power flight) waits for the physiology chain"
      },
      "flight_muscle_fraction": {
        "value": null,
        "kind": "unknown",
        "source": "not reported for any flying fish; Davenport 1992 (abstract): no more red axial muscle than a cruising mackerel"
      }
    },
    {
      "id": "flier-F1-hypothetical",
      "label": "HYPOTHETICAL designed flier F1 (design study, physics/flier/spec.json): same 60 g body, fins at bat-like wing loading, flight muscle 16 % of body mass",
      "hypothetical": true,
      "mass_kg": {
        "value": 0.06,
        "kind": "measured",
        "source": "park-choi-2010 Table 1 model L3"
      },
      "standard_length_m": {
        "value": 0.203,
        "kind": "measured",
        "source": "park-choi-2010 Table 1 model L3"
      },
      "ref_area_m2": {
        "value": 0.04905,
        "kind": "hypothetical",
        "source": "design choice: wing loading 12 N/m2 (inside the bat range 6.5-14.25 N/m2 in comparison-data.csv; below pterosaur hatchlings 15.8-17.9, PMC8298463); 3.9x the real reference area"
      },
      "span_m": {
        "value": 0.664,
        "kind": "hypothetical",
        "source": "from the lifting area at the fish's own aspect ratio 9 (Park and Choi 9.0-10.7); 2.5x the real span"
      },
      "CL_max": {
        "value": 0.78,
        "alpha_deg": 35,
        "kind": "measured",
        "source": "park-choi-2010 Table 2"
      },
      "LD_max": {
        "value": 4.37,
        "alpha_deg": 0,
        "kind": "measured",
        "source": "park-choi-2010 Table 2"
      },
      "CD_min": {
        "value": 0.055,
        "alpha_deg": -10,
        "kind": "measured",
        "source": "park-choi-2010 Table 2"
      },
      "CL_at_zero_deg": {
        "value": 0.4,
        "min": 0.2,
        "max": 0.6,
        "kind": "assumed",
        "source": "no value in the text (it is in Fig. 5, not read); chosen inside the plausible range; with LD_max it fixes the drag polar"
      },
      "CL_slope_per_deg": {
        "value": null,
        "kind": "derived",
        "source": "(CL_max - CL_at_zero_deg) / 35 deg, linear up to the stall at 35 deg; shape assumed"
      },
      "CD_k": {
        "value": null,
        "kind": "derived",
        "source": "CD = CD_min + k CL^2 with k fixed by CD(0 deg) = CL(0 deg) / LD_max; quadratic polar shape assumed"
      },
      "stall_alpha_deg": {
        "value": 35,
        "kind": "measured",
        "source": "park-choi-2010: lift coefficient largest at 30-35 deg"
      },
      "glide_alpha_deg": {
        "value": 8,
        "min": -5,
        "max": 30,
        "kind": "assumed",
        "source": "angle of attack held in powered flight (assumed; slider)"
      },
      "body_frontal_area_m2": {
        "value": 0.0007,
        "min": 0.0003,
        "max": 0.0015,
        "kind": "assumed",
        "source": "no body depth or width in the sources; 0.0007 m^2 is a 30 mm by 30 mm ellipse-sized section for a 203 mm fish"
      },
      "water_drag_coefficient": {
        "value": 0.1,
        "min": 0.03,
        "max": 0.3,
        "kind": "assumed",
        "source": "no measured value for a flying fish; frontal-area drag coefficient of a streamlined body"
      },
      "approach_speed_m_s": {
        "value": 10,
        "kind": "secondary",
        "source": "makiguchi-2013 Discussion citing Davenport 1994: approach and leap at approximately 10 m/s (20 to 30 body lengths per second)"
      },
      "swim_thrust_N": {
        "value": null,
        "kind": "tuned",
        "source": "set equal to the water drag at the approach speed, so the submerged fish reaches 10 m/s (the secondary field value) and no faster"
      },
      "taxi_thrust_N": {
        "value": null,
        "min_factor": 0.05,
        "max_factor": 2.0,
        "kind": "tuned",
        "source": "set to the swim thrust times a factor; default 0.7 after the run-6 sweep (0.15 to 0.7): below about 0.6 the assumed lobe water drag never lets the fish reach the speed at which the fins must lift it (about 16 m/s), so it taxis indefinitely; at 0.7 it taxis about 15 m, lifts off at 16.5 m/s and glides 36 m. The factor therefore compensates for two assumed hydrodynamic values (lobe drag area fraction, water drag coefficient) and is post-hoc. The lobe sculls at up to 50 beats per second (davenport-1994) but no thrust was measured; 2.5 N is about four body weights",
        "factor": 0.7
      },
      "lobe_length_m": {
        "value": 0.05,
        "min": 0.02,
        "max": 0.08,
        "kind": "assumed",
        "source": "length of the enlarged lower caudal lobe below the body axis; not in the sources; 0.05 m is a quarter of standard length"
      },
      "pitch_at_leap_deg": {
        "value": 20,
        "kind": "measured",
        "source": "makiguchi-2013 Table 3: 20.0 +- 3.3 deg in captivity; field studies cited there give about 30 deg"
      },
      "start_depth_m": {
        "value": -1.0,
        "kind": "assumed",
        "source": "where the run starts; it only sets how long the swim phase lasts"
      },
      "reentry_min_speed_m_s": {
        "value": 5,
        "min": 2,
        "max": 9,
        "kind": "assumed",
        "source": "below this speed at re-entry the fish is taken to stop taxiing and submerge; not in the sources"
      },
      "max_glides": {
        "value": 6,
        "kind": "assumed",
        "source": "stops the run; field sequences of 400 m in 30 s (park-choi-2010 introduction) imply several taxi-glide cycles"
      },
      "ground_effect": {
        "kind": "measured",
        "source": "park-choi-2010 Fig. 12 and text (physics/ground-effect.json): lift unchanged; drag times 1 for h/b >= 0.97, falling linearly to 0.86 at h/b = 0.33 over water, held at 0.86 below that (not measured lower)"
      },
      "approach_angle_deg": {
        "value": 10,
        "min": 2,
        "max": 25,
        "kind": "assumed",
        "source": "path angle of the swim toward the surface. Davenport 1994 (abstract): the fish leaps through the surface at a shallow angle; the measured 20 deg (Makiguchi 2013) is the body pitch at the moment of leaping, not the path. Added after run 2 (deviation, physics/sim/RUNS.md)"
      },
      "takeoff_speed_target_m_s": {
        "value": 17.5,
        "min": 12,
        "max": 22,
        "kind": "assumed",
        "source": "the speed at which the fish stops trimming low and lets itself lift off; Davenport 1994 says the fish accelerates to take-off speed by taxiing with the fins expanded; free-flight airspeed is 15 to 20 m/s (secondary), so 17.5 is the midpoint. Added after run 2 (deviation)"
      },
      "taxi_trim": {
        "value": "hold tail in water",
        "kind": "assumed",
        "source": "behaviour: during the taxi the fish sets its angle of attack each step so lift balances weight at a target height of half the lobe length, with a damping term on vertical speed (gains 2 per m and 2 s per m, assumed; added after the run-5 sweep showed the undamped trim let the body creep out of the water at 10 m/s), bounded between -10 deg and the stall; the tail stays in the water until even -10 deg gives more lift than weight (about 16 m/s with this polar) or the take-off speed target; then it holds the glide angle of attack. Replaces the fixed taxi pitch of run 2 (deviation; post-hoc)"
      },
      "breach_model": {
        "value": "vertical velocity set to zero at the surface, on exit and on re-entry",
        "kind": "assumed",
        "source": "Davenport 1994 (abstract): the fish leaps through the surface at a shallow angle and then taxis with the tail beating. The model has no planing support from the water, so the shallow exit is represented by zeroing the vertical velocity when the body centre crosses z = -lobe; without it the 10 deg approach carries 1.7 m/s of upward momentum through the 5 cm taxi band and the fish pops out in half a metre (runs 2 and 3). Added after run 3 (deviation; tests 1-3 are post-hoc from run 2 on) The same rule applies on re-entry (the fish lowers the tail into the water and keeps the body out: Deng 2019 introduction), added after run 4."
      },
      "powered": {
        "value": true,
        "kind": "hypothetical",
        "source": "the design question: flapping thrust from the flight muscle once airborne"
      },
      "flight_muscle_fraction": {
        "value": 0.16,
        "min": 0.05,
        "max": 0.3,
        "kind": "hypothetical",
        "source": "smallest fraction that covers a 1 m/s climb at the bat-derived maximum specific power; bats: mean 9.13 %, minimum 7.8 % (PMC10966098 citing Bullen and McKenzie 2004); the bat maximum was not found"
      },
      "muscle_specific_power_W_per_kg": {
        "value": 201.8,
        "min": 100,
        "max": 250,
        "kind": "derived",
        "source": "Pipistrellus nathusii maximum mechanical flight power 0.140 W (PMC10154928) over its flight muscle 7.6 g x 9.13 % = 0.69 g: 202 W per kg muscle (mean 133). Derived from two sourced numbers; the physiology chain may replace it"
      },
      "inertial_power_W_per_kg_body": {
        "value": 8,
        "kind": "secondary",
        "source": "PMC9490335: flapping inertial power about 8 W/kg body, nearly speed-independent (bat model); subtracted from the available power before thrust"
      },
      "conversion_efficiency": {
        "value": 0.1,
        "kind": "measured (bat)",
        "source": "P. nathusii 7.0-10.4 % (PMC10154928); used only to report the metabolic and O2 demand, not in the mechanics"
      }
    },
    {
      "id": "tff-v2-hypothetical",
      "label": "HYPOTHETICAL TFF v2 (co-design point, physics/flier/tff/tff.json): air-breathing, aerobic capacity 1.31 W at sea level, wing loading 12 N/m2, altitude-dependent air density and O2",
      "hypothetical": true,
      "mass_kg": {
        "value": 0.06,
        "kind": "measured",
        "source": "park-choi-2010 Table 1 model L3"
      },
      "standard_length_m": {
        "value": 0.203,
        "kind": "measured",
        "source": "park-choi-2010 Table 1 model L3"
      },
      "ref_area_m2": {
        "value": 0.04905,
        "kind": "hypothetical",
        "source": "design choice: wing loading 12 N/m2 (inside the bat range 6.5-14.25 N/m2 in comparison-data.csv; below pterosaur hatchlings 15.8-17.9, PMC8298463); 3.9x the real reference area"
      },
      "span_m": {
        "value": 0.664,
        "kind": "hypothetical",
        "source": "from the lifting area at the fish's own aspect ratio 9 (Park and Choi 9.0-10.7); 2.5x the real span"
      },
      "CL_max": {
        "value": 0.78,
        "alpha_deg": 35,
        "kind": "measured",
        "source": "park-choi-2010 Table 2"
      },
      "LD_max": {
        "value": 4.37,
        "alpha_deg": 0,
        "kind": "measured",
        "source": "park-choi-2010 Table 2"
      },
      "CD_min": {
        "value": 0.055,
        "alpha_deg": -10,
        "kind": "measured",
        "source": "park-choi-2010 Table 2"
      },
      "CL_at_zero_deg": {
        "value": 0.4,
        "min": 0.2,
        "max": 0.6,
        "kind": "assumed",
        "source": "no value in the text (it is in Fig. 5, not read); chosen inside the plausible range; with LD_max it fixes the drag polar"
      },
      "CL_slope_per_deg": {
        "value": null,
        "kind": "derived",
        "source": "(CL_max - CL_at_zero_deg) / 35 deg, linear up to the stall at 35 deg; shape assumed"
      },
      "CD_k": {
        "value": null,
        "kind": "derived",
        "source": "CD = CD_min + k CL^2 with k fixed by CD(0 deg) = CL(0 deg) / LD_max; quadratic polar shape assumed"
      },
      "stall_alpha_deg": {
        "value": 35,
        "kind": "measured",
        "source": "park-choi-2010: lift coefficient largest at 30-35 deg"
      },
      "glide_alpha_deg": {
        "value": 30,
        "min": 5,
        "max": 34,
        "kind": "assumed",
        "source": "the TFF flies near its minimum lift-supported speed, where the co-design map evaluates the power requirement (W v_min/(L/D)); at the v1 flier's 8 deg the fish flies at 6.3 m/s and the whole 10 percent margin goes to drag, so it cannot climb (first TFF run, 2026-10-31). 30 deg gives C_L 0.73 of the 0.78 maximum (stall at 35)"
      },
      "body_frontal_area_m2": {
        "value": 0.0007,
        "min": 0.0003,
        "max": 0.0015,
        "kind": "assumed",
        "source": "no body depth or width in the sources; 0.0007 m^2 is a 30 mm by 30 mm ellipse-sized section for a 203 mm fish"
      },
      "water_drag_coefficient": {
        "value": 0.1,
        "min": 0.03,
        "max": 0.3,
        "kind": "assumed",
        "source": "no measured value for a flying fish; frontal-area drag coefficient of a streamlined body"
      },
      "approach_speed_m_s": {
        "value": 10,
        "kind": "secondary",
        "source": "makiguchi-2013 Discussion citing Davenport 1994: approach and leap at approximately 10 m/s (20 to 30 body lengths per second)"
      },
      "swim_thrust_N": {
        "value": null,
        "kind": "tuned",
        "source": "set equal to the water drag at the approach speed, so the submerged fish reaches 10 m/s (the secondary field value) and no faster"
      },
      "taxi_thrust_N": {
        "value": null,
        "min_factor": 0.05,
        "max_factor": 2.0,
        "kind": "tuned",
        "source": "set to the swim thrust times a factor; default 0.7 after the run-6 sweep (0.15 to 0.7): below about 0.6 the assumed lobe water drag never lets the fish reach the speed at which the fins must lift it (about 16 m/s), so it taxis indefinitely; at 0.7 it taxis about 15 m, lifts off at 16.5 m/s and glides 36 m. The factor therefore compensates for two assumed hydrodynamic values (lobe drag area fraction, water drag coefficient) and is post-hoc. The lobe sculls at up to 50 beats per second (davenport-1994) but no thrust was measured; 2.5 N is about four body weights",
        "factor": 0.7
      },
      "lobe_length_m": {
        "value": 0.05,
        "min": 0.02,
        "max": 0.08,
        "kind": "assumed",
        "source": "length of the enlarged lower caudal lobe below the body axis; not in the sources; 0.05 m is a quarter of standard length"
      },
      "pitch_at_leap_deg": {
        "value": 20,
        "kind": "measured",
        "source": "makiguchi-2013 Table 3: 20.0 +- 3.3 deg in captivity; field studies cited there give about 30 deg"
      },
      "start_depth_m": {
        "value": -1.0,
        "kind": "assumed",
        "source": "where the run starts; it only sets how long the swim phase lasts"
      },
      "reentry_min_speed_m_s": {
        "value": 5,
        "min": 2,
        "max": 9,
        "kind": "assumed",
        "source": "below this speed at re-entry the fish is taken to stop taxiing and submerge; not in the sources"
      },
      "max_glides": {
        "value": 6,
        "kind": "assumed",
        "source": "stops the run; field sequences of 400 m in 30 s (park-choi-2010 introduction) imply several taxi-glide cycles"
      },
      "ground_effect": {
        "kind": "measured",
        "source": "park-choi-2010 Fig. 12 and text (physics/ground-effect.json): lift unchanged; drag times 1 for h/b >= 0.97, falling linearly to 0.86 at h/b = 0.33 over water, held at 0.86 below that (not measured lower)"
      },
      "approach_angle_deg": {
        "value": 10,
        "min": 2,
        "max": 25,
        "kind": "assumed",
        "source": "path angle of the swim toward the surface. Davenport 1994 (abstract): the fish leaps through the surface at a shallow angle; the measured 20 deg (Makiguchi 2013) is the body pitch at the moment of leaping, not the path. Added after run 2 (deviation, physics/sim/RUNS.md)"
      },
      "takeoff_speed_target_m_s": {
        "value": 17.5,
        "min": 12,
        "max": 22,
        "kind": "assumed",
        "source": "the speed at which the fish stops trimming low and lets itself lift off; Davenport 1994 says the fish accelerates to take-off speed by taxiing with the fins expanded; free-flight airspeed is 15 to 20 m/s (secondary), so 17.5 is the midpoint. Added after run 2 (deviation)"
      },
      "taxi_trim": {
        "value": "hold tail in water",
        "kind": "assumed",
        "source": "behaviour: during the taxi the fish sets its angle of attack each step so lift balances weight at a target height of half the lobe length, with a damping term on vertical speed (gains 2 per m and 2 s per m, assumed; added after the run-5 sweep showed the undamped trim let the body creep out of the water at 10 m/s), bounded between -10 deg and the stall; the tail stays in the water until even -10 deg gives more lift than weight (about 16 m/s with this polar) or the take-off speed target; then it holds the glide angle of attack. Replaces the fixed taxi pitch of run 2 (deviation; post-hoc)"
      },
      "breach_model": {
        "value": "vertical velocity set to zero at the surface, on exit and on re-entry",
        "kind": "assumed",
        "source": "Davenport 1994 (abstract): the fish leaps through the surface at a shallow angle and then taxis with the tail beating. The model has no planing support from the water, so the shallow exit is represented by zeroing the vertical velocity when the body centre crosses z = -lobe; without it the 10 deg approach carries 1.7 m/s of upward momentum through the 5 cm taxi band and the fish pops out in half a metre (runs 2 and 3). Added after run 3 (deviation; tests 1-3 are post-hoc from run 2 on) The same rule applies on re-entry (the fish lowers the tail into the water and keeps the body out: Deng 2019 introduction), added after run 4."
      },
      "powered": {
        "value": true,
        "kind": "hypothetical",
        "source": "the design question at altitude: flapping thrust from aerobic power supplied by an air-breathing surface (hypothetical); the chain is not used for this fish because it has no air-breathing path"
      },
      "flight_muscle_fraction": {
        "value": 0.16,
        "min": 0.05,
        "max": 0.3,
        "kind": "hypothetical",
        "source": "smallest fraction that covers a 1 m/s climb at the bat-derived maximum specific power; bats: mean 9.13 %, minimum 7.8 % (PMC10966098 citing Bullen and McKenzie 2004); the bat maximum was not found"
      },
      "muscle_specific_power_W_per_kg": {
        "value": 201.8,
        "min": 100,
        "max": 250,
        "kind": "derived",
        "source": "Pipistrellus nathusii maximum mechanical flight power 0.140 W (PMC10154928) over its flight muscle 7.6 g x 9.13 % = 0.69 g: 202 W per kg muscle (mean 133). Derived from two sourced numbers; the physiology chain may replace it; for the TFF the flapping power is the aerobic capacity scaled by C_a(h)/C_a(0), not this value"
      },
      "inertial_power_W_per_kg_body": {
        "value": 8,
        "kind": "secondary",
        "source": "PMC9490335: flapping inertial power about 8 W/kg body, nearly speed-independent (bat model); subtracted from the available power before thrust"
      },
      "conversion_efficiency": {
        "value": 0.1,
        "kind": "measured (bat)",
        "source": "P. nathusii 7.0-10.4 % (PMC10154928); used only to report the metabolic and O2 demand, not in the mechanics"
      },
      "altitude_model": {
        "value": true,
        "kind": "standard",
        "source": "NASA GRC metric troposphere fit (fetched 2026-10-31): T = 15.04 - 0.00649 h, p = 101.29 ((T+273.1)/288.08)^5.256 kPa, rho = p/(0.2869 (T+273.1)); PO2 = 0.209 p"
      },
      "aerobic_capacity_W": {
        "value": 1.3069147050922676,
        "kind": "hypothetical",
        "source": "eta E Qc C_a(0) with the chain eta 0.15, E 19.34 J/ml, trout Hill curve; 1.1 x the requirement at 1000 m; needs cardiac output 2365 ml/min/kg at fish C_a, 36x the sourced fish maximum (snapper 65.6), or an air-breathing surface taking up 451 ml O2/min/kg in air; no fetched source sizes it"
      },
      "hb_P50_kPa": {
        "value": 3.306393338150713,
        "kind": "proxy",
        "source": "trout, Rummer and Brauner 2015 via physiology/haemoglobin.js"
      },
      "hb_n": {
        "value": 1.34,
        "kind": "proxy",
        "source": "same"
      },
      "PaO2_equals_PiO2": {
        "value": true,
        "kind": "assumed",
        "source": "arterial PO2 taken equal to inspired PO2 at every altitude: an upper bound on arterial content (no alveolar-arterial gap)"
      }
    },
    {
      "id": "zebrafish-winged-hypothetical",
      "label": "HYPOTHETICAL winged zebrafish: adult 3.0 cm SL Danio rerio with flying-fish fin proportions (one panel of the 2x2 developmental comparison)",
      "hypothetical": true,
      "mass_kg": {
        "value": 0.00051,
        "kind": "secondary (FishBase)",
        "source": "FishBase length-weight for Danio rerio (fetched 2026-10-31T21:14Z): a 0.01889, b 3.000, SL 2.8-3.8 cm, n 3, locality not given (same unverified-estimate pattern as the flying-fish rows); W = a L^b = 0.51 g at 3.0 cm"
      },
      "standard_length_m": {
        "value": 0.03,
        "kind": "assumed",
        "source": "adult zebrafish about 3 cm SL (within the FishBase row range 2.8-3.8 cm)"
      },
      "ref_area_m2": {
        "value": 0.000277,
        "kind": "hypothetical",
        "source": "Park and Choi L3 reference area scaled isometrically by (3.0/20.3)^2: flying-fish fin proportions on a zebrafish body"
      },
      "span_m": {
        "value": 0.0386,
        "kind": "hypothetical",
        "source": "Park and Choi span scaled by 3.0/20.3"
      },
      "CL_max": {
        "value": 0.78,
        "alpha_deg": 35,
        "kind": "measured",
        "source": "park-choi-2010 Table 2"
      },
      "LD_max": {
        "value": 4.37,
        "alpha_deg": 0,
        "kind": "measured",
        "source": "park-choi-2010 Table 2"
      },
      "CD_min": {
        "value": 0.055,
        "alpha_deg": -10,
        "kind": "measured",
        "source": "park-choi-2010 Table 2"
      },
      "CL_at_zero_deg": {
        "value": 0.4,
        "min": 0.2,
        "max": 0.6,
        "kind": "assumed",
        "source": "no value in the text (it is in Fig. 5, not read); chosen inside the plausible range; with LD_max it fixes the drag polar"
      },
      "CL_slope_per_deg": {
        "value": null,
        "kind": "derived",
        "source": "(CL_max - CL_at_zero_deg) / 35 deg, linear up to the stall at 35 deg; shape assumed"
      },
      "CD_k": {
        "value": null,
        "kind": "derived",
        "source": "CD = CD_min + k CL^2 with k fixed by CD(0 deg) = CL(0 deg) / LD_max; quadratic polar shape assumed"
      },
      "stall_alpha_deg": {
        "value": 35,
        "kind": "measured",
        "source": "park-choi-2010: lift coefficient largest at 30-35 deg"
      },
      "glide_alpha_deg": {
        "value": 5,
        "min": -5,
        "max": 30,
        "kind": "assumed",
        "source": "the fish's chosen angle of attack in the glide is not measured; the literature cited by Park and Choi says only that glides are nearly parallel to the surface"
      },
      "body_frontal_area_m2": {
        "value": 1.53e-05,
        "min": 5e-06,
        "max": 4e-05,
        "kind": "assumed",
        "source": "the real-fish assumed frontal area scaled by (3.0/20.3)^2"
      },
      "water_drag_coefficient": {
        "value": 0.1,
        "min": 0.03,
        "max": 0.3,
        "kind": "assumed",
        "source": "no measured value for a flying fish; frontal-area drag coefficient of a streamlined body"
      },
      "approach_speed_m_s": {
        "value": 10,
        "kind": "secondary (flying fish)",
        "source": "kept at the flying-fish field value so the tuned swim thrust is defined; the chain-driven v2 launch ignores it"
      },
      "swim_thrust_N": {
        "value": null,
        "kind": "tuned",
        "source": "set equal to the water drag at the approach speed, so the submerged fish reaches 10 m/s (the secondary field value) and no faster"
      },
      "taxi_thrust_N": {
        "value": null,
        "min_factor": 0.05,
        "max_factor": 2.0,
        "kind": "tuned",
        "source": "set to the swim thrust times a factor; default 0.7 after the run-6 sweep (0.15 to 0.7): below about 0.6 the assumed lobe water drag never lets the fish reach the speed at which the fins must lift it (about 16 m/s), so it taxis indefinitely; at 0.7 it taxis about 15 m, lifts off at 16.5 m/s and glides 36 m. The factor therefore compensates for two assumed hydrodynamic values (lobe drag area fraction, water drag coefficient) and is post-hoc. The lobe sculls at up to 50 beats per second (davenport-1994) but no thrust was measured; 2.5 N is about four body weights",
        "factor": 0.7
      },
      "lobe_length_m": {
        "value": 0.0074,
        "min": 0.003,
        "max": 0.012,
        "kind": "assumed",
        "source": "scaled by 3.0/20.3"
      },
      "pitch_at_leap_deg": {
        "value": 20,
        "kind": "measured",
        "source": "makiguchi-2013 Table 3: 20.0 +- 3.3 deg in captivity; field studies cited there give about 30 deg"
      },
      "start_depth_m": {
        "value": -1.0,
        "kind": "assumed",
        "source": "where the run starts; it only sets how long the swim phase lasts"
      },
      "reentry_min_speed_m_s": {
        "value": 2,
        "min": 1,
        "max": 5,
        "kind": "assumed",
        "source": "scaled down for the small fish; not in the sources"
      },
      "max_glides": {
        "value": 6,
        "kind": "assumed",
        "source": "stops the run; field sequences of 400 m in 30 s (park-choi-2010 introduction) imply several taxi-glide cycles"
      },
      "ground_effect": {
        "kind": "measured",
        "source": "park-choi-2010 Fig. 12 and text (physics/ground-effect.json): lift unchanged; drag times 1 for h/b >= 0.97, falling linearly to 0.86 at h/b = 0.33 over water, held at 0.86 below that (not measured lower)"
      },
      "approach_angle_deg": {
        "value": 10,
        "min": 2,
        "max": 25,
        "kind": "assumed",
        "source": "path angle of the swim toward the surface. Davenport 1994 (abstract): the fish leaps through the surface at a shallow angle; the measured 20 deg (Makiguchi 2013) is the body pitch at the moment of leaping, not the path. Added after run 2 (deviation, physics/sim/RUNS.md)"
      },
      "takeoff_speed_target_m_s": {
        "value": 8,
        "min": 5,
        "max": 12,
        "kind": "assumed",
        "source": "v_min for this body is 6.1 m/s (205 body lengths per second); target set just above it"
      },
      "taxi_trim": {
        "value": "hold tail in water",
        "kind": "assumed",
        "source": "behaviour: during the taxi the fish sets its angle of attack each step so lift balances weight at a target height of half the lobe length, with a damping term on vertical speed (gains 2 per m and 2 s per m, assumed; added after the run-5 sweep showed the undamped trim let the body creep out of the water at 10 m/s), bounded between -10 deg and the stall; the tail stays in the water until even -10 deg gives more lift than weight (about 16 m/s with this polar) or the take-off speed target; then it holds the glide angle of attack. Replaces the fixed taxi pitch of run 2 (deviation; post-hoc)"
      },
      "breach_model": {
        "value": "vertical velocity set to zero at the surface, on exit and on re-entry",
        "kind": "assumed",
        "source": "Davenport 1994 (abstract): the fish leaps through the surface at a shallow angle and then taxis with the tail beating. The model has no planing support from the water, so the shallow exit is represented by zeroing the vertical velocity when the body centre crosses z = -lobe; without it the 10 deg approach carries 1.7 m/s of upward momentum through the 5 cm taxi band and the fish pops out in half a metre (runs 2 and 3). Added after run 3 (deviation; tests 1-3 are post-hoc from run 2 on) The same rule applies on re-entry (the fish lowers the tail into the water and keeps the body out: Deng 2019 introduction), added after run 4."
      },
      "powered": {
        "value": false,
        "kind": "observed",
        "source": "davenport-1994 abstract point 6: flying fish do not flap their wings to gain lift; the real fish gets no flapping thrust in the model. Test 4 (whether its muscles COULD power flight) waits for the physiology chain"
      },
      "flight_muscle_fraction": {
        "value": null,
        "kind": "unknown",
        "source": "not reported for any flying fish; Davenport 1992 (abstract): no more red axial muscle than a cruising mackerel"
      }
    }
  ],
  "validation_targets": [
    {
      "quantity": "glide distance per glide",
      "value": "up to 50 m",
      "kind": "secondary",
      "source": "makiguchi-2013 introduction citing Edgerton and Breder 1941 and Davenport 1990"
    },
    {
      "quantity": "airspeed in free flight",
      "value": "15 to 20 m/s",
      "kind": "secondary",
      "source": "makiguchi-2013 introduction; deng-2019 introduction"
    },
    {
      "quantity": "maximum flight height",
      "value": "8 m",
      "kind": "secondary",
      "source": "deng-2019 introduction citing its ref 6"
    },
    {
      "quantity": "taxiing length",
      "value": "9 m average",
      "kind": "secondary",
      "source": "deng-2019 introduction citing its ref 11"
    },
    {
      "quantity": "take-off speed",
      "value": "about 10 m/s",
      "kind": "secondary",
      "source": "makiguchi-2013 citing Davenport 1994"
    },
    {
      "quantity": "whole sequence",
      "value": "400 m in 30 s",
      "kind": "secondary",
      "source": "park-choi-2010 introduction citing Hertel 1966, Rayner 1986, Vogel 1994"
    },
    {
      "quantity": "minimum lift-supported speed (constraint C9 in the Lean ledger)",
      "value": "9.85 m/s",
      "kind": "computed",
      "source": "physics/results.json interpretation_B from the measured W, S, CL_max"
    },
    {
      "quantity": "single pure glide range",
      "value": "at most h_max x (L/D)max = 8 m x 4.37 = 35 m",
      "kind": "derived",
      "source": "Lean thread's audit 2026-10-31: a pure glide from height h with glide ratio (L/D)max cannot exceed h (L/D)max; long field flights (50 to 400 m) therefore need repeated taxis, ground effect or wind"
    }
  ]
}