Bleed Air System Sizing (vehicle-design/sizing/bleed-air-system-sizing)
Use when the task is sizing the aircraft pneumatic bleed distribution
system of a twin-engine transport at the conceptual level: the bleed
air bled from the engine offtakes is distributed to the ECS packs,
the wing anti-ice system and the pressurization trim through a bleed
manifold and per-engine ducts. This leaf rolls up the total bleed
offtake mass flow from the fixed consumer demands, splits the offtake
evenly across the two engines, computes the thermal budget the
precooler and conditioning system must reject in cooling the bleed
from the offtake supply temperature to the consumer supply
temperature, and sizes each engine bleed duct diameter from
compressible pipe flow at a fixed design Mach number. The pack flows,
the wing anti-ice flow and the trim flow are INPUTS here (values
computed by the sibling environmental-control and ice-protection
leaves); nothing downstream of the offtakes is recomputed. The module
implements the model in pure Python, stdlib only. It pairs with
vehicle-design/sizing/environmental-control-sizing (pack flow demand
and pressurization trim demand) and
vehicle-design/sizing/ice-protection-sizing (the anti-ice bleed
demand). The regulatory context is FAR 25.863 bleed and flammable
fluid plumbing, referenced but not reproduced.
Domain quick reference
- Bleed offtake rollup: m_total = sum(pack flows) + m_anti_ice +
m_trim; with two engines the per-engine offtake is m_eng =
m_total / 2. The consumer flows are fixed demands computed by the
sibling leaves, so the rollup is pure summation.
- Bleed thermal budget: q = m * CP_AIR * (T_bleed - T_supply), the
sensible heat the precooler and conditioning system must reject to
cool the bleed from the engine offtake total temperature T_bleed to
the consumer supply temperature T_supply (288 K sea level standard
day by default). CP_AIR = 1005.0 J/(kg K).
- Duct flow state at the fixed design Mach number M: density rho =
p / (R_AIR * T_bleed), sonic speed a = sqrt(GAMMA_AIR * R_AIR *
T_bleed), duct velocity V = M * a, with R_AIR = 287.0 J/(kg K) and
GAMMA_AIR = 1.4.
- Duct geometry: flow area A = m / (rho * V), diameter D =
sqrt(4 * A / pi). The duct is sized at the per-engine offtake flow
at the nominal duct static pressure (350 kPa default) and the fixed
design Mach number (0.30 default).
- Fit verdict: PASS when the sized duct diameter is at or below the
nominal duct diameter limit the installation can accommodate, else
FAIL.
- Units are SI throughout: kg/s, K, Pa, m, m/s, W.
- FAR 25.863 frames the bleed plumbing safety context (flammable
fluid lines); the relations above are standard engineering
methodology, summary-only.
Workflow
- Collect the fixed consumer bleed demands: each ECS pack flow in
kg/s (environmental-control-sizing output), the wing anti-ice bleed
flow in kg/s (ice-protection-sizing output), and the pressurization
trim flow in kg/s.
- Roll the offtake up with total_bleed_offtake(pack_flows_kg_s,
anti_ice_kg_s, trim_kg_s): the total and the per-engine offtake
(total split over the two engines).
- Fix the bleed supply temperature T_bleed (engine offtake total
temperature) and the consumer supply temperature T_supply.
- Compute the precooler rejection load per engine and total with
bleed_thermal_budget on the per-engine and total offtake flows.
- Size each engine duct with bleed_duct_diameter at the per-engine
flow, the bleed temperature and the duct static pressure; the
design Mach number and pressure default to the module constants.
- Judge the architecture with bleed_system_summary: pass the
consumer flows, T_bleed and the nominal duct diameter limit; read
the total and per-engine offtake, the thermal budgets, the duct
area and diameter, and the PASS/FAIL fit verdict.
- Confirm the deterministic checks with the contract test
scripts/test_bleed_air_system_sizing.py.
Worked example
Reference twin-engine transport: two ECS packs at 0.80 kg/s each,
wing anti-ice 0.0179 kg/s (ice-protection-sizing anchor value),
pressurization trim 0.05 kg/s, bleed supply 450 K, duct pressure
350 kPa, design duct Mach 0.30, nominal duct diameter limit 0.06 m.
- Offtake rollup: total = 2 * 0.80 + 0.0179 + 0.05 = 1.6679 kg/s;
per-engine = 0.83395 kg/s (total_bleed_offtake real output
1.6679 kg/s total, 0.83395 kg/s per engine).
- Per-engine thermal budget: q = 0.83395 * 1005 * (450 - 288) =
135775.4 W (135.8 kW class); total = 1.6679 * 1005 * 162 =
271550.8 W (271.6 kW class, 271551 W rounded). The total is exactly
twice the per-engine value.
- Duct flow state at 350 kPa and 450 K: rho = 350000 / (287 * 450) =
2.7100 kg/m3; a = sqrt(1.4 * 287 * 450) = 425.22 m/s; V = 0.30 *
425.22 = 127.57 m/s (module outputs 2.7100 kg/m3 and 127.57 m/s).
- Duct geometry at the per-engine flow: A = 0.83395 / (2.7100 *
127.57) = 0.002412 m2; D = sqrt(4 * 0.002412 / pi) = 0.0554 m
(55.4 mm, module output 0.05542 m).
- Fit verdict at the 0.06 m limit: PASS (0.0554 <= 0.06). At a 0.05 m
limit the verdict flips to FAIL.
Pitfalls
- Feeding total flow into the duct sizing: the duct is a per-engine
component sized at the per-engine offtake 0.83395 kg/s, not at the
total 1.6679 kg/s; sizing at the total flow overstates the diameter
by sqrt(2).
- Recomputing consumer demands: the pack flows, anti-ice flow and
trim flow are fixed inputs produced by the sibling
environmental-control and ice-protection leaves; this leaf rolls
them up and never recomputes them from heat loads or icing flux.
- Treating T_bleed as the duct static temperature: the duct flow
state uses the bleed supply total temperature for the density and
sonic speed at the stated static pressure, consistent with the
fixed design Mach number model.
- Confusing the thermal budget with a heat exchanger size: q is the
precooler rejection load only; it sets the conditioning duty, not
the pack flow demand or any pressurization quantity.
- Sizing at a non-fixed Mach number: the duct Mach number is a fixed
design parameter (0.30 default); lowering it at fixed flow and
state enlarges the required area.
Verification
- Confirm total_bleed_offtake([0.80, 0.80], 0.0179, 0.05) returns a
total of 1.6679 kg/s with 2 * per_engine == total within 1e-9.
- Confirm bleed_thermal_budget(1.6679, 450) returns 271550.8 W, that
doubling the mass flow doubles the budget, and that the dict keys
are exactly q_w, mass_kg_s, t_bleed_k, t_supply_k.
- Confirm bleed_duct_diameter(0.83395, 450) returns a diameter of
0.0554 m within 1e-3 and that the area round-trips through
A = pi * D^2 / 4 within 1e-9.
- Confirm bleed_system_summary verdicts PASS at the 0.06 m limit and
FAIL at the 0.05 m limit.
- Confirm every negative flow, every non-positive mass, temperature
or pressure, every Mach number outside (0, 1) and every bleed
temperature at or below the supply temperature raises ValueError.
- Confirm identical inputs give identical outputs.
- Run the contract test offline: python3
scripts/test_bleed_air_system_sizing.py (35 tests, deterministic).
Related leaves
- vehicle-design/sizing/environmental-control-sizing: the ECS pack
flow demand and pressurization trim demand that feed this rollup.
- vehicle-design/sizing/ice-protection-sizing: the wing anti-ice
bleed demand input (0.0179 kg/s anchor value).
- vehicle-design/sizing/engine-sizing: main-engine performance sizing
that consumes bleed for its thrust bookkeeping.
- vehicle-design/sizing/apu-fuel-burn-sizing: the APU-side offtake
and fuel accounting for the auxiliary power installation.
- propulsion/engine-airframe/engine-airframe-integration: bleed as a
thrust-loss term at the engine-airframe interface.
Behavior contract (gate 3)
Run the deterministic contract test (stdlib unittest, offline):
python3 scripts/test_bleed_air_system_sizing.py
The test covers the twin-engine transport worked example (offtake
1.6679 kg/s total, per-engine budget 135775.4 W, duct diameter
0.0554 m inside the 1e-3 bound), the offtake identity
2 * per_engine == total, the duct area round trip through
A = pi * D^2 / 4, thermal budget doubling with mass flow, the duct
state relations (rho = p/(R T), V = M * a), the summary fit verdicts
at the 0.06 m and 0.05 m limits, dict key contracts for every
function, output determinism, and ValueError rejection of negative
flows, non-positive mass, temperature and pressure, Mach numbers
outside (0, 1), and bleed temperatures at or below the supply
temperature.
Compliance
- Standards referenced, not reproduced: FAR 25.863 (bleed and other
flammable fluid plumbing context) is named for context only; the
sizing relations above are standard engineering methodology,
summary-only per standards-map.yaml.
- compliance: STANDARDS-REF, gated: false.
1---2name: bleed-air-system-sizing3description: Use when you must size the aircraft bleed air system: roll up the total bleed offtake mass flow from the fixed consumer demands (ECS pack flows, wing anti-ice flow, pressurization trim flow), split the offtake per engine, compute the bleed thermal budget the precooler must reject between the bleed supply temperature and the consumer supply temperature, and size each engine bleed duct diameter from compressible pipe flow at a fixed design Mach number. Produces the total and per-engine offtake mass flow, the per-engine and total thermal budget, the duct flow area and diameter, and a fit verdict against the nominal duct diameter limit. Trigger: bleed air sizing, bleed offtake mass flow, per engine offtake, bleed duct diameter, duct Mach sizing, precooler heat load, bleed thermal budget, pneumatic bleed manifold, bleed supply temperature.4license: Apache-2.05---67# Bleed Air System Sizing (vehicle-design/sizing/bleed-air-system-sizing)89Use when the task is sizing the aircraft pneumatic bleed distribution10system of a twin-engine transport at the conceptual level: the bleed11air bled from the engine offtakes is distributed to the ECS packs,12the wing anti-ice system and the pressurization trim through a bleed13manifold and per-engine ducts. This leaf rolls up the total bleed14offtake mass flow from the fixed consumer demands, splits the offtake15evenly across the two engines, computes the thermal budget the16precooler and conditioning system must reject in cooling the bleed17from the offtake supply temperature to the consumer supply18temperature, and sizes each engine bleed duct diameter from19compressible pipe flow at a fixed design Mach number. The pack flows,20the wing anti-ice flow and the trim flow are INPUTS here (values21computed by the sibling environmental-control and ice-protection22leaves); nothing downstream of the offtakes is recomputed. The module23implements the model in pure Python, stdlib only. It pairs with24vehicle-design/sizing/environmental-control-sizing (pack flow demand25and pressurization trim demand) and26vehicle-design/sizing/ice-protection-sizing (the anti-ice bleed27demand). The regulatory context is FAR 25.863 bleed and flammable28fluid plumbing, referenced but not reproduced.2930## Domain quick reference3132- Bleed offtake rollup: m_total = sum(pack flows) + m_anti_ice +33 m_trim; with two engines the per-engine offtake is m_eng =34 m_total / 2. The consumer flows are fixed demands computed by the35 sibling leaves, so the rollup is pure summation.36- Bleed thermal budget: q = m * CP_AIR * (T_bleed - T_supply), the37 sensible heat the precooler and conditioning system must reject to38 cool the bleed from the engine offtake total temperature T_bleed to39 the consumer supply temperature T_supply (288 K sea level standard40 day by default). CP_AIR = 1005.0 J/(kg K).41- Duct flow state at the fixed design Mach number M: density rho =42 p / (R_AIR * T_bleed), sonic speed a = sqrt(GAMMA_AIR * R_AIR *43 T_bleed), duct velocity V = M * a, with R_AIR = 287.0 J/(kg K) and44 GAMMA_AIR = 1.4.45- Duct geometry: flow area A = m / (rho * V), diameter D =46 sqrt(4 * A / pi). The duct is sized at the per-engine offtake flow47 at the nominal duct static pressure (350 kPa default) and the fixed48 design Mach number (0.30 default).49- Fit verdict: PASS when the sized duct diameter is at or below the50 nominal duct diameter limit the installation can accommodate, else51 FAIL.52- Units are SI throughout: kg/s, K, Pa, m, m/s, W.53- FAR 25.863 frames the bleed plumbing safety context (flammable54 fluid lines); the relations above are standard engineering55 methodology, summary-only.5657## Workflow58591. Collect the fixed consumer bleed demands: each ECS pack flow in60 kg/s (environmental-control-sizing output), the wing anti-ice bleed61 flow in kg/s (ice-protection-sizing output), and the pressurization62 trim flow in kg/s.632. Roll the offtake up with total_bleed_offtake(pack_flows_kg_s,64 anti_ice_kg_s, trim_kg_s): the total and the per-engine offtake65 (total split over the two engines).663. Fix the bleed supply temperature T_bleed (engine offtake total67 temperature) and the consumer supply temperature T_supply.684. Compute the precooler rejection load per engine and total with69 bleed_thermal_budget on the per-engine and total offtake flows.705. Size each engine duct with bleed_duct_diameter at the per-engine71 flow, the bleed temperature and the duct static pressure; the72 design Mach number and pressure default to the module constants.736. Judge the architecture with bleed_system_summary: pass the74 consumer flows, T_bleed and the nominal duct diameter limit; read75 the total and per-engine offtake, the thermal budgets, the duct76 area and diameter, and the PASS/FAIL fit verdict.777. Confirm the deterministic checks with the contract test78 scripts/test_bleed_air_system_sizing.py.7980## Worked example8182Reference twin-engine transport: two ECS packs at 0.80 kg/s each,83wing anti-ice 0.0179 kg/s (ice-protection-sizing anchor value),84pressurization trim 0.05 kg/s, bleed supply 450 K, duct pressure85350 kPa, design duct Mach 0.30, nominal duct diameter limit 0.06 m.8687- Offtake rollup: total = 2 * 0.80 + 0.0179 + 0.05 = 1.6679 kg/s;88 per-engine = 0.83395 kg/s (total_bleed_offtake real output89 1.6679 kg/s total, 0.83395 kg/s per engine).90- Per-engine thermal budget: q = 0.83395 * 1005 * (450 - 288) =91 135775.4 W (135.8 kW class); total = 1.6679 * 1005 * 162 =92 271550.8 W (271.6 kW class, 271551 W rounded). The total is exactly93 twice the per-engine value.94- Duct flow state at 350 kPa and 450 K: rho = 350000 / (287 * 450) =95 2.7100 kg/m3; a = sqrt(1.4 * 287 * 450) = 425.22 m/s; V = 0.30 *96 425.22 = 127.57 m/s (module outputs 2.7100 kg/m3 and 127.57 m/s).97- Duct geometry at the per-engine flow: A = 0.83395 / (2.7100 *98 127.57) = 0.002412 m2; D = sqrt(4 * 0.002412 / pi) = 0.0554 m99 (55.4 mm, module output 0.05542 m).100- Fit verdict at the 0.06 m limit: PASS (0.0554 <= 0.06). At a 0.05 m101 limit the verdict flips to FAIL.102103## Pitfalls104105- Feeding total flow into the duct sizing: the duct is a per-engine106 component sized at the per-engine offtake 0.83395 kg/s, not at the107 total 1.6679 kg/s; sizing at the total flow overstates the diameter108 by sqrt(2).109- Recomputing consumer demands: the pack flows, anti-ice flow and110 trim flow are fixed inputs produced by the sibling111 environmental-control and ice-protection leaves; this leaf rolls112 them up and never recomputes them from heat loads or icing flux.113- Treating T_bleed as the duct static temperature: the duct flow114 state uses the bleed supply total temperature for the density and115 sonic speed at the stated static pressure, consistent with the116 fixed design Mach number model.117- Confusing the thermal budget with a heat exchanger size: q is the118 precooler rejection load only; it sets the conditioning duty, not119 the pack flow demand or any pressurization quantity.120- Sizing at a non-fixed Mach number: the duct Mach number is a fixed121 design parameter (0.30 default); lowering it at fixed flow and122 state enlarges the required area.123124## Verification125126- Confirm total_bleed_offtake([0.80, 0.80], 0.0179, 0.05) returns a127 total of 1.6679 kg/s with 2 * per_engine == total within 1e-9.128- Confirm bleed_thermal_budget(1.6679, 450) returns 271550.8 W, that129 doubling the mass flow doubles the budget, and that the dict keys130 are exactly q_w, mass_kg_s, t_bleed_k, t_supply_k.131- Confirm bleed_duct_diameter(0.83395, 450) returns a diameter of132 0.0554 m within 1e-3 and that the area round-trips through133 A = pi * D^2 / 4 within 1e-9.134- Confirm bleed_system_summary verdicts PASS at the 0.06 m limit and135 FAIL at the 0.05 m limit.136- Confirm every negative flow, every non-positive mass, temperature137 or pressure, every Mach number outside (0, 1) and every bleed138 temperature at or below the supply temperature raises ValueError.139- Confirm identical inputs give identical outputs.140- Run the contract test offline: python3141 scripts/test_bleed_air_system_sizing.py (35 tests, deterministic).142143## Related leaves144145- vehicle-design/sizing/environmental-control-sizing: the ECS pack146 flow demand and pressurization trim demand that feed this rollup.147- vehicle-design/sizing/ice-protection-sizing: the wing anti-ice148 bleed demand input (0.0179 kg/s anchor value).149- vehicle-design/sizing/engine-sizing: main-engine performance sizing150 that consumes bleed for its thrust bookkeeping.151- vehicle-design/sizing/apu-fuel-burn-sizing: the APU-side offtake152 and fuel accounting for the auxiliary power installation.153- propulsion/engine-airframe/engine-airframe-integration: bleed as a154 thrust-loss term at the engine-airframe interface.155156## Behavior contract (gate 3)157158Run the deterministic contract test (stdlib unittest, offline):159160 python3 scripts/test_bleed_air_system_sizing.py161162The test covers the twin-engine transport worked example (offtake1631.6679 kg/s total, per-engine budget 135775.4 W, duct diameter1640.0554 m inside the 1e-3 bound), the offtake identity1652 * per_engine == total, the duct area round trip through166A = pi * D^2 / 4, thermal budget doubling with mass flow, the duct167state relations (rho = p/(R T), V = M * a), the summary fit verdicts168at the 0.06 m and 0.05 m limits, dict key contracts for every169function, output determinism, and ValueError rejection of negative170flows, non-positive mass, temperature and pressure, Mach numbers171outside (0, 1), and bleed temperatures at or below the supply172temperature.173174## Compliance175176- Standards referenced, not reproduced: FAR 25.863 (bleed and other177 flammable fluid plumbing context) is named for context only; the178 sizing relations above are standard engineering methodology,179 summary-only per standards-map.yaml.180- compliance: STANDARDS-REF, gated: false.