Curved Beam Analysis (structures/fem/curved-beam-analysis)
Use when the task is the stress check of a curved member: a frame
segment, torque link arc or clevis arc whose section bends about the
center of curvature. Where the straight Euler-Bernoulli beam law puts
the extreme fiber stress at M c / I with a linear gradient, a curved
member shifts its neutral axis inward of the centroid and stresses its
fibers hyperbolically, so the inner fiber runs hotter than any
straight-beam reading of the same section. This leaf applies the
Winkler curved-beam correction: it computes the neutral-axis radius of
the radial section from the exact closed form A / integral(dA / rho),
the neutral-axis-eccentricity e = r_c - r_n, the inner and outer fiber
stresses sigma = M (r_n - r_fiber) / (A e r_fiber), the combined
axial-plus-bending stresses, and the curved-beam amplification over
the straight-beam value, then rates the gating fiber stress against
the allowable. It pairs with the straight-member FEM leaves, and it
owns the frame-corner, torque-link and clevis-arc stress check that no
straight-beam or lug leaf covers.
Domain quick reference
- Neutral-axis radius of a curved bar with a rectangular radial
section spanning inner radius r_i to outer radius r_o:
r_n = (r_o - r_i) / ln(r_o / r_i), the exact closed form of
A / integral(dA / rho); the width out of plane cancels. The neutral
axis always sits strictly between r_i and the centroidal radius
r_c = (r_i + r_o) / 2.
- Neutral-axis radius of a circular solid or tube section whose
material annulus (inner radius a_i, outer radius a_o) is centered at
distance r_c from the center of curvature:
r_n = (sqrt(r_c^2 - a_i^2) + sqrt(r_c^2 - a_o^2)) / 2, from the disk
integrals integral(dA / rho) = 2 pi (r_c - sqrt(r_c^2 - a^2));
a_i = 0.0 reduces the tube to the solid round section,
r_n = (r_c + sqrt(r_c^2 - a_o^2)) / 2. Geometry requires a_o < r_c.
- Neutral-axis eccentricity: e = r_c - r_n, the inward shift of the
neutral axis toward the center of curvature, positive for every
physical curved beam.
- Winkler curved-beam bending stress at fiber radius r_fiber:
sigma = M (r_n - r_fiber) / (A e r_fiber), hyperbolic across the
depth. Sign convention: a positive moment opens the arc, tending to
straighten the member, so the inner fiber (r_fiber < r_n) is in
tension, sigma > 0, and the outer fiber is in compression,
sigma < 0; a negative moment reverses both signs.
- Straight Euler-Bernoulli baseline of the same rectangular section:
sigma_straight = 6 M / (A h), from M c / I with c = h / 2 and
I = A h^2 / 12. The curved-beam amplification is the ratio of the
Winkler inner-fiber stress to this value and grows with the
depth-to-radius ratio h / r_c.
- Combined fiber stress with axial load: sigma + P / A, tension
positive.
- Stress verdict: ratio = |sigma| / allowable, pass when ratio <= 1.0,
margin = allowable - |sigma|.
- FAR-25 (25.301-25.307) sets the certification context for structure
loads and strength; the allowable used here comes from the design
allowables of the material, not from reproduced standard text.
Workflow
- Gather the curved-member data at the checked section: the inner and
outer radii of the rectangular radial section (r_i, r_o), or the
section center radius r_c with the material annulus radii (a_i, a_o)
for a solid-round or circular-tube section, the section depth h and
area A, the centroidal radius r_c = (r_i + r_o) / 2, the applied
bending moment M (positive opens the arc), the axial load P when
present, and the material allowable.
- Compute the neutral-axis radius of the section: call
neutral_axis_radius_rect(r_i, r_o) for the rectangular radial
section, or neutral_axis_radius_circular_tube(r_c, a_i, a_o) for a
circular section (pass a_i = 0.0 for the solid round). The closed
forms are A / integral(dA / rho); the result is independent of the
out-of-plane width of a rectangle and lies strictly between r_i and
r_c.
- Take the neutral-axis eccentricity with
eccentricity(r_centroid, r_n): e = r_c - r_n, the inward shift of
the neutral axis toward the center of curvature, positive for every
physical curved member.
- Resolve the Winkler fiber stresses with
curved_beam_stress(moment, area, e, r_n, r_fiber) at the inner
fiber r_i and the outer fiber r_o of the section, and form the
straight Euler-Bernoulli baseline of the same section with
straight_beam_stress_rect(moment, area, depth) to expose the
curved-beam amplification, the inner-fiber stress divided by the
straight reading.
- Add the axial contribution when the member carries axial load with
combined_axial_stress(bending_stress, axial_force, area),
tension positive, at each fiber.
- Rate the gating inner-fiber combined stress against the allowable
with stress_verdict(sigma, allowable) and read the ratio, verdict
and margin from the returned dict.
Worked example
Torque-link / frame-corner style curved member, 7075-T6-like aluminum
alloy with the design allowable tension set at 500 MPa for the check.
Rectangular radial section: r_i = 60 mm, r_o = 100 mm, depth
h = 40 mm, width b = 40 mm, area A = 1600 mm^2, centroidal radius
r_c = 80 mm, axial tension P = 25 kN. Real module outputs:
- neutral_axis_radius_rect(60.0, 100.0) = 78.30461 mm: the neutral
axis sits inward of the centroid by
eccentricity(80.0, 78.30461) = 1.69539 mm, about 4.2 percent of the
depth toward the center of curvature. The closed form agrees with a
400000-bin quadrature of A / integral(dA / rho) to relative
difference 1.45e-13.
- Circular sections: neutral_axis_radius_circular_tube(80.0, 10.0,
20.0) = 78.41610 mm (e = 1.58390 mm), and the solid round
neutral_axis_radius_circular_tube(80.0, 0.0, 20.0) = 78.72983 mm
(e = 1.27017 mm).
- Load case 1, M = 1.2e6 N mm (moderate in-service moment):
inner fiber curved_beam_stress = 134.95848 MPa tension, outer fiber
= -95.97509 MPa compression. The straight Euler-Bernoulli baseline
of the same section is straight_beam_stress_rect = 112.5 MPa: the
curved-beam correction amplifies the inner fiber by 1.19963 and runs
the outer fiber at 0.85311 of the straight reading, the classic
Winkler signature. Adding the axial tension P / A = 15.625 MPa:
combined inner = 150.58348 MPa, combined outer = -80.35009 MPa.
Against the 500 MPa allowable: ratio 0.30117, verdict pass, margin
349.41652 MPa.
- Load case 2, limit moment M = 4.0e6 N mm with the same axial load:
inner fiber = 449.86161 MPa, combined inner = 465.48661 MPa, ratio
0.93097, verdict pass, margin 34.51339 MPa.
- Load case 3, ultimate moment M = 4.5e6 N mm: inner fiber =
506.09432 MPa, combined inner = 521.71932 MPa, ratio 1.04344,
verdict fail, margin -21.71932 MPa. Read as straight
(6 M / (A h) = 421.875 MPa combined) the same member would still
pass, which is the point of the correction: the curved-beam
inner-fiber stress is the gating number at a frame corner or torque
link arc.
Pitfalls
- Reading a curved member with the straight law: the straight
Euler-Bernoulli baseline of the worked example passes load case 3
while the Winkler inner-fiber stress fails it; always rate the
curved inner fiber, never 6 M / (A h), for a frame segment or arc.
- Signing the moment backwards: a positive moment opens the arc, so
the inner fiber goes into tension and the outer fiber into
compression; a negative moment reverses both. Flipping the sign
convention swaps which fiber the verdict gates on.
- Taking the neutral axis at the centroid: e is the whole point of the
correction; setting r_n = r_c would divide by zero in the Winkler
stress and erase the hyperbolic gradient.
- Using the tube closed form on an invalid section: the annulus outer
radius must stay below r_c (the section must clear the center of
curvature) and a_i must be 0 or positive, or the function raises
ValueError; feeding a_o >= r_c silently corrupts the square root
instead if you bypass the guard.
- Trusting a raw 2-D grid quadrature of A / integral(dA / rho) for a
circular section: an independent cell-centered grid over the section
annulus reproduces the circular closed forms only to about one
percent (grid and measure sensitive; the prep quadrature note of
1e-6 class was not independently reproducible in Euclidean section
measure). Use the closed forms, which are the engineering standard
for circular-section curved beams and match the spec anchors to
1e-5. The rectangular closed form, by contrast, is exact to the
1e-13 class against quadrature.
- Mixing units: radii, area and moment must share one consistent
system. In the worked example mm and MPa are used with moment in
N mm and area in mm^2, so N mm / mm^3 = N / mm^2 = MPa; mixing N m
with mm^2 sections silently scales every stress by 1000.
Verification
- The contract test asserts the real module outputs above inside the
spec tolerances: geometry anchors to 1e-5, fiber stresses to 1e-4,
ratios and margins to 1e-3, and the straight baseline 112.5 MPa
exactly.
- Identities verified: the rectangular closed form equals a
400000-bin quadrature of A / integral(dA / rho) to 1.45e-13 (better
than the 1e-9 class), the neutral-axis radius is independent of the
out-of-plane width, r_n lies strictly between r_i and r_c, the
eccentricity is positive for physical sections, the inner-fiber
magnitude exceeds the outer-fiber magnitude for the same moment, the
curved-beam amplification grows with the depth-to-radius ratio
(1.04333, 1.09046, 1.14220, 1.19963 for h = 10, 20, 30, 40 mm at
r_c = 80 mm), a_i = 0.0 in the tube function reproduces the
solid-section closed form, a negative moment flips both fiber signs
exactly, zero moment gives zero stress, and the verdict flips from
pass to fail exactly at ratio 1.0.
- ValueError rejection: non-physical inputs raise ValueError in every
function (non-positive radii, r_o <= r_i, negative or equal annulus
radii, a_o >= r_c, non-positive area, eccentricity, neutral-axis
radius, fiber radius, depth or allowable).
- Determinism: no random numbers anywhere; identical floats run to
run. Run the contract test offline: python3
scripts/test_curved_beam_analysis.py (35 tests, deterministic, well
under one second).
Related leaves
- skills/structures/fem/beam-frame-analysis: the straight-member FEM
sibling; its Euler-Bernoulli element and the cantilever closed forms
carry no curvature radius, no neutral-axis shift and no fiber-stress
law, so a curved frame corner belongs here.
- skills/structures/fem/beam-vibration: straight continuous-member
natural frequencies only, no curved stress state.
- skills/structures/fem/lug-joint-analysis: pin and lug bearing and
tearout checks of the clevis fitting, not the curved-member bending
stress of the arc that feeds it.
- skills/structures/composites/peel-stress-bonded-joints: an adhesive
Winkler-foundation beam model of a flat single-lap bondline; it
takes no curvature radius and no fiber stress, so it is a different
Winkler model, not a competitor for curved members.
Contract test
Run from the repository root:
python3 skills/structures/fem/curved-beam-analysis/scripts/test_curved_beam_analysis.py
The stdlib unittest contract test runs fully offline and covers the
worked-example anchors of all three load cases (steps 1 to 6 of the
workflow), the circular tube and solid-round closed forms, the
rectangular quadrature identity to the 1e-9 class, the honest
cell-centered grid quadrature agreement of the circular closed form to
about one percent, the width-independence and neutral-axis-position
identities, the amplification ladder, the fiber stress sign and zero
behaviors, the axial contribution identities, the exact verdict
boundary at ratio 1.0 with the fixed pass and fail strings, and the
ValueError rejection of every non-physical input.
Compliance
- Standards referenced, not reproduced: FAR-25 is public-domain US
government work (17 U.S.C. 105) but standards-map.yaml marks it
gated: false and reference-only: true, so only the summary
paraphrase above is used, never standard text. The design allowable
of the worked example is a paraphrased 7075-T6-like value, not a
quoted table.
- The Winkler curved-beam relations and the closed forms are standard
engineering methodology, summary-only.
- compliance: STANDARDS-REF, gated: false.
Behavior contract (gate 3)
Run the deterministic contract test (stdlib unittest, offline):
python3 scripts/test_curved_beam_analysis.py
The test covers the worked-example geometry and all three load case
stresses inside the spec bounds, the circular tube and solid-round
neutral-axis closed forms, the rectangular quadrature identity, the
honest tube-grid quadrature agreement, the width independence and
neutral-axis-between-r_i-and-r_c identities, the amplification growth
with h / r_c, the inner-fiber-over-outer-fiber magnitude law, exact
sign flip for a negative moment, zero stress at zero moment, the
axial-tension and P / A identities, the verdict flip exactly at ratio
1.0 with the fixed pass and fail strings and the exact dict keys, and
ValueError rejection of every non-physical input, all deterministic
and offline in under a second.
1---2name: curved-beam-analysis3description: Use when you must stress-check a curved member with the Winkler curved-beam correction: compute the neutral-axis radius from the closed form A / integral(dA / rho) for a rectangular radial or circular tube section, take the neutral-axis-eccentricity, resolve the Winkler inner and outer fiber stresses, add the axial stress P / A, compare the inner fiber to the straight Euler-Bernoulli reading for the curved-beam amplification, and return the stress-to-allowable ratio with the pass or fail verdict. Produces the neutral-axis radius, neutral-axis-eccentricity, inner and outer fiber stresses, curved-beam amplification over the straight-beam value, and verdict against the allowable. Trigger: winkler curved beam, curved frame segment, torque link arc, clevis arc, curved member stress.4license: Apache-2.05---67# Curved Beam Analysis (structures/fem/curved-beam-analysis)89Use when the task is the stress check of a curved member: a frame10segment, torque link arc or clevis arc whose section bends about the11center of curvature. Where the straight Euler-Bernoulli beam law puts12the extreme fiber stress at M c / I with a linear gradient, a curved13member shifts its neutral axis inward of the centroid and stresses its14fibers hyperbolically, so the inner fiber runs hotter than any15straight-beam reading of the same section. This leaf applies the16Winkler curved-beam correction: it computes the neutral-axis radius of17the radial section from the exact closed form A / integral(dA / rho),18the neutral-axis-eccentricity e = r_c - r_n, the inner and outer fiber19stresses sigma = M (r_n - r_fiber) / (A e r_fiber), the combined20axial-plus-bending stresses, and the curved-beam amplification over21the straight-beam value, then rates the gating fiber stress against22the allowable. It pairs with the straight-member FEM leaves, and it23owns the frame-corner, torque-link and clevis-arc stress check that no24straight-beam or lug leaf covers.2526## Domain quick reference2728- Neutral-axis radius of a curved bar with a rectangular radial29 section spanning inner radius r_i to outer radius r_o:30 r_n = (r_o - r_i) / ln(r_o / r_i), the exact closed form of31 A / integral(dA / rho); the width out of plane cancels. The neutral32 axis always sits strictly between r_i and the centroidal radius33 r_c = (r_i + r_o) / 2.34- Neutral-axis radius of a circular solid or tube section whose35 material annulus (inner radius a_i, outer radius a_o) is centered at36 distance r_c from the center of curvature:37 r_n = (sqrt(r_c^2 - a_i^2) + sqrt(r_c^2 - a_o^2)) / 2, from the disk38 integrals integral(dA / rho) = 2 pi (r_c - sqrt(r_c^2 - a^2));39 a_i = 0.0 reduces the tube to the solid round section,40 r_n = (r_c + sqrt(r_c^2 - a_o^2)) / 2. Geometry requires a_o < r_c.41- Neutral-axis eccentricity: e = r_c - r_n, the inward shift of the42 neutral axis toward the center of curvature, positive for every43 physical curved beam.44- Winkler curved-beam bending stress at fiber radius r_fiber:45 sigma = M (r_n - r_fiber) / (A e r_fiber), hyperbolic across the46 depth. Sign convention: a positive moment opens the arc, tending to47 straighten the member, so the inner fiber (r_fiber < r_n) is in48 tension, sigma > 0, and the outer fiber is in compression,49 sigma < 0; a negative moment reverses both signs.50- Straight Euler-Bernoulli baseline of the same rectangular section:51 sigma_straight = 6 M / (A h), from M c / I with c = h / 2 and52 I = A h^2 / 12. The curved-beam amplification is the ratio of the53 Winkler inner-fiber stress to this value and grows with the54 depth-to-radius ratio h / r_c.55- Combined fiber stress with axial load: sigma + P / A, tension56 positive.57- Stress verdict: ratio = |sigma| / allowable, pass when ratio <= 1.0,58 margin = allowable - |sigma|.59- FAR-25 (25.301-25.307) sets the certification context for structure60 loads and strength; the allowable used here comes from the design61 allowables of the material, not from reproduced standard text.6263## Workflow64651. Gather the curved-member data at the checked section: the inner and66 outer radii of the rectangular radial section (r_i, r_o), or the67 section center radius r_c with the material annulus radii (a_i, a_o)68 for a solid-round or circular-tube section, the section depth h and69 area A, the centroidal radius r_c = (r_i + r_o) / 2, the applied70 bending moment M (positive opens the arc), the axial load P when71 present, and the material allowable.722. Compute the neutral-axis radius of the section: call73 neutral_axis_radius_rect(r_i, r_o) for the rectangular radial74 section, or neutral_axis_radius_circular_tube(r_c, a_i, a_o) for a75 circular section (pass a_i = 0.0 for the solid round). The closed76 forms are A / integral(dA / rho); the result is independent of the77 out-of-plane width of a rectangle and lies strictly between r_i and78 r_c.793. Take the neutral-axis eccentricity with80 eccentricity(r_centroid, r_n): e = r_c - r_n, the inward shift of81 the neutral axis toward the center of curvature, positive for every82 physical curved member.834. Resolve the Winkler fiber stresses with84 curved_beam_stress(moment, area, e, r_n, r_fiber) at the inner85 fiber r_i and the outer fiber r_o of the section, and form the86 straight Euler-Bernoulli baseline of the same section with87 straight_beam_stress_rect(moment, area, depth) to expose the88 curved-beam amplification, the inner-fiber stress divided by the89 straight reading.905. Add the axial contribution when the member carries axial load with91 combined_axial_stress(bending_stress, axial_force, area),92 tension positive, at each fiber.936. Rate the gating inner-fiber combined stress against the allowable94 with stress_verdict(sigma, allowable) and read the ratio, verdict95 and margin from the returned dict.9697## Worked example9899Torque-link / frame-corner style curved member, 7075-T6-like aluminum100alloy with the design allowable tension set at 500 MPa for the check.101Rectangular radial section: r_i = 60 mm, r_o = 100 mm, depth102h = 40 mm, width b = 40 mm, area A = 1600 mm^2, centroidal radius103r_c = 80 mm, axial tension P = 25 kN. Real module outputs:104105- neutral_axis_radius_rect(60.0, 100.0) = 78.30461 mm: the neutral106 axis sits inward of the centroid by107 eccentricity(80.0, 78.30461) = 1.69539 mm, about 4.2 percent of the108 depth toward the center of curvature. The closed form agrees with a109 400000-bin quadrature of A / integral(dA / rho) to relative110 difference 1.45e-13.111- Circular sections: neutral_axis_radius_circular_tube(80.0, 10.0,112 20.0) = 78.41610 mm (e = 1.58390 mm), and the solid round113 neutral_axis_radius_circular_tube(80.0, 0.0, 20.0) = 78.72983 mm114 (e = 1.27017 mm).115- Load case 1, M = 1.2e6 N mm (moderate in-service moment):116 inner fiber curved_beam_stress = 134.95848 MPa tension, outer fiber117 = -95.97509 MPa compression. The straight Euler-Bernoulli baseline118 of the same section is straight_beam_stress_rect = 112.5 MPa: the119 curved-beam correction amplifies the inner fiber by 1.19963 and runs120 the outer fiber at 0.85311 of the straight reading, the classic121 Winkler signature. Adding the axial tension P / A = 15.625 MPa:122 combined inner = 150.58348 MPa, combined outer = -80.35009 MPa.123 Against the 500 MPa allowable: ratio 0.30117, verdict pass, margin124 349.41652 MPa.125- Load case 2, limit moment M = 4.0e6 N mm with the same axial load:126 inner fiber = 449.86161 MPa, combined inner = 465.48661 MPa, ratio127 0.93097, verdict pass, margin 34.51339 MPa.128- Load case 3, ultimate moment M = 4.5e6 N mm: inner fiber =129 506.09432 MPa, combined inner = 521.71932 MPa, ratio 1.04344,130 verdict fail, margin -21.71932 MPa. Read as straight131 (6 M / (A h) = 421.875 MPa combined) the same member would still132 pass, which is the point of the correction: the curved-beam133 inner-fiber stress is the gating number at a frame corner or torque134 link arc.135136## Pitfalls137138- Reading a curved member with the straight law: the straight139 Euler-Bernoulli baseline of the worked example passes load case 3140 while the Winkler inner-fiber stress fails it; always rate the141 curved inner fiber, never 6 M / (A h), for a frame segment or arc.142- Signing the moment backwards: a positive moment opens the arc, so143 the inner fiber goes into tension and the outer fiber into144 compression; a negative moment reverses both. Flipping the sign145 convention swaps which fiber the verdict gates on.146- Taking the neutral axis at the centroid: e is the whole point of the147 correction; setting r_n = r_c would divide by zero in the Winkler148 stress and erase the hyperbolic gradient.149- Using the tube closed form on an invalid section: the annulus outer150 radius must stay below r_c (the section must clear the center of151 curvature) and a_i must be 0 or positive, or the function raises152 ValueError; feeding a_o >= r_c silently corrupts the square root153 instead if you bypass the guard.154- Trusting a raw 2-D grid quadrature of A / integral(dA / rho) for a155 circular section: an independent cell-centered grid over the section156 annulus reproduces the circular closed forms only to about one157 percent (grid and measure sensitive; the prep quadrature note of158 1e-6 class was not independently reproducible in Euclidean section159 measure). Use the closed forms, which are the engineering standard160 for circular-section curved beams and match the spec anchors to161 1e-5. The rectangular closed form, by contrast, is exact to the162 1e-13 class against quadrature.163- Mixing units: radii, area and moment must share one consistent164 system. In the worked example mm and MPa are used with moment in165 N mm and area in mm^2, so N mm / mm^3 = N / mm^2 = MPa; mixing N m166 with mm^2 sections silently scales every stress by 1000.167168## Verification169170- The contract test asserts the real module outputs above inside the171 spec tolerances: geometry anchors to 1e-5, fiber stresses to 1e-4,172 ratios and margins to 1e-3, and the straight baseline 112.5 MPa173 exactly.174- Identities verified: the rectangular closed form equals a175 400000-bin quadrature of A / integral(dA / rho) to 1.45e-13 (better176 than the 1e-9 class), the neutral-axis radius is independent of the177 out-of-plane width, r_n lies strictly between r_i and r_c, the178 eccentricity is positive for physical sections, the inner-fiber179 magnitude exceeds the outer-fiber magnitude for the same moment, the180 curved-beam amplification grows with the depth-to-radius ratio181 (1.04333, 1.09046, 1.14220, 1.19963 for h = 10, 20, 30, 40 mm at182 r_c = 80 mm), a_i = 0.0 in the tube function reproduces the183 solid-section closed form, a negative moment flips both fiber signs184 exactly, zero moment gives zero stress, and the verdict flips from185 pass to fail exactly at ratio 1.0.186- ValueError rejection: non-physical inputs raise ValueError in every187 function (non-positive radii, r_o <= r_i, negative or equal annulus188 radii, a_o >= r_c, non-positive area, eccentricity, neutral-axis189 radius, fiber radius, depth or allowable).190- Determinism: no random numbers anywhere; identical floats run to191 run. Run the contract test offline: python3192 scripts/test_curved_beam_analysis.py (35 tests, deterministic, well193 under one second).194195## Related leaves196197- skills/structures/fem/beam-frame-analysis: the straight-member FEM198 sibling; its Euler-Bernoulli element and the cantilever closed forms199 carry no curvature radius, no neutral-axis shift and no fiber-stress200 law, so a curved frame corner belongs here.201- skills/structures/fem/beam-vibration: straight continuous-member202 natural frequencies only, no curved stress state.203- skills/structures/fem/lug-joint-analysis: pin and lug bearing and204 tearout checks of the clevis fitting, not the curved-member bending205 stress of the arc that feeds it.206- skills/structures/composites/peel-stress-bonded-joints: an adhesive207 Winkler-foundation beam model of a flat single-lap bondline; it208 takes no curvature radius and no fiber stress, so it is a different209 Winkler model, not a competitor for curved members.210211## Contract test212213Run from the repository root:214215 python3 skills/structures/fem/curved-beam-analysis/scripts/test_curved_beam_analysis.py216217The stdlib unittest contract test runs fully offline and covers the218worked-example anchors of all three load cases (steps 1 to 6 of the219workflow), the circular tube and solid-round closed forms, the220rectangular quadrature identity to the 1e-9 class, the honest221cell-centered grid quadrature agreement of the circular closed form to222about one percent, the width-independence and neutral-axis-position223identities, the amplification ladder, the fiber stress sign and zero224behaviors, the axial contribution identities, the exact verdict225boundary at ratio 1.0 with the fixed pass and fail strings, and the226ValueError rejection of every non-physical input.227228## Compliance229230- Standards referenced, not reproduced: FAR-25 is public-domain US231 government work (17 U.S.C. 105) but standards-map.yaml marks it232 gated: false and reference-only: true, so only the summary233 paraphrase above is used, never standard text. The design allowable234 of the worked example is a paraphrased 7075-T6-like value, not a235 quoted table.236- The Winkler curved-beam relations and the closed forms are standard237 engineering methodology, summary-only.238- compliance: STANDARDS-REF, gated: false.239240## Behavior contract (gate 3)241242Run the deterministic contract test (stdlib unittest, offline):243244 python3 scripts/test_curved_beam_analysis.py245246The test covers the worked-example geometry and all three load case247stresses inside the spec bounds, the circular tube and solid-round248neutral-axis closed forms, the rectangular quadrature identity, the249honest tube-grid quadrature agreement, the width independence and250neutral-axis-between-r_i-and-r_c identities, the amplification growth251with h / r_c, the inner-fiber-over-outer-fiber magnitude law, exact252sign flip for a negative moment, zero stress at zero moment, the253axial-tension and P / A identities, the verdict flip exactly at ratio2541.0 with the fixed pass and fail strings and the exact dict keys, and255ValueError rejection of every non-physical input, all deterministic256and offline in under a second.