Pressure Bulkhead Dome (structures/fem/pressure-bulkhead)
Use when the task is the membrane-theory sizing of the fuselage
pressure-bulkhead dome that closes a pressurized cylindrical barrel.
This leaf implements the closed-form dome stress field for the three
standard bulkhead geometries, a spherical cap, a hemisphere, and a
2:1 ellipsoid, the apex and equator meridional and circumferential
membrane stresses of an ellipsoidal dome (including the known 2:1
knuckle compression), the dome margin against ultimate under the FAR
25.303 factor of safety of 1.5, the spherical-cap rise where the cap
cuts the barrel, and the unbalanced meridional-resultant junction
ring load at the dome-barrel interface with the ring area required.
It is pure Python, stdlib only, deterministic and offline. It pairs
with vehicle-design/structures-integration/fuselage-skin-stringer,
which sizes the barrel skin and stringers that this dome closes, and
with structures/fem/cylindrical-shell-buckling for the stability
check of the same barrel. Standalone spacecraft tank walls sized from
burst pressure are covered by the space-systems tank leaf, not here.
Domain quick reference
Conventions: cabin differential pressure p (Pa), barrel radius a (m),
dome thickness t (m). SI throughout: Pa, m, N/m, N, m^2.
- Barrel membrane cross-check (barrel sizing itself belongs to
vehicle-design): circumferential sigma_theta = pa/t and
longitudinal sigma_long = pa/(2*t).
- Spherical dome radius R: sigma = pR/(2t) everywhere, equal
meridional and circumferential membrane resultants.
- Ellipsoid, semi-axes a (barrel radius) and b (dome depth):
- Apex, both directions equal: sigma = pa^2/(2b*t).
- Equator meridional: sigma_phi = pa/(2t).
- Equator circumferential: sigma_theta = (pa/t)(1 - a^2/(2b^2)).
For b = a the three collapse to pa/(2t), the sphere limit. For
the 2:1 dome (b = a/2) the equator circumferential stress is
(pa/t)(1 - 2) = -pa/t, compressive: the known 2:1 knuckle
compression that drives the knuckle check.
- Dome-cap rise of a spherical cap cutting the barrel at radius a:
h = R - sqrt(R^2 - a^2); h = a for the hemisphere.
- Junction ring: the spherical cap meridional resultant pR/2 acts at
the dome-barrel interface with the radial component (R - h)/R, so
the unbalanced radial line load is q = (pR/2)(R - h)/R [N/m] and
the ring tension is F_ring = qa [N]. The ring area against the
material ultimate at the factor of safety is A_ring =
F_ring*FS/sigma_ultimate. The hemisphere (h = R = a) carries zero
unbalanced ring load and needs no ring.
- Margin: allowable = sigma_ultimate/FS; margin_of_safety =
allowable/sigma_max - 1 and reserve_factor = allowable/sigma_max,
where sigma_max is the largest absolute dome membrane stress.
Workflow
- Fix the load case and geometry: cabin differential pressure p, the
barrel radius a the dome must close, and the dome thickness t.
- Cross-check the barrel membrane level with
cylinder_membrane_stresses, which returns (sigma_hoop,
sigma_longitudinal) = (pa/t, pa/(2*t)); the dome cannot be
lighter than the pressure loads feeding the barrel.
- Choose the dome type. Spherical cap: set the sphere radius R and
read the uniform stress pR/(2t) from spherical_dome_stress.
Hemisphere: R = a by geometry, same function. Ellipsoid: pass the
semi-axes to ellipsoid_dome_stresses for the apex and equator
meridional and circumferential stresses.
- Get the cap geometry with dome_cap_rise(R, a) when the cap cuts
the barrel below its equator; the rise h places the junction and
sets the ring load.
- Size the junction ring with junction_ring_load(p, a, R, h) for the
radial line load and ring tension, then junction_ring_area for the
cross-section area at the chosen ultimate and factor of safety.
- Run bulkhead_summary for the consolidated dict (geometry, all
stresses, sigma_max, allowable, margin_of_safety, reserve_factor,
and the ring q, tension and area) and confirm it against the
individual function results.
- Confirm the deterministic checks with the contract test
scripts/test_pressure_bulkhead.py.
Worked example
Narrowbody barrel: a = 1.88 m, DeltaP = 0.0593 MPa, 7075 dome
t = 2 mm, Ftu = 469 MPa, FS = 1.5. Real module outputs:
- cylinder_membrane_stresses: barrel hoop 55.742 MPa, longitudinal
27.871 MPa (magnitudes 55.7 and 27.9 MPa).
- Spherical cap R = 3.76 m (2*a): 55.742 MPa everywhere;
bulkhead_summary margin_of_safety 4.609 (about 4.61) and
reserve_factor 5.609 against 469/1.5 = 312.7 MPa allowable.
- 2:1 ellipsoid b = 0.94 m: apex +55.742 MPa, equator meridional
+27.871 MPa, equator circumferential -55.742 MPa (compression).
- Hemisphere R = 1.88 m: 27.871 MPa everywhere, junction q = 0,
ring tension 0, ring area 0 exactly.
- Cap rise dome_cap_rise(3.76, 1.88) = 0.503744 m (about 0.504 m).
- Junction ring for the cap: q = 96.548 kN/m (about 96.5 kN/m),
ring tension 181.510 kN (about 181.5 kN), ring area 5.805e-4 m^2
= 580.5 mm^2 (about 581 mm^2) at 1.5 x 469 MPa.
The ellipsoidal dome matches the spherical-cap peak stress at the
apex but trades the junction ring for a compressive knuckle band at
the equator, which is why the margin and the knuckle check, not the
ring, tend to gate the 2:1 design.
Pitfalls
- Reading the 2:1 equator circumferential stress as tension: the
equator hoop of the 2:1 ellipsoid is -p*a/t, compressive (the
knuckle compression drives the knuckle check), and it only turns
negative for b < a/sqrt(2), so the margin must use the largest
ABSOLUTE stress.
- Assuming every dome needs a ring: the hemisphere (h = R = a)
carries zero unbalanced radial line load, ring tension and ring
area exactly; only caps that cut the barrel below their equator
need the junction ring.
- Using the apex stress for the whole ellipsoid: the ellipsoid field
varies from the apex pa^2/(2bt) to the equator meridional
pa/(2t) and circumferential (pa/t)(1 - a^2/(2*b^2)); checking
only the apex misses the knuckle.
- Confusing dome stress with barrel stress: the spherical cap at
R = 2a reproduces the barrel hoop pa/t (55.742 MPa in the worked
example), but the hemisphere runs at pa/(2t) = 27.871 MPa;
cross-checking the dome against the barrel membrane level is part
of the workflow, not a substitute.
- Sizing a spacecraft tank dome here: standalone tank walls sized
from burst pressure belong to the space-systems propellant tank
leaf; this leaf closes a pressurized fuselage barrel under cabin
differential pressure.
- Feeding a cap that cannot close the barrel: a barrel radius larger
than the sphere radius, non-positive pressure, radius, thickness,
ultimate or factor of safety, and unknown dome types all raise
ValueError.
Verification
- Confirm the worked magnitudes: barrel hoop and spherical cap
55.742 MPa (55.7 MPa), ellipsoid apex 55.742 MPa, equator
meridional 27.871 MPa, equator circumferential -55.742 MPa,
hemisphere 27.871 MPa, cap rise 0.503744 m, q 96.548 kN/m, ring
tension 181.510 kN, ring area 580.5 mm^2, margin about 4.61.
- Confirm the identities: barrel hoop is exactly twice the
longitudinal stress; a spherical cap with R = 2a reproduces the
barrel hoop stress exactly; the ellipsoid with b = a returns
pa/(2*t) at the apex and equator in both directions (sphere
limit); the hemisphere junction ring load and tension are exactly
zero; the cap rise obeys h = R - sqrt(R^2 - a^2).
- Confirm the 2:1 equator circumferential stress is negative
(compressive) for b < a/sqrt(2).
- Confirm every non-positive pressure, radius, thickness, ultimate or
factor of safety raises ValueError, as does a barrel radius larger
than the sphere radius and an unknown dome type.
- Confirm dict key contracts: ellipsoid_dome_stresses returns exactly
sigma_apex, sigma_equator_meridional and sigma_equator_hoop;
junction_ring_load returns exactly q_n_per_m and ring_tension_N;
bulkhead_summary returns the documented ten keys.
- Deterministic: no RNG, identical float results run to run.
- Run the contract test offline: python3
scripts/test_pressure_bulkhead.py (32 tests).
Related leaves
- vehicle-design/structures-integration/fuselage-skin-stringer: the
barrel skin and stringer sizing this dome closes.
- structures/fem/cylindrical-shell-buckling: buckling check of the
same barrel wall.
- structures/fem/plate-buckling: flat panel stability, the
alternative stability check for the dome knuckle region when it is
treated as a curved panel.
Behavior contract (gate 3)
Run the deterministic contract test (stdlib unittest, offline):
python3 scripts/test_pressure_bulkhead.py
The 32 tests cover the worked example within the spec magnitude
bounds (55.7 MPa barrel and spherical cap, 27.9 MPa hemisphere, 2:1
apex +55.7 and equator -55.7 MPa compressive, rise 0.504 m, q 96.5
kN/m, ring tension 181.5 kN, ring area 581 mm^2, spherical-cap margin
4.61), the cylinder hoop-to-longitudinal identity, the sphere limit
of the ellipsoid, the hemisphere zero-ring case, the cap-rise
closed-form identity, dict key contracts, ValueError rejection of
non-positive inputs and of barrel radius above sphere radius, the
ellipsoid axes tuple contract, and run-to-run determinism.
Compliance
- Standards referenced, not reproduced: FAR 25.303 (factor of safety
of 1.5 on the limit loads) and CS-25 provide the airworthiness
context; the membrane and junction-ring relations above are
standard engineering methodology, summary-only per
standards-map.yaml. No regulatory text is reproduced.
- compliance: STANDARDS-REF, gated: false.
1---2name: pressure-bulkhead3description: Use when you must size a fuselage pressure-bulkhead dome: compute the membrane stresses of a spherical cap, a hemisphere, or a 2:1 ellipsoid closing a pressurized cylindrical barrel with membrane theory, including the apex and equator meridional and circumferential stresses of an ellipsoidal dome, the dome margin against ultimate strength under the FAR 25.303 1.5 factor of safety, the spherical-cap rise, and the unbalanced meridional-resultant junction ring load at the dome-barrel interface with the ring area required. Produces the dome stresses, the margin, and the junction ring area that gate the bulkhead design. Trigger: pressure bulkhead, ellipsoidal bulkhead, spherical cap dome, dome margin, junction ring, dome to barrel ring, pressurized fuselage dome, 2:1 ellipsoid.4license: Apache-2.05---67# Pressure Bulkhead Dome (structures/fem/pressure-bulkhead)89Use when the task is the membrane-theory sizing of the fuselage10pressure-bulkhead dome that closes a pressurized cylindrical barrel.11This leaf implements the closed-form dome stress field for the three12standard bulkhead geometries, a spherical cap, a hemisphere, and a132:1 ellipsoid, the apex and equator meridional and circumferential14membrane stresses of an ellipsoidal dome (including the known 2:115knuckle compression), the dome margin against ultimate under the FAR1625.303 factor of safety of 1.5, the spherical-cap rise where the cap17cuts the barrel, and the unbalanced meridional-resultant junction18ring load at the dome-barrel interface with the ring area required.19It is pure Python, stdlib only, deterministic and offline. It pairs20with vehicle-design/structures-integration/fuselage-skin-stringer,21which sizes the barrel skin and stringers that this dome closes, and22with structures/fem/cylindrical-shell-buckling for the stability23check of the same barrel. Standalone spacecraft tank walls sized from24burst pressure are covered by the space-systems tank leaf, not here.2526## Domain quick reference2728Conventions: cabin differential pressure p (Pa), barrel radius a (m),29dome thickness t (m). SI throughout: Pa, m, N/m, N, m^2.3031- Barrel membrane cross-check (barrel sizing itself belongs to32 vehicle-design): circumferential sigma_theta = p*a/t and33 longitudinal sigma_long = p*a/(2*t).34- Spherical dome radius R: sigma = p*R/(2*t) everywhere, equal35 meridional and circumferential membrane resultants.36- Ellipsoid, semi-axes a (barrel radius) and b (dome depth):37 - Apex, both directions equal: sigma = p*a^2/(2*b*t).38 - Equator meridional: sigma_phi = p*a/(2*t).39 - Equator circumferential: sigma_theta = (p*a/t)*(1 - a^2/(2*b^2)).40 For b = a the three collapse to p*a/(2*t), the sphere limit. For41 the 2:1 dome (b = a/2) the equator circumferential stress is42 (p*a/t)*(1 - 2) = -p*a/t, compressive: the known 2:1 knuckle43 compression that drives the knuckle check.44- Dome-cap rise of a spherical cap cutting the barrel at radius a:45 h = R - sqrt(R^2 - a^2); h = a for the hemisphere.46- Junction ring: the spherical cap meridional resultant p*R/2 acts at47 the dome-barrel interface with the radial component (R - h)/R, so48 the unbalanced radial line load is q = (p*R/2)*(R - h)/R [N/m] and49 the ring tension is F_ring = q*a [N]. The ring area against the50 material ultimate at the factor of safety is A_ring =51 F_ring*FS/sigma_ultimate. The hemisphere (h = R = a) carries zero52 unbalanced ring load and needs no ring.53- Margin: allowable = sigma_ultimate/FS; margin_of_safety =54 allowable/sigma_max - 1 and reserve_factor = allowable/sigma_max,55 where sigma_max is the largest absolute dome membrane stress.5657## Workflow58591. Fix the load case and geometry: cabin differential pressure p, the60 barrel radius a the dome must close, and the dome thickness t.612. Cross-check the barrel membrane level with62 cylinder_membrane_stresses, which returns (sigma_hoop,63 sigma_longitudinal) = (p*a/t, p*a/(2*t)); the dome cannot be64 lighter than the pressure loads feeding the barrel.653. Choose the dome type. Spherical cap: set the sphere radius R and66 read the uniform stress p*R/(2*t) from spherical_dome_stress.67 Hemisphere: R = a by geometry, same function. Ellipsoid: pass the68 semi-axes to ellipsoid_dome_stresses for the apex and equator69 meridional and circumferential stresses.704. Get the cap geometry with dome_cap_rise(R, a) when the cap cuts71 the barrel below its equator; the rise h places the junction and72 sets the ring load.735. Size the junction ring with junction_ring_load(p, a, R, h) for the74 radial line load and ring tension, then junction_ring_area for the75 cross-section area at the chosen ultimate and factor of safety.766. Run bulkhead_summary for the consolidated dict (geometry, all77 stresses, sigma_max, allowable, margin_of_safety, reserve_factor,78 and the ring q, tension and area) and confirm it against the79 individual function results.807. Confirm the deterministic checks with the contract test81 scripts/test_pressure_bulkhead.py.8283## Worked example8485Narrowbody barrel: a = 1.88 m, DeltaP = 0.0593 MPa, 7075 dome86t = 2 mm, Ftu = 469 MPa, FS = 1.5. Real module outputs:8788- cylinder_membrane_stresses: barrel hoop 55.742 MPa, longitudinal89 27.871 MPa (magnitudes 55.7 and 27.9 MPa).90- Spherical cap R = 3.76 m (2*a): 55.742 MPa everywhere;91 bulkhead_summary margin_of_safety 4.609 (about 4.61) and92 reserve_factor 5.609 against 469/1.5 = 312.7 MPa allowable.93- 2:1 ellipsoid b = 0.94 m: apex +55.742 MPa, equator meridional94 +27.871 MPa, equator circumferential -55.742 MPa (compression).95- Hemisphere R = 1.88 m: 27.871 MPa everywhere, junction q = 0,96 ring tension 0, ring area 0 exactly.97- Cap rise dome_cap_rise(3.76, 1.88) = 0.503744 m (about 0.504 m).98- Junction ring for the cap: q = 96.548 kN/m (about 96.5 kN/m),99 ring tension 181.510 kN (about 181.5 kN), ring area 5.805e-4 m^2100 = 580.5 mm^2 (about 581 mm^2) at 1.5 x 469 MPa.101102The ellipsoidal dome matches the spherical-cap peak stress at the103apex but trades the junction ring for a compressive knuckle band at104the equator, which is why the margin and the knuckle check, not the105ring, tend to gate the 2:1 design.106107108## Pitfalls109110- Reading the 2:1 equator circumferential stress as tension: the111 equator hoop of the 2:1 ellipsoid is -p*a/t, compressive (the112 knuckle compression drives the knuckle check), and it only turns113 negative for b < a/sqrt(2), so the margin must use the largest114 ABSOLUTE stress.115- Assuming every dome needs a ring: the hemisphere (h = R = a)116 carries zero unbalanced radial line load, ring tension and ring117 area exactly; only caps that cut the barrel below their equator118 need the junction ring.119- Using the apex stress for the whole ellipsoid: the ellipsoid field120 varies from the apex p*a^2/(2*b*t) to the equator meridional121 p*a/(2*t) and circumferential (p*a/t)(1 - a^2/(2*b^2)); checking122 only the apex misses the knuckle.123- Confusing dome stress with barrel stress: the spherical cap at124 R = 2*a reproduces the barrel hoop p*a/t (55.742 MPa in the worked125 example), but the hemisphere runs at p*a/(2*t) = 27.871 MPa;126 cross-checking the dome against the barrel membrane level is part127 of the workflow, not a substitute.128- Sizing a spacecraft tank dome here: standalone tank walls sized129 from burst pressure belong to the space-systems propellant tank130 leaf; this leaf closes a pressurized fuselage barrel under cabin131 differential pressure.132- Feeding a cap that cannot close the barrel: a barrel radius larger133 than the sphere radius, non-positive pressure, radius, thickness,134 ultimate or factor of safety, and unknown dome types all raise135 ValueError.136## Verification137138- Confirm the worked magnitudes: barrel hoop and spherical cap139 55.742 MPa (55.7 MPa), ellipsoid apex 55.742 MPa, equator140 meridional 27.871 MPa, equator circumferential -55.742 MPa,141 hemisphere 27.871 MPa, cap rise 0.503744 m, q 96.548 kN/m, ring142 tension 181.510 kN, ring area 580.5 mm^2, margin about 4.61.143- Confirm the identities: barrel hoop is exactly twice the144 longitudinal stress; a spherical cap with R = 2*a reproduces the145 barrel hoop stress exactly; the ellipsoid with b = a returns146 p*a/(2*t) at the apex and equator in both directions (sphere147 limit); the hemisphere junction ring load and tension are exactly148 zero; the cap rise obeys h = R - sqrt(R^2 - a^2).149- Confirm the 2:1 equator circumferential stress is negative150 (compressive) for b < a/sqrt(2).151- Confirm every non-positive pressure, radius, thickness, ultimate or152 factor of safety raises ValueError, as does a barrel radius larger153 than the sphere radius and an unknown dome type.154- Confirm dict key contracts: ellipsoid_dome_stresses returns exactly155 sigma_apex, sigma_equator_meridional and sigma_equator_hoop;156 junction_ring_load returns exactly q_n_per_m and ring_tension_N;157 bulkhead_summary returns the documented ten keys.158- Deterministic: no RNG, identical float results run to run.159- Run the contract test offline: python3160 scripts/test_pressure_bulkhead.py (32 tests).161162## Related leaves163164- vehicle-design/structures-integration/fuselage-skin-stringer: the165 barrel skin and stringer sizing this dome closes.166- structures/fem/cylindrical-shell-buckling: buckling check of the167 same barrel wall.168- structures/fem/plate-buckling: flat panel stability, the169 alternative stability check for the dome knuckle region when it is170 treated as a curved panel.171172## Behavior contract (gate 3)173174Run the deterministic contract test (stdlib unittest, offline):175176 python3 scripts/test_pressure_bulkhead.py177178The 32 tests cover the worked example within the spec magnitude179bounds (55.7 MPa barrel and spherical cap, 27.9 MPa hemisphere, 2:1180apex +55.7 and equator -55.7 MPa compressive, rise 0.504 m, q 96.5181kN/m, ring tension 181.5 kN, ring area 581 mm^2, spherical-cap margin1824.61), the cylinder hoop-to-longitudinal identity, the sphere limit183of the ellipsoid, the hemisphere zero-ring case, the cap-rise184closed-form identity, dict key contracts, ValueError rejection of185non-positive inputs and of barrel radius above sphere radius, the186ellipsoid axes tuple contract, and run-to-run determinism.187188## Compliance189190- Standards referenced, not reproduced: FAR 25.303 (factor of safety191 of 1.5 on the limit loads) and CS-25 provide the airworthiness192 context; the membrane and junction-ring relations above are193 standard engineering methodology, summary-only per194 standards-map.yaml. No regulatory text is reproduced.195- compliance: STANDARDS-REF, gated: false.