Icing Flight Test (flight-test-operations/envelope/icing-flight-test)
Use when the task is planning the icing certification flight test campaign for a transport airplane: categorizing each icing encounter against the FAR/CS 25 Appendix C continuous maximum and intermittent maximum envelopes, rating encounter severity, screening the natural icing search conditions, and building the artificial ice shape test matrix that simulates the critical in-flight and runback ice shapes on the surfaces that see the ice. This leaf implements the simplified envelope model in pure Python, stdlib only. It pairs with flight-test-operations/envelope/envelope-expansion for the program sequencing around the icing block and flight-test-operations/envelope/v-speeds for the test speed reference, and it cites vehicle-design/sizing/ice-protection-sizing as the design-side sibling whose thermal sizing math this leaf does not replace.
Domain quick reference
- Envelope model: the Appendix C continuous maximum (stratiform) and intermittent maximum (cumuliform) envelopes bound the flight liquid water content (LWC) as a function of total air temperature (TAT) over -30 C to 0 C, at given median volumetric diameter (MVD) bands. The module constants are paraphrased representative boundary points at reference level, NOT the regulation's full table; the full Appendix C table is authority-controlled and must be read from the regulation.
- Continuous maximum anchors: LWC_CM_MAX = 0.44 g/m3 at -10 C, scaling linearly to LWC_CM_0C = 0.20 g/m3 at 0 C and LWC_CM_N30C = 0.15 g/m3 at -30 C; MVD band 15 to 40 micron (CM_MVD_MIN, CM_MVD_MAX).
- Intermittent maximum anchors: LWC_IM_MAX = 1.4 g/m3 at -10 C, scaling linearly to LWC_IM_0C = 0.65 g/m3 at 0 C and LWC_IM_N30C = 0.35 g/m3 at -30 C; MVD band 15 to 50 micron (IM_MVD_MIN, IM_MVD_MAX).
- LWC limit segments: cm_lwc_limit(tat) and im_lwc_limit(tat) interpolate the two linear segments between the anchors and clamp the temperature to [-30, 0] C.
- Envelope verdict: envelope_verdict(lwc, mvd, tat) reports the regime as continuous-max when the point sits under the continuous limit in its MVD band, intermittent-max when it sits under the intermittent limit in its MVD band but above the continuous envelope, and outside otherwise; margin = governing limit LWC - encounter LWC.
- SLD exclusion: any encounter with mvd > SLD_MVD_MIN = 50 micron is a supercooled large droplet case and sits outside the Appendix C envelope by this model.
- Severity: encounter_severity(lwc, tat, duration_min) forms the ratio lwc / cm_lwc_limit(tat); below 0.5 trace, below 1.0 light, below 1.5 moderate when also under the intermittent limit (else severe), at or above 1.5 severe. A duration above SEVERE_DURATION_MIN = 30 min steps the label up one level, capped at severe.
- Natural icing search: natural_icing_search_ok accepts a forecast point when TAT is within [-30, 0] C, the forecast LWC is at least SEARCH_LWC_FRACTION = 0.1 times the continuous limit, and the freezing level sits at or above the cloud base.
- Artificial shapes: artificial_shape_check audits the shape matrix against CRITICAL_SURFACES = [wing, horizontal-tail, vertical-tail, windshield, probe], requiring coverage_frac at least COVERAGE_MIN = 0.8 and roughness_ok True per surface, with shape types glaze, rime, mixed and runback.
- Effectiveness points: standard_envelope_rows() lists the boundary conditions to fly; effectiveness_test_points(configs, rows) pairs each configuration (anti-ice on or off, de-ice cycle setting) with the envelope rows and their expected regimes.
- Units: LWC in g/m3, MVD in micron, TAT in C, altitude in ft, duration in minutes.
Workflow
- Fix the encounter flight condition: total air temperature TAT (C), measured or forecast liquid water content LWC (g/m3), median volumetric diameter MVD (micron) and the exposure duration.
- Get the governing limits with cm_lwc_limit and im_lwc_limit and confirm the anchor behavior at -30, -10 and 0 C.
- Categorize the encounter with envelope_verdict; record the regime, the margin and the reasons. Treat any mvd above 50 micron as the supercooled large droplet exclusion with its explicit reason.
- Rate the encounter with encounter_severity for the flight test log; let the exposure duration step trace or light encounters up when the run exceeds 30 minutes.
- Screen the natural icing search conditions with natural_icing_search_ok: TAT band, forecast LWC against 10 percent of the continuous limit, and the freezing level relative to the cloud base.
- Build the artificial ice shape matrix and audit it with artificial_shape_check: every surface in CRITICAL_SURFACES must carry a glaze, rime, mixed or runback shape at coverage_frac at least 0.8 with representative roughness.
- Lay out the effectiveness block: standard_envelope_rows() gives the boundary rows, then effectiveness_test_points pairs each test configuration (anti-ice on or off with its de-ice cycle setting) against the rows that must be flown.
- Summarize each encounter for the test log with summarize and close with the deterministic contract test scripts/test_icing_flight_test.py.
Worked example
Certification campaign planning for the reference encounter at TAT -10 C, LWC 0.30 g/m3, MVD 20 micron:
- cm_lwc_limit(-10) = 0.44 g/m3; envelope_verdict(0.30, 20, -10) returns in_envelope True, regime continuous-max, margin 0.44 - 0.30 = 0.14 g/m3.
- A heavier point at the same temperature, LWC 1.0 g/m3, MVD 25 micron, sits above the continuous limit: im_lwc_limit(-10) = 1.4 g/m3, so the verdict is intermittent-max with margin 0.4 g/m3.
- LWC 1.6 g/m3 at MVD 25 micron exceeds both limits: verdict outside with margin -0.2 g/m3.
- LWC 0.3 g/m3 at MVD 60 micron and TAT -5 C is outside with the supercooled-large-droplet reason, even though its LWC alone would fit.
- Severity: LWC 0.22 g/m3 at -10 C gives ratio 0.5, rated light (index 1); the same exposure held 45 minutes steps to moderate (index 2).
- Artificial shape matrix covering wing and horizontal-tail only fails artificial_shape_check with a missing vertical-tail issue (plus windshield and probe); the full five-surface matrix at coverage 0.9 with roughness_ok True passes with no issues.
- Natural icing search at TAT -8 C, cloud base 3000 ft, freezing level 2000 ft and forecast LWC 0.1 g/m3 returns ok False (freezing level below the cloud base); the same point with the freezing level at 4000 ft returns ok True.
- Effectiveness rows pair the anti-ice-off and anti-ice-on configurations with the continuous-maximum-peak-lwc and intermittent-maximum-peak-lwc rows and their expected regimes.
- summarize(0.30, 20, -10, 45) folds the verdict and the severity into one report dict for the log.
Pitfalls
- Checking LWC against the continuous limit alone: a point above the continuous envelope still has the intermittent-max envelope to check (im_lwc_limit(-10) = 1.4 g/m3), so LWC 1.0 at MVD 25 is intermittent-max, not outside.
- Ignoring the droplet-size band: MVD 40 stays continuous-max, MVD 41 and 50 fall under intermittent-max, and anything above 50 micron is the supercooled large droplet exclusion - LWC 0.3 at MVD 60 is outside even though its LWC alone fits.
- Rating severity from the LWC ratio alone: ratio 0.5 rates light at the start, but the same exposure steps to moderate past 30 minutes and caps at severe, so exposure time is part of the rating.
- Trimming the artificial shape matrix to the lifting surfaces: a wing-and-horizontal-tail-only matrix fails the check with a missing vertical-tail issue (plus windshield and probe); the full five-surface matrix is required.
- Planning the natural icing search without checking the freezing level: with the freezing level at 2000 ft below the 3000 ft cloud base the search returns ok False; raising the freezing level to 4000 ft returns ok True.
- Feeding non-physical inputs: negative lwc or mvd, non-finite values, coverage_frac outside [0, 1], and unknown surfaces or shape types all raise ValueError.
Verification
- Confirm cm_lwc_limit(-10) returns exactly 0.44 and im_lwc_limit(-10) exactly 1.4, with the linear segments hitting 0.32 g/m3 at -5 C for the continuous envelope.
- Confirm the worked margins: continuous-max margin 0.14 at LWC 0.30, intermittent-max margin 0.4 at LWC 1.0.
- Confirm the MVD band edges: MVD 40 stays continuous-max, MVD 41 and MVD 50 fall under intermittent-max, and anything above 50 micron is the supercooled large droplet exclusion.
- Confirm severity ratio 0.5 rates light and steps to moderate past 30 minutes, capped at severe.
- Confirm every negative lwc or mvd, every non-finite input, every coverage_frac outside [0, 1], every unknown surface and every unknown shape type raises ValueError.
- Run the contract test offline: python3 scripts/test_icing_flight_test.py (35 tests, deterministic).
Related leaves
- flight-test-operations/envelope/envelope-expansion: program sequencing and expansion steps around the icing block.
- flight-test-operations/envelope/v-speeds: test speed references used during the icing points.
- flight-test-operations/envelope/stall-characteristics-testing: stall and handling checks flown with artificial ice shapes in place.
- vehicle-design/sizing/ice-protection-sizing: the design-side thermal sizing sibling this leaf does not replace.
- avionics/do160/environmental-qualification: chamber qualification of the ice detection and probe equipment, distinct from this flight level campaign.
Behavior contract (gate 3)
Run the deterministic contract test (stdlib unittest, offline):
python3 scripts/test_icing_flight_test.py
The test covers the LWC limit segments at the three anchor temperatures, both worked-example envelope margins, the SLD exclusion reason, the severity ladder with the duration step, the natural icing search screening flags, the artificial shape matrix coverage and roughness issues, the effectiveness test point pairing, and ValueError rejection of non-physical inputs.
Compliance
- Standards referenced, not reproduced: FAR 25 Appendix C and CS 25 Appendix C define the authority-controlled icing envelopes; this leaf carries only a simplified typical summary as paraphrased module constants per standards-map.yaml. Read the regulation for the full table before any certification submission.
- compliance: STANDARDS-REF, gated: false.