Fuel Tank Inerting Sizing (vehicle-design/sizing/fuel-tank-inerting-sizing)
Use when you must size the fuel tank inerting system at the conceptual
level: the on-board inert gas generation system (OBIGGS) delivers
nitrogen-enriched air (NEA) into the fuel tank ullage, and the ullage
oxygen fraction washes down toward the NEA oxygen fraction as a
well-mixed exponential decay. This leaf sizes the NEA flow that reaches
a target oxygen fraction within a required time, converts it to SCFM
for generator selection, and checks it against a generator capacity
limit. It implements the washout model in pure Python, stdlib only,
and pairs with vehicle-design/sizing/fuel-tank-sizing, which owns the
fuel volume and ullage volume side of the tank layout; the ullage
volume is an input here.
Domain quick reference
- Well-mixed washout: C(t) = C_NEA + (C0 - C_NEA) * exp(-Q * t / V),
with V the ullage volume in m3, Q the NEA volumetric flow in m3/s,
C0 the initial ullage oxygen fraction and C_NEA the NEA oxygen
fraction. The oxygen fraction decays exponentially toward C_NEA.
- Required NEA flow for a target within a required time: Q = (V / t) *
ln((C0 - C_NEA) / (C_tgt - C_NEA)). Larger required washdown (target
far below C0) and shorter time both drive Q up.
- Washout time at a fixed flow: t = (V / Q) * ln((C0 - C_NEA) /
(C_tgt - C_NEA)), the inverse of the flow relation.
- Units: ullage volume in m3, flows in m3/s, oxygen fractions as volume
fractions in 0..1, time in s. 1 m3/s = 2118.88 SCFM.
- Module defaults: C0 = 0.21 (air) and C_NEA = 0.05; both overridable.
- FAR 25.981 flammability reduction context: a fuel tank with an ullage
oxygen fraction at or above the flammability limit must be inerted or
otherwise protected; a 9% target is a common design point for
nitrogen inerting. The standard is referenced for context only, not
reproduced here.
Workflow
- Fix the inerting design point: ullage volume V in m3 (take it from
the fuel-tank-sizing loop), target oxygen fraction, and the required
time to reach it.
- Compute the required NEA flow with nea_flow_required; it returns the
flow in m3/s and in SCFM for the generator data sheet.
- Check the resulting oxygen trajectory with ullage_o2_fraction at the
required time; it confirms the target is met at the design point.
- For a given available generator flow, find how long the washdown
takes with washout_time.
- Run inerting_summary with the generator capacity limit; read the
capacity_verdict PASS or FAIL against that limit.
- Confirm the deterministic checks with the contract test
scripts/test_fuel_tank_inerting_sizing.py.
Worked example
Reference installation: center tank ullage 3.2 m3 must reach 9% oxygen
in 300 s with 5% NEA; NEA generator capacity 0.02 m3/s.
- Required flow: nea_flow_required(3.2, 0.09, 300.0) returns flow_m3_s
= 0.014787 m3/s and flow_scfm = 31.33 SCFM. Hand check: (3.2 / 300) *
ln(0.16 / 0.04) = 0.010667 * 1.386294 = 0.014787.
- Oxygen at the required time: ullage_o2_fraction at that flow and
300 s returns 0.0900 exactly: 0.05 + 0.16 * exp(-0.014787 * 300 /
3.2) = 0.05 + 0.16 * 0.2500 = 0.09.
- Washout time: washout_time(3.2, 0.014787, 0.09) returns 300.0 s,
recovering the design time.
- Capacity verdict: inerting_summary(3.2, 0.09, 300.0, 0.02) returns
capacity_verdict PASS (0.014787 <= 0.02); against a 0.01 m3/s
generator the same design returns FAIL.
- Scaling: raising the target to 0.13 (doubling the target delta
0.04 to 0.08) halves the required flow to 0.007394 m3/s at the same
volume and time.
Verification
- Confirm nea_flow_required(3.2, 0.09, 300.0) returns flow_m3_s =
0.014787 (within 1e-6 of the spec bound) and flow_scfm = 31.33
(within 1e-2).
- Confirm the washout identity: ullage_o2_fraction at the required
flow and time equals the target 0.09 within 1e-9, and washout_time at
the required flow returns 300 s within 1e-6.
- Confirm the scaling law: doubling the target delta halves the
required flow at fixed volume and time.
- Confirm every non-positive ullage volume, time or capacity, a flow of
zero in washout_time, a negative flow or time in ullage_o2_fraction,
and every out-of-range oxygen fraction (target <= C_NEA, target >=
C0, C_NEA or C0 non-physical) raises ValueError.
- Run the contract test offline: python3
scripts/test_fuel_tank_inerting_sizing.py (31 tests, deterministic).
Related leaves
- vehicle-design/sizing/fuel-tank-sizing: fuel volume and the ullage
volume side of the tank layout; its ullage volume is the input to
this washout sizing.
- vehicle-design/sizing/fuel-feed-system-sizing: the engine feed and
pump side of the fuel system, a separate sizing problem.
- vehicle-design/sizing/fuel-jettison-sizing: emergency fuel offload
for landing weight, unrelated to ullage washout.
- vehicle-design/sizing/fire-protection-sizing: compartment fire
suppression agent sizing, distinct from fuel-ullage inerting.
Pitfalls
- Treating the target fraction as reachable with unlimited NEA flow:
the log ratio ln((C0 - C_NEA) / (C_tgt - C_NEA)) diverges as the
target approaches C_NEA, so a target at or below the NEA oxygen
fraction is physically unreachable and raises ValueError.
- Mixing flow units: the module works in m3/s and converts with
2118.88 SCFM per m3/s; applying a per-minute factor to a per-second
flow mis-sizes the generator by a factor of 60.
- Ignoring the capacity verdict: the washout model gives the required
flow with no limit; the generator capacity check in inerting_summary
is what turns the physics into an installation verdict.
- Confusing this washout sizing with tank geometry sizing: fuel volume
and ullage volume are owned by fuel-tank-sizing and are inputs here,
not recomputed.
Behavior contract (gate 3)
Run the deterministic contract test (stdlib unittest, offline):
python3 scripts/test_fuel_tank_inerting_sizing.py
The test covers the 3.2 m3 reference sizing contract (required flow
0.014787 m3/s and 31.33 SCFM within the spec bounds), the washout
identity C at the required flow equals the target within 1e-9, the
washout time round trip to 300 s, the capacity verdict PASS at 0.02
and FAIL at 0.01 m3/s, the flow scaling laws (doubling the target
delta or the time halves the flow, doubling the ullage doubles it),
the exponential decay behavior at zero time, zero flow and long time,
the exact dict keys of every return, determinism, and ValueError
rejection of non-positive ullage, time, flow and capacity and of
out-of-range oxygen fractions.
Compliance
- Standards referenced, not reproduced: FAR 25.981 provides the fuel
tank flammability reduction context; the washout relations above are
standard engineering methodology, summary-only per standards-map.yaml.
- compliance: STANDARDS-REF, gated: false.
1---2name: fuel-tank-inerting-sizing3description: Use when you must size the fuel tank inerting system at the conceptual level: model the ullage as a well-mixed volume washed by nitrogen-enriched air (NEA), compute the required NEA flow from the exponential oxygen decay C(t) = C_NEA + (C0 - C_NEA) exp(-Q t / V), and solve the flow that reaches a target oxygen fraction within a required time Q = (V/t) ln((C0 - C_NEA)/(C_tgt - C_NEA)). Produces the required NEA flow in m3/s and in SCFM, the ullage oxygen fraction at the required time, the washout time at a given flow, and a PASS or FAIL verdict against the NEA generator capacity limit (FAR 25.981 fuel tank flammability reduction context). Trigger: obiggs flow sizing, ullage oxygen washout, nitrogen enriched air, fuel ullage inerting, nea generator capacity.4license: Apache-2.05---67# Fuel Tank Inerting Sizing (vehicle-design/sizing/fuel-tank-inerting-sizing)89Use when you must size the fuel tank inerting system at the conceptual10level: the on-board inert gas generation system (OBIGGS) delivers11nitrogen-enriched air (NEA) into the fuel tank ullage, and the ullage12oxygen fraction washes down toward the NEA oxygen fraction as a13well-mixed exponential decay. This leaf sizes the NEA flow that reaches14a target oxygen fraction within a required time, converts it to SCFM15for generator selection, and checks it against a generator capacity16limit. It implements the washout model in pure Python, stdlib only,17and pairs with vehicle-design/sizing/fuel-tank-sizing, which owns the18fuel volume and ullage volume side of the tank layout; the ullage19volume is an input here.2021## Domain quick reference2223- Well-mixed washout: C(t) = C_NEA + (C0 - C_NEA) * exp(-Q * t / V),24 with V the ullage volume in m3, Q the NEA volumetric flow in m3/s,25 C0 the initial ullage oxygen fraction and C_NEA the NEA oxygen26 fraction. The oxygen fraction decays exponentially toward C_NEA.27- Required NEA flow for a target within a required time: Q = (V / t) *28 ln((C0 - C_NEA) / (C_tgt - C_NEA)). Larger required washdown (target29 far below C0) and shorter time both drive Q up.30- Washout time at a fixed flow: t = (V / Q) * ln((C0 - C_NEA) /31 (C_tgt - C_NEA)), the inverse of the flow relation.32- Units: ullage volume in m3, flows in m3/s, oxygen fractions as volume33 fractions in 0..1, time in s. 1 m3/s = 2118.88 SCFM.34- Module defaults: C0 = 0.21 (air) and C_NEA = 0.05; both overridable.35- FAR 25.981 flammability reduction context: a fuel tank with an ullage36 oxygen fraction at or above the flammability limit must be inerted or37 otherwise protected; a 9% target is a common design point for38 nitrogen inerting. The standard is referenced for context only, not39 reproduced here.4041## Workflow42431. Fix the inerting design point: ullage volume V in m3 (take it from44 the fuel-tank-sizing loop), target oxygen fraction, and the required45 time to reach it.462. Compute the required NEA flow with nea_flow_required; it returns the47 flow in m3/s and in SCFM for the generator data sheet.483. Check the resulting oxygen trajectory with ullage_o2_fraction at the49 required time; it confirms the target is met at the design point.504. For a given available generator flow, find how long the washdown51 takes with washout_time.525. Run inerting_summary with the generator capacity limit; read the53 capacity_verdict PASS or FAIL against that limit.546. Confirm the deterministic checks with the contract test55 scripts/test_fuel_tank_inerting_sizing.py.5657## Worked example5859Reference installation: center tank ullage 3.2 m3 must reach 9% oxygen60in 300 s with 5% NEA; NEA generator capacity 0.02 m3/s.6162- Required flow: nea_flow_required(3.2, 0.09, 300.0) returns flow_m3_s63 = 0.014787 m3/s and flow_scfm = 31.33 SCFM. Hand check: (3.2 / 300) *64 ln(0.16 / 0.04) = 0.010667 * 1.386294 = 0.014787.65- Oxygen at the required time: ullage_o2_fraction at that flow and66 300 s returns 0.0900 exactly: 0.05 + 0.16 * exp(-0.014787 * 300 /67 3.2) = 0.05 + 0.16 * 0.2500 = 0.09.68- Washout time: washout_time(3.2, 0.014787, 0.09) returns 300.0 s,69 recovering the design time.70- Capacity verdict: inerting_summary(3.2, 0.09, 300.0, 0.02) returns71 capacity_verdict PASS (0.014787 <= 0.02); against a 0.01 m3/s72 generator the same design returns FAIL.73- Scaling: raising the target to 0.13 (doubling the target delta74 0.04 to 0.08) halves the required flow to 0.007394 m3/s at the same75 volume and time.7677## Verification7879- Confirm nea_flow_required(3.2, 0.09, 300.0) returns flow_m3_s =80 0.014787 (within 1e-6 of the spec bound) and flow_scfm = 31.3381 (within 1e-2).82- Confirm the washout identity: ullage_o2_fraction at the required83 flow and time equals the target 0.09 within 1e-9, and washout_time at84 the required flow returns 300 s within 1e-6.85- Confirm the scaling law: doubling the target delta halves the86 required flow at fixed volume and time.87- Confirm every non-positive ullage volume, time or capacity, a flow of88 zero in washout_time, a negative flow or time in ullage_o2_fraction,89 and every out-of-range oxygen fraction (target <= C_NEA, target >=90 C0, C_NEA or C0 non-physical) raises ValueError.91- Run the contract test offline: python392 scripts/test_fuel_tank_inerting_sizing.py (31 tests, deterministic).9394## Related leaves9596- vehicle-design/sizing/fuel-tank-sizing: fuel volume and the ullage97 volume side of the tank layout; its ullage volume is the input to98 this washout sizing.99- vehicle-design/sizing/fuel-feed-system-sizing: the engine feed and100 pump side of the fuel system, a separate sizing problem.101- vehicle-design/sizing/fuel-jettison-sizing: emergency fuel offload102 for landing weight, unrelated to ullage washout.103- vehicle-design/sizing/fire-protection-sizing: compartment fire104 suppression agent sizing, distinct from fuel-ullage inerting.105106## Pitfalls107108- Treating the target fraction as reachable with unlimited NEA flow:109 the log ratio ln((C0 - C_NEA) / (C_tgt - C_NEA)) diverges as the110 target approaches C_NEA, so a target at or below the NEA oxygen111 fraction is physically unreachable and raises ValueError.112- Mixing flow units: the module works in m3/s and converts with113 2118.88 SCFM per m3/s; applying a per-minute factor to a per-second114 flow mis-sizes the generator by a factor of 60.115- Ignoring the capacity verdict: the washout model gives the required116 flow with no limit; the generator capacity check in inerting_summary117 is what turns the physics into an installation verdict.118- Confusing this washout sizing with tank geometry sizing: fuel volume119 and ullage volume are owned by fuel-tank-sizing and are inputs here,120 not recomputed.121122## Behavior contract (gate 3)123124Run the deterministic contract test (stdlib unittest, offline):125126 python3 scripts/test_fuel_tank_inerting_sizing.py127128The test covers the 3.2 m3 reference sizing contract (required flow1290.014787 m3/s and 31.33 SCFM within the spec bounds), the washout130identity C at the required flow equals the target within 1e-9, the131washout time round trip to 300 s, the capacity verdict PASS at 0.02132and FAIL at 0.01 m3/s, the flow scaling laws (doubling the target133delta or the time halves the flow, doubling the ullage doubles it),134the exponential decay behavior at zero time, zero flow and long time,135the exact dict keys of every return, determinism, and ValueError136rejection of non-positive ullage, time, flow and capacity and of137out-of-range oxygen fractions.138139## Compliance140141- Standards referenced, not reproduced: FAR 25.981 provides the fuel142 tank flammability reduction context; the washout relations above are143 standard engineering methodology, summary-only per standards-map.yaml.144- compliance: STANDARDS-REF, gated: false.