MIL-STD-1797A Flying Qualities Assessment (flight-mechanics/handling-qualities/mil-std-1797a)
Use when the task is grading the dynamic stability and response modes
of a piloted aircraft against the MIL-STD-1797A (and its predecessor
MIL-F-8785C) flying qualities level criteria: classify the flight
phase category and aircraft class, check each mode against the level
tables, and report the Level 1, 2, or 3 verdict plus the overall
limiting level and Cooper-Harper band. This is the level-criteria
leaf; mode derivative extraction and eigenvalue computation live in
the stability-control leaves.
Domain quick reference
- Flight phase categories: A = nonterminal phases requiring rapid
maneuvering, precision tracking, or precise flight-path control
(air-to-air combat, ground attack, in-flight refueling as receiver,
terrain following); B = nonterminal phases accomplished gradually
without precision tracking (climb, cruise, loiter, descent); C =
terminal phases (takeoff, approach, landing, wave-off).
- Aircraft classes: I = small light (utility, primary trainer); II =
medium weight, medium maneuverability (small transport, tactical
bomber); III = large heavy, low maneuverability (heavy transport,
tanker, bomber); IV = high maneuverability (fighter, attack).
- Flying qualities levels: 1 = clearly adequate, desired performance
with minimal pilot compensation; 2 = adequate with increased pilot
workload or degraded mission effectiveness; 3 = safe but marginal,
controllable with excessive workload. The overall level is the worst
(limiting) level across modes.
- Short period (damping bands are category independent): Level 1
damping 0.35 to 1.30, Level 2 0.25 to 2.00, Level 3 minimum 0.15.
Minimum frequency (rad/s) is a function of category, class, and
n/alpha (g/rad), interpolated linearly between n/alpha = 1.0 and
3.0 and clamped outside: category A classes I/II/III/IV start at
3.6/3.6/3.0/2.5 and rise to 6.0; categories B and C start at 1.0
and rise to 2.0. Level 1 requires both damping and frequency; a
frequency shortfall with Level 1 damping grades Level 2.
- Phugoid: Level 1 damping >= 0.04; Level 2 damping >= 0 (stable);
Level 3 time to double >= 55 s (slow divergence allowed).
- Dutch roll (damping ratio, minimum frequency rad/s, minimum
damping-frequency product): Level 1 category A class IV: 0.19, 1.0,
0.35; category A classes I-III: 0.19, 0.4, 0.35; categories B and C:
0.08, 0.4, 0.15. Level 2: 0.02, 0.4, 0.05. Level 3: damping > 0
(stable oscillation).
- Spiral mode minimum time to double: Level 1 20 s (A and C), 12 s
(B); Level 2 8 s; Level 3 4 s.
- Roll mode maximum time constant (s): Level 1 1.0 (A), 1.4 (B), 1.0
(C); Level 2 1.4 (A), 3.0 (B), 1.4 (C); Level 3 10 (all).
- Roll performance (category A only): time to a 60 deg bank angle
change: Level 1 1.3 s (classes I, II, IV) or 1.7 s (III); Level 2
1.8 s (I, II, IV) or 2.5 s (III); Level 3 3.6 s (I, II, IV) or 5.0 s
(III). The first-order roll response phi(t) = p_ss * (t - tau *
(1 - exp(-t / tau))) converts a steady roll rate p_ss and roll mode
time constant tau into the bank angle reached in 1 s, the time to
60 deg, and the time to 90 deg.
- Cooper-Harper tie-in: Level 1 maps to ratings 1-3 (satisfactory
without improvement), Level 2 to 4-6 (deficiencies warrant
improvement), Level 3 to 7-9 (deficiencies require improvement);
rating 10 (uncontrollable) sits outside the level framework. The
pilot-assigned rating itself is collected per the
cooper-harper-rating leaf.
Workflow
- Classify the flight phase category (A, B, or C) from the mission
segment and the aircraft class (I to IV) from the vehicle type.
- Gather the measured or simulated mode metrics: short period damping
and frequency (and n/alpha), phugoid damping, dutch roll damping
and frequency, spiral time to double (or stable), roll mode time
constant, and steady roll rate with roll mode time constant for
roll performance.
- Run each mode assessment from scripts/flying_qualities_logic.py,
e.g. assess_short_period({"zeta_sp": 0.7, "omega_sp": 3.0}, "A",
"IV") returns {"level": 1, "verdict": "PASS", ...}. Every assess
function validates category, class, and inputs and raises
ValueError on invalid category, class, or non-physical values.
- Combine with overall_flying_qualities_level(state, category,
aircraft_class): it runs all six modes, returns the overall
limiting level, the limiting modes, and the Cooper-Harper band
(1 to 3 for Level 1, 4 to 6 for Level 2, 7 to 9 for Level 3).
Roll performance reports level None for categories B and C
(the criterion applies to category A only) and is skipped by
combine_levels.
- Interpret against the requirement: Level 1 is the usual
procurement and safety requirement for the operational envelope;
any Level 3 mode flags a safety-marginal condition; a divergent
mode (negative damping) grades Level 3 and needs design action.
Worked example
Fighter in air-to-air combat (category A, class IV) with measured
mode metrics: short period zeta 0.7, omega 3.0 rad/s, n/alpha 1.0;
phugoid zeta 0.05; dutch roll zeta 0.25, omega 1.5 rad/s; spiral
time to double 25 s; roll mode tau 0.8 s; steady roll rate 100 deg/s
with tau 0.5 s. Run:
import sys
sys.path.insert(0, "scripts")
from flying_qualities_logic import overall_flying_qualities_level
state = {"zeta_sp": 0.7, "omega_sp": 3.0, "n_over_alpha": 1.0,
"zeta_ph": 0.05, "zeta_dr": 0.25, "omega_dr": 1.5,
"t2_spiral": 25.0, "tau_roll": 0.8,
"roll_rate_ss": 100.0, "roll_mode_tau": 0.5}
result = overall_flying_qualities_level(state, "A", "IV")
print(result["level"], result["limiting_modes"],
result["cooper_harper_band"])
Every mode is Level 1: short period frequency 3.0 >= 2.5 rad/s
minimum and damping 0.7 in band; dutch roll product 0.375 >= 0.35;
spiral 25 s >= 20 s; roll mode 0.8 s <= 1.0 s; roll performance
time to 60 deg about 1.04 s <= 1.3 s. Result: level 1, no limiting
mode, Cooper-Harper band 1-3. Now degrade the spiral to 10 s:
overall drops to level 2 with limiting mode "spiral" and band 4-6.
A short period damping of 0.15 drops the short period verdict to
level 3 and the overall level to 3.
Verification checklist
Pitfalls
- Misclassifying category or class: the short-period frequency floor and the
dutch roll tables are category- and class-dependent (category A class IV
starts at 2.5 rad/s, category B at 1.0), so a Level 1 verdict computed for
A/IV is not transferable to another category/class.
- Checking dutch roll on damping alone: the product criterion (damping times
frequency) is enforced, so a high frequency does not pass a low damping
product; report the limiting of damping, frequency and product.
- Applying roll performance outside category A: the time-to-60-deg criterion
applies to category A only; assess_roll_performance reports level None for
B and C and combine_levels skips it, so do not force a category-A roll
rate check in cruise.
- Comparing spiral and roll mode in the wrong units: spiral is a minimum
time to double (s) and roll mode a maximum time constant (s); they grade
on separate tables and are not interchangeable thresholds.
- Reading the overall level from one mode: the overall level is the worst
(limiting) level across all six modes, so a single Level 3 mode (for
example divergent spiral time to double below 4 s) drops the whole
assessment even when every other mode is Level 1.
- Passing invalid category, class or non-physical metrics: every assess
function validates and raises ValueError on invalid category/class strings
and non-physical values such as negative damping.
Behavior contract (gate 3)
scripts/test_flying_qualities.py (stdlib unittest, offline) is the
correct-answer oracle: it asserts the known-good Level 1 case
(short period damping 0.7, frequency 3.0 rad/s, category A, class IV),
the low damping case (0.15 grades Level 3, not Level 1), the spiral
Level 2 case (time to double 10 s, category A), the dutch roll
product gating, the first-order roll response values (bank angle in
1 s about 56.77 deg and time to 90 deg about 1.37 s for p_ss 100
deg/s and tau 0.5 s), the overall limiting level, the Cooper-Harper
band tie-in, and ValueError on invalid category, class, and
non-physical inputs. Run: python3 scripts/test_flying_qualities.py.
Related skills
- cooper-harper-rating: collects the pilot-assigned rating that the
level bands map to; use together for piloted evaluation results.
- dynamic-stability: computes eigenvalues and mode metrics from
derivatives; feed its outputs into this leaf's assess functions.
- short-period-mode-analysis: derives short period frequency and
damping from stability derivatives; this leaf grades the result.
- lateral-directional-stability: derives dutch roll, roll, and
spiral mode metrics; this leaf grades them.
- pilot-induced-oscillation: PIO susceptibility is a separate
pilot-in-the-loop coupling assessment, not a mode level.
Compliance
MIL-STD-1797A (Flying Qualities of Piloted Aircraft, successor to
MIL-F-8785C) is referenced, not reproduced: the criteria tables in
scripts/flying_qualities_logic.py are a summary paraphrase of the
standard's level framework for assessment use (compliance
STANDARDS-REF, reference-only: true, gated: false).
1---2name: mil-std-1797a3description: Use when the task is flying qualities assessment, handling qualities level classification, or MIL-STD-1797A compliance review. Assess the flying qualities of a piloted aircraft against MIL-STD-1797A level criteria: classify the flight phase category (A precision tracking, B gradual nonterminal, C terminal), select the aircraft class (I small light, II medium, III large heavy, IV high maneuverability), and grade each dynamic mode against the level tables: short period damping and frequency by category and class, phugoid minimum damping 0.04, dutch roll minimum damping 0.19, spiral minimum time to double 20 s, roll mode maximum time constant 1.0 s, roll performance. Produces a Level 1, 2, or 3 verdict per mode, the overall limiting level, and the Cooper-Harper band. Trigger: mil-std-1797a, flying qualities, handling qualities, short period, dutch roll, phugoid, spiral mode, roll mode, roll performance, flight phase category, aircraft class, cooper-harper band.4license: Apache-2.05---67# MIL-STD-1797A Flying Qualities Assessment (flight-mechanics/handling-qualities/mil-std-1797a)89Use when the task is grading the dynamic stability and response modes10of a piloted aircraft against the MIL-STD-1797A (and its predecessor11MIL-F-8785C) flying qualities level criteria: classify the flight12phase category and aircraft class, check each mode against the level13tables, and report the Level 1, 2, or 3 verdict plus the overall14limiting level and Cooper-Harper band. This is the level-criteria15leaf; mode derivative extraction and eigenvalue computation live in16the stability-control leaves.1718## Domain quick reference1920- Flight phase categories: A = nonterminal phases requiring rapid21 maneuvering, precision tracking, or precise flight-path control22 (air-to-air combat, ground attack, in-flight refueling as receiver,23 terrain following); B = nonterminal phases accomplished gradually24 without precision tracking (climb, cruise, loiter, descent); C =25 terminal phases (takeoff, approach, landing, wave-off).26- Aircraft classes: I = small light (utility, primary trainer); II =27 medium weight, medium maneuverability (small transport, tactical28 bomber); III = large heavy, low maneuverability (heavy transport,29 tanker, bomber); IV = high maneuverability (fighter, attack).30- Flying qualities levels: 1 = clearly adequate, desired performance31 with minimal pilot compensation; 2 = adequate with increased pilot32 workload or degraded mission effectiveness; 3 = safe but marginal,33 controllable with excessive workload. The overall level is the worst34 (limiting) level across modes.35- Short period (damping bands are category independent): Level 136 damping 0.35 to 1.30, Level 2 0.25 to 2.00, Level 3 minimum 0.15.37 Minimum frequency (rad/s) is a function of category, class, and38 n/alpha (g/rad), interpolated linearly between n/alpha = 1.0 and39 3.0 and clamped outside: category A classes I/II/III/IV start at40 3.6/3.6/3.0/2.5 and rise to 6.0; categories B and C start at 1.041 and rise to 2.0. Level 1 requires both damping and frequency; a42 frequency shortfall with Level 1 damping grades Level 2.43- Phugoid: Level 1 damping >= 0.04; Level 2 damping >= 0 (stable);44 Level 3 time to double >= 55 s (slow divergence allowed).45- Dutch roll (damping ratio, minimum frequency rad/s, minimum46 damping-frequency product): Level 1 category A class IV: 0.19, 1.0,47 0.35; category A classes I-III: 0.19, 0.4, 0.35; categories B and C:48 0.08, 0.4, 0.15. Level 2: 0.02, 0.4, 0.05. Level 3: damping > 049 (stable oscillation).50- Spiral mode minimum time to double: Level 1 20 s (A and C), 12 s51 (B); Level 2 8 s; Level 3 4 s.52- Roll mode maximum time constant (s): Level 1 1.0 (A), 1.4 (B), 1.053 (C); Level 2 1.4 (A), 3.0 (B), 1.4 (C); Level 3 10 (all).54- Roll performance (category A only): time to a 60 deg bank angle55 change: Level 1 1.3 s (classes I, II, IV) or 1.7 s (III); Level 256 1.8 s (I, II, IV) or 2.5 s (III); Level 3 3.6 s (I, II, IV) or 5.0 s57 (III). The first-order roll response phi(t) = p_ss * (t - tau *58 (1 - exp(-t / tau))) converts a steady roll rate p_ss and roll mode59 time constant tau into the bank angle reached in 1 s, the time to60 60 deg, and the time to 90 deg.61- Cooper-Harper tie-in: Level 1 maps to ratings 1-3 (satisfactory62 without improvement), Level 2 to 4-6 (deficiencies warrant63 improvement), Level 3 to 7-9 (deficiencies require improvement);64 rating 10 (uncontrollable) sits outside the level framework. The65 pilot-assigned rating itself is collected per the66 cooper-harper-rating leaf.6768## Workflow69701. Classify the flight phase category (A, B, or C) from the mission71 segment and the aircraft class (I to IV) from the vehicle type.722. Gather the measured or simulated mode metrics: short period damping73 and frequency (and n/alpha), phugoid damping, dutch roll damping74 and frequency, spiral time to double (or stable), roll mode time75 constant, and steady roll rate with roll mode time constant for76 roll performance.773. Run each mode assessment from scripts/flying_qualities_logic.py,78 e.g. assess_short_period({"zeta_sp": 0.7, "omega_sp": 3.0}, "A",79 "IV") returns {"level": 1, "verdict": "PASS", ...}. Every assess80 function validates category, class, and inputs and raises81 ValueError on invalid category, class, or non-physical values.824. Combine with overall_flying_qualities_level(state, category,83 aircraft_class): it runs all six modes, returns the overall84 limiting level, the limiting modes, and the Cooper-Harper band85 (1 to 3 for Level 1, 4 to 6 for Level 2, 7 to 9 for Level 3).86 Roll performance reports level None for categories B and C87 (the criterion applies to category A only) and is skipped by88 combine_levels.895. Interpret against the requirement: Level 1 is the usual90 procurement and safety requirement for the operational envelope;91 any Level 3 mode flags a safety-marginal condition; a divergent92 mode (negative damping) grades Level 3 and needs design action.9394## Worked example9596Fighter in air-to-air combat (category A, class IV) with measured97mode metrics: short period zeta 0.7, omega 3.0 rad/s, n/alpha 1.0;98phugoid zeta 0.05; dutch roll zeta 0.25, omega 1.5 rad/s; spiral99time to double 25 s; roll mode tau 0.8 s; steady roll rate 100 deg/s100with tau 0.5 s. Run:101102```python103import sys104sys.path.insert(0, "scripts")105from flying_qualities_logic import overall_flying_qualities_level106state = {"zeta_sp": 0.7, "omega_sp": 3.0, "n_over_alpha": 1.0,107 "zeta_ph": 0.05, "zeta_dr": 0.25, "omega_dr": 1.5,108 "t2_spiral": 25.0, "tau_roll": 0.8,109 "roll_rate_ss": 100.0, "roll_mode_tau": 0.5}110result = overall_flying_qualities_level(state, "A", "IV")111print(result["level"], result["limiting_modes"],112 result["cooper_harper_band"])113```114115Every mode is Level 1: short period frequency 3.0 >= 2.5 rad/s116minimum and damping 0.7 in band; dutch roll product 0.375 >= 0.35;117spiral 25 s >= 20 s; roll mode 0.8 s <= 1.0 s; roll performance118time to 60 deg about 1.04 s <= 1.3 s. Result: level 1, no limiting119mode, Cooper-Harper band 1-3. Now degrade the spiral to 10 s:120overall drops to level 2 with limiting mode "spiral" and band 4-6.121A short period damping of 0.15 drops the short period verdict to122level 3 and the overall level to 3.123124## Verification checklist125126- [ ] Category, class, and level definitions match the standard's127 framing (A/B/C, I-IV, levels 1-3).128- [ ] Short period: damping 0.35-1.30 Level 1; frequency table by129 category/class with n/alpha interpolation.130- [ ] Phugoid: 0.04 Level 1 minimum damping; 55 s Level 3 time to131 double for divergence.132- [ ] Dutch roll: 0.19 / 1.0 / 0.35 category A class IV Level 1;133 product criterion enforced (a high frequency alone does not134 pass a low damping product).135- [ ] Spiral: 20 s (A, C) and 12 s (B) Level 1; 8 s Level 2; 4 s136 Level 3.137- [ ] Roll mode: 1.0 s category A Level 1 maximum.138- [ ] Roll performance: 60 deg bank criterion per class, first-order139 response model, category A only.140- [ ] Overall level is the worst limiting level; Cooper-Harper band141 reported.142- [ ] Contract test passes: python3 scripts/test_flying_qualities.py143 (offline, deterministic, all known-good values asserted).144145## Pitfalls146147- Misclassifying category or class: the short-period frequency floor and the148 dutch roll tables are category- and class-dependent (category A class IV149 starts at 2.5 rad/s, category B at 1.0), so a Level 1 verdict computed for150 A/IV is not transferable to another category/class.151- Checking dutch roll on damping alone: the product criterion (damping times152 frequency) is enforced, so a high frequency does not pass a low damping153 product; report the limiting of damping, frequency and product.154- Applying roll performance outside category A: the time-to-60-deg criterion155 applies to category A only; assess_roll_performance reports level None for156 B and C and combine_levels skips it, so do not force a category-A roll157 rate check in cruise.158- Comparing spiral and roll mode in the wrong units: spiral is a minimum159 time to double (s) and roll mode a maximum time constant (s); they grade160 on separate tables and are not interchangeable thresholds.161- Reading the overall level from one mode: the overall level is the worst162 (limiting) level across all six modes, so a single Level 3 mode (for163 example divergent spiral time to double below 4 s) drops the whole164 assessment even when every other mode is Level 1.165- Passing invalid category, class or non-physical metrics: every assess166 function validates and raises ValueError on invalid category/class strings167 and non-physical values such as negative damping.168169## Behavior contract (gate 3)170171scripts/test_flying_qualities.py (stdlib unittest, offline) is the172correct-answer oracle: it asserts the known-good Level 1 case173(short period damping 0.7, frequency 3.0 rad/s, category A, class IV),174the low damping case (0.15 grades Level 3, not Level 1), the spiral175Level 2 case (time to double 10 s, category A), the dutch roll176product gating, the first-order roll response values (bank angle in1771 s about 56.77 deg and time to 90 deg about 1.37 s for p_ss 100178deg/s and tau 0.5 s), the overall limiting level, the Cooper-Harper179band tie-in, and ValueError on invalid category, class, and180non-physical inputs. Run: python3 scripts/test_flying_qualities.py.181182## Related skills183184- cooper-harper-rating: collects the pilot-assigned rating that the185 level bands map to; use together for piloted evaluation results.186- dynamic-stability: computes eigenvalues and mode metrics from187 derivatives; feed its outputs into this leaf's assess functions.188- short-period-mode-analysis: derives short period frequency and189 damping from stability derivatives; this leaf grades the result.190- lateral-directional-stability: derives dutch roll, roll, and191 spiral mode metrics; this leaf grades them.192- pilot-induced-oscillation: PIO susceptibility is a separate193 pilot-in-the-loop coupling assessment, not a mode level.194195## Compliance196197MIL-STD-1797A (Flying Qualities of Piloted Aircraft, successor to198MIL-F-8785C) is referenced, not reproduced: the criteria tables in199scripts/flying_qualities_logic.py are a summary paraphrase of the200standard's level framework for assessment use (compliance201STANDARDS-REF, reference-only: true, gated: false).