Lug Joint Analysis (structures/fem/lug-joint-analysis)
Use when you must analyze a metallic pin-loaded lug fitting under an
axial pin load: the bearing stress on the hole, the net section
tension stress across the lug width, the tearout shear stress on the
two planes tangent to the hole running to the outer contour, the
margin of each mode against the material allowables, the governing
failure mode (lowest margin), and the governing-mode capacity map over
the edge distance ratio e/D (short-lug net tension, intermediate
tearout, long-lug bearing). This leaf implements the round-end lug
convention w = 2e in pure stdlib Python, SI units, offline and
deterministic. It pairs with the single-row bolted joint analysis for
fiber-reinforced panels (no lug proportioning there) and with the
finite element contact boundary analysis for pin-to-hole contact
detail. It does not size pin-jointed frames: beam-frame-analysis and
truss-analysis own those structures.
Domain quick reference
- Round-end lug: hole of diameter D centered in a round head of radius
e, so the lug width is w = 2e; thickness t carries axial pin load P.
Edge distance e must exceed D/2 and width w must exceed D.
- Bearing stress on the hole: sigma_b = P / (D t).
- Net section tension across the remaining width: sigma_nt = P /
((w - D) t), net section width (w - D).
- Tearout shear on the two planes from the hole tangent to the outer
contour: sigma_te = P / (2 t L_te), with each shear plane length
L_te = sqrt(e^2 - (D/2)^2).
- Margin per mode: m = allowable / applied - 1, using the bearing
ultimate F_bru for bearing, the tension ultimate F_tu for net
section tension and the shear ultimate F_su for tearout.
- Governing mode: smallest margin; the lug passes when min margin >= 0.
- Per-mode allowable load (load that makes that mode margin zero):
bearing F_bru D t, net section tension F_tu (w - D) t, tearout
F_su 2 t L_te; the limiting mode has the smallest capacity.
- Allowables are material inputs, for example MMPDS chapter 9 lug
ultimate data for the lug alloy (referenced by name, never
reproduced). FAR 25.307 frames proof-of-structure fitting
substantiation context.
- Governing behavior over e/D for typical aluminum allowables:
net section tension below about 1.03, tearout between about 1.03 and
1.74, bearing above about 1.74.
- Units SI throughout: N, m, Pa.
Workflow
- Fix the lug geometry: hole_diameter_m, thickness_m, lug_width_m,
edge_distance_m, and the axial pin load load_n, then get the applied
mode stresses with lug_stresses (returns bearing_pa,
net_tension_pa, tearout_pa, tearout_plane_length_m,
net_section_width_m).
- Choose the material allowables f_tu_pa, f_su_pa, f_bru_pa from the
lug alloy data, and form the per-mode margins with lug_margins.
- Run the full margin check with lug_analysis: applied stresses,
margins, governing_mode, min_margin, passes, plus e_over_d,
d_over_t and the tearout plane geometry.
- For a margin-of-safety style capacity statement, run
lug_allowable_capacity at the round-end geometry (w = 2e is assumed
inside) to get the per-mode allowable loads, the limiting mode and
the limiting capacity.
- For the short-lug / intermediate / long-lug map, run
lug_governing_map with the material allowables at fixed D and t; it
sweeps e/D from 0.6 to 2.5 with e = ratio * D and w = 2e and
returns the governing mode and limiting capacity per sample.
- Confirm the deterministic checks with the contract test
scripts/test_lug_joint_analysis.py.
Worked example
7075-T6 lug: D = 20 mm, t = 12 mm, e = 24 mm (e/D = 1.2), w = 48 mm,
F_tu = 572 MPa, F_su = 331 MPa, F_bru = 1050 MPa, P = 90 kN. Real
module outputs:
- Stresses: bearing 375.0 MPa, net section tension 267.857 MPa,
tearout 171.881 MPa with L_te = 21.817 mm and net section width
28 mm.
- Margins: bearing +1.800, net section tension +1.135, tearout
+0.926.
- Governing mode tearout, min margin +0.926, passes True.
- Same lug at P = 200 kN: tearout stress 381.958 MPa, margin -0.133,
governing stays tearout, passes False.
- Allowable capacities: bearing 252000 N, net section tension
192192 N, tearout 173318 N; limiting mode tearout at 173318 N.
- Governing map (D = 20 mm, t = 12 mm, 7075 allowables): net section
tension governs below e/D about 1.03, tearout governs the middle
band (for example 168060 N at e/D = 1.17), bearing governs above
e/D about 1.74 at the constant 252000 N. All three modes govern
across the sweep.
Pitfalls
- Analyzing a non-round-end lug with the round-end convention: the
governing map and lug_allowable_capacity assume w = 2e; a lug with
width other than twice the edge distance needs the explicit
geometry inputs, not the round-end shortcuts.
- Missing a degenerate edge relation: the hole edge distance must
exceed D/2 and the width must exceed D (tearout planes need room
to run); degenerate e/D or w/D relations raise ValueError.
- Reading the margin of the wrong mode: the governing mode is the
LOWEST margin, not the largest stress - in the worked 90 kN case
tearout governs (+0.926) even though bearing stress (375 MPa)
exceeds tearout stress (171.9 MPa), because each margin uses its
own allowable.
- Quoting capacity from a single mode: the lug's limiting capacity
is the smallest per-mode allowable load (tearout 173318 N in the
worked example); the governing mode changes with e/D, so a
fixed-mode capacity statement only holds at one geometry.
- Sizing lug fittings with a frame solver: pin-loaded lug
proportioning with bearing, net tension and tearout is this leaf;
beam-frame-analysis and truss-analysis size pin-jointed frames and
do not cover lug fittings.
- Forgetting the applied-load direction: the stresses and margins
here assume an AXIAL pin load on the lug; oblique pin loading
changes the net-section and tearout paths.
Verification
- Confirm lug_analysis(90000, 0.020, 0.012, 0.048, 0.024, 572e6,
331e6, 1050e6) returns bearing margin 1.8, net section tension
margin 1.135, tearout margin 0.926, governing tearout and passes
True.
- Confirm the same lug at 200000 N gives tearout margin -0.133 and
passes False with tearout still governing.
- Geometry identity: at e/D = 1 the tearout plane length is
sqrt(3)/2 * D = 0.8660254 D and the net section width is 2e - D.
- Capacity identity: lug_allowable_capacity per-mode loads equal the
applied load that drives that margin to zero (checked for all three
modes in the contract test), and the limiting mode matches the
governing mode of lug_analysis at the same geometry.
- Governing map: all three modes appear as governing over [0.6, 2.5],
capacity is monotonically non-decreasing in e/D and the bearing
capacity is constant in e/D.
- Rejection: negative load, non-positive dimensions, edge distance
not above D/2, width not above D and non-positive allowables all
raise ValueError in every entry point that uses them.
- Determinism: pure stdlib, no random numbers, identical floats
run-to-run.
Related leaves
- structures/composites/composite-bolted-joints: the single-row
bolted joint sibling for fiber-reinforced panels; this leaf is the
metallic lug with e/D proportioning, head geometry and tearout
planes from the hole contour, with no load-sharing split concept.
- structures/fem/contact-analysis: the finite element contact
boundary sibling for pin-to-hole bearing detail.
- structures/fem/beam-frame-analysis and structures/fem/truss-analysis:
pin-jointed frame analysis siblings; they do not size lug fittings.
Behavior contract (gate 3)
Run the deterministic contract test (stdlib unittest, offline):
python3 scripts/test_lug_joint_analysis.py
The test covers the 7075-T6 worked lug anchors (stresses, margins,
governing tearout, pass/fail at 90 kN and 200 kN), the e/D = 1
geometry identity, per-mode allowable capacity and margin-zero
identities, the three-mode governing sweep with monotone capacity, the
convenience dict keys, and ValueError rejection of negative loads,
non-positive dimensions, degenerate e/D and w/D relations and
non-positive allowables.
Compliance
- Standards referenced by name only, not reproduced: MMPDS chapter 9
lug ultimate data heritage (mmpsd) and FAR 25.307 proof-of-structure
context for fitting substantiation; the stress and margin relations
above are standard engineering methodology, summary-only per
standards-map.yaml.
- compliance: STANDARDS-REF, gated: false.
1---2name: lug-joint-analysis3description: Use when you must analyze a metallic pin-loaded lug fitting under an axial load: compute the hole bearing stress, the net section tension stress across the lug width, the tearout shear stress on the two planes from the hole tangent to the round outer contour, the per-mode margins against the material tension, shear and bearing allowables, the governing failure mode and the pass/fail verdict, the limiting allowable capacity, and the governing-mode map over the edge distance ratio for a round-end lug with w = 2e. Produces the applied stresses, per-mode margins, governing mode and margin, pass/fail, capacity, and the short-lug tension, intermediate tearout and long-lug bearing e/D sweep. Trigger: lug joint analysis, pin-loaded lug, lug bearing stress, lug tearout shear, lug net section tension, lug edge distance ratio, round-end lug.4license: Apache-2.05---67# Lug Joint Analysis (structures/fem/lug-joint-analysis)89Use when you must analyze a metallic pin-loaded lug fitting under an10axial pin load: the bearing stress on the hole, the net section11tension stress across the lug width, the tearout shear stress on the12two planes tangent to the hole running to the outer contour, the13margin of each mode against the material allowables, the governing14failure mode (lowest margin), and the governing-mode capacity map over15the edge distance ratio e/D (short-lug net tension, intermediate16tearout, long-lug bearing). This leaf implements the round-end lug17convention w = 2e in pure stdlib Python, SI units, offline and18deterministic. It pairs with the single-row bolted joint analysis for19fiber-reinforced panels (no lug proportioning there) and with the20finite element contact boundary analysis for pin-to-hole contact21detail. It does not size pin-jointed frames: beam-frame-analysis and22truss-analysis own those structures.2324## Domain quick reference2526- Round-end lug: hole of diameter D centered in a round head of radius27 e, so the lug width is w = 2e; thickness t carries axial pin load P.28 Edge distance e must exceed D/2 and width w must exceed D.29- Bearing stress on the hole: sigma_b = P / (D t).30- Net section tension across the remaining width: sigma_nt = P /31 ((w - D) t), net section width (w - D).32- Tearout shear on the two planes from the hole tangent to the outer33 contour: sigma_te = P / (2 t L_te), with each shear plane length34 L_te = sqrt(e^2 - (D/2)^2).35- Margin per mode: m = allowable / applied - 1, using the bearing36 ultimate F_bru for bearing, the tension ultimate F_tu for net37 section tension and the shear ultimate F_su for tearout.38- Governing mode: smallest margin; the lug passes when min margin >= 0.39- Per-mode allowable load (load that makes that mode margin zero):40 bearing F_bru D t, net section tension F_tu (w - D) t, tearout41 F_su 2 t L_te; the limiting mode has the smallest capacity.42- Allowables are material inputs, for example MMPDS chapter 9 lug43 ultimate data for the lug alloy (referenced by name, never44 reproduced). FAR 25.307 frames proof-of-structure fitting45 substantiation context.46- Governing behavior over e/D for typical aluminum allowables:47 net section tension below about 1.03, tearout between about 1.03 and48 1.74, bearing above about 1.74.49- Units SI throughout: N, m, Pa.5051## Workflow52531. Fix the lug geometry: hole_diameter_m, thickness_m, lug_width_m,54 edge_distance_m, and the axial pin load load_n, then get the applied55 mode stresses with lug_stresses (returns bearing_pa,56 net_tension_pa, tearout_pa, tearout_plane_length_m,57 net_section_width_m).582. Choose the material allowables f_tu_pa, f_su_pa, f_bru_pa from the59 lug alloy data, and form the per-mode margins with lug_margins.603. Run the full margin check with lug_analysis: applied stresses,61 margins, governing_mode, min_margin, passes, plus e_over_d,62 d_over_t and the tearout plane geometry.634. For a margin-of-safety style capacity statement, run64 lug_allowable_capacity at the round-end geometry (w = 2e is assumed65 inside) to get the per-mode allowable loads, the limiting mode and66 the limiting capacity.675. For the short-lug / intermediate / long-lug map, run68 lug_governing_map with the material allowables at fixed D and t; it69 sweeps e/D from 0.6 to 2.5 with e = ratio * D and w = 2e and70 returns the governing mode and limiting capacity per sample.716. Confirm the deterministic checks with the contract test72 scripts/test_lug_joint_analysis.py.7374## Worked example75767075-T6 lug: D = 20 mm, t = 12 mm, e = 24 mm (e/D = 1.2), w = 48 mm,77F_tu = 572 MPa, F_su = 331 MPa, F_bru = 1050 MPa, P = 90 kN. Real78module outputs:7980- Stresses: bearing 375.0 MPa, net section tension 267.857 MPa,81 tearout 171.881 MPa with L_te = 21.817 mm and net section width82 28 mm.83- Margins: bearing +1.800, net section tension +1.135, tearout84 +0.926.85- Governing mode tearout, min margin +0.926, passes True.86- Same lug at P = 200 kN: tearout stress 381.958 MPa, margin -0.133,87 governing stays tearout, passes False.88- Allowable capacities: bearing 252000 N, net section tension89 192192 N, tearout 173318 N; limiting mode tearout at 173318 N.90- Governing map (D = 20 mm, t = 12 mm, 7075 allowables): net section91 tension governs below e/D about 1.03, tearout governs the middle92 band (for example 168060 N at e/D = 1.17), bearing governs above93 e/D about 1.74 at the constant 252000 N. All three modes govern94 across the sweep.959697## Pitfalls9899- Analyzing a non-round-end lug with the round-end convention: the100 governing map and lug_allowable_capacity assume w = 2e; a lug with101 width other than twice the edge distance needs the explicit102 geometry inputs, not the round-end shortcuts.103- Missing a degenerate edge relation: the hole edge distance must104 exceed D/2 and the width must exceed D (tearout planes need room105 to run); degenerate e/D or w/D relations raise ValueError.106- Reading the margin of the wrong mode: the governing mode is the107 LOWEST margin, not the largest stress - in the worked 90 kN case108 tearout governs (+0.926) even though bearing stress (375 MPa)109 exceeds tearout stress (171.9 MPa), because each margin uses its110 own allowable.111- Quoting capacity from a single mode: the lug's limiting capacity112 is the smallest per-mode allowable load (tearout 173318 N in the113 worked example); the governing mode changes with e/D, so a114 fixed-mode capacity statement only holds at one geometry.115- Sizing lug fittings with a frame solver: pin-loaded lug116 proportioning with bearing, net tension and tearout is this leaf;117 beam-frame-analysis and truss-analysis size pin-jointed frames and118 do not cover lug fittings.119- Forgetting the applied-load direction: the stresses and margins120 here assume an AXIAL pin load on the lug; oblique pin loading121 changes the net-section and tearout paths.122## Verification123124- Confirm lug_analysis(90000, 0.020, 0.012, 0.048, 0.024, 572e6,125 331e6, 1050e6) returns bearing margin 1.8, net section tension126 margin 1.135, tearout margin 0.926, governing tearout and passes127 True.128- Confirm the same lug at 200000 N gives tearout margin -0.133 and129 passes False with tearout still governing.130- Geometry identity: at e/D = 1 the tearout plane length is131 sqrt(3)/2 * D = 0.8660254 D and the net section width is 2e - D.132- Capacity identity: lug_allowable_capacity per-mode loads equal the133 applied load that drives that margin to zero (checked for all three134 modes in the contract test), and the limiting mode matches the135 governing mode of lug_analysis at the same geometry.136- Governing map: all three modes appear as governing over [0.6, 2.5],137 capacity is monotonically non-decreasing in e/D and the bearing138 capacity is constant in e/D.139- Rejection: negative load, non-positive dimensions, edge distance140 not above D/2, width not above D and non-positive allowables all141 raise ValueError in every entry point that uses them.142- Determinism: pure stdlib, no random numbers, identical floats143 run-to-run.144145## Related leaves146147- structures/composites/composite-bolted-joints: the single-row148 bolted joint sibling for fiber-reinforced panels; this leaf is the149 metallic lug with e/D proportioning, head geometry and tearout150 planes from the hole contour, with no load-sharing split concept.151- structures/fem/contact-analysis: the finite element contact152 boundary sibling for pin-to-hole bearing detail.153- structures/fem/beam-frame-analysis and structures/fem/truss-analysis:154 pin-jointed frame analysis siblings; they do not size lug fittings.155156## Behavior contract (gate 3)157158Run the deterministic contract test (stdlib unittest, offline):159160 python3 scripts/test_lug_joint_analysis.py161162The test covers the 7075-T6 worked lug anchors (stresses, margins,163governing tearout, pass/fail at 90 kN and 200 kN), the e/D = 1164geometry identity, per-mode allowable capacity and margin-zero165identities, the three-mode governing sweep with monotone capacity, the166convenience dict keys, and ValueError rejection of negative loads,167non-positive dimensions, degenerate e/D and w/D relations and168non-positive allowables.169170## Compliance171172- Standards referenced by name only, not reproduced: MMPDS chapter 9173 lug ultimate data heritage (mmpsd) and FAR 25.307 proof-of-structure174 context for fitting substantiation; the stress and margin relations175 above are standard engineering methodology, summary-only per176 standards-map.yaml.177- compliance: STANDARDS-REF, gated: false.