Beam-Column Analysis (structures/fem/beam-column-analysis)
Use when the task is the global member-level margin check of a slender
compression member that also carries bending: a longeron, spar cap or
actuator rod under combined axial compression and primary end moment or
lateral load. The Euler load P_E = pi^2 E I / (K L)^2 of the member sets
the amplification denominator, the moment amplification factor
delta = c_m / (1 - P/P_E) grows the primary moment as the axial load
approaches the Euler load, the secant formula gives the peak compressive
stress of an eccentrically loaded column, and the axial-plus-bending
interaction ratio P/P_cr + M/(M_cap (1 - P/P_E)) with its margin of
safety 1/ratio - 1 and the pass verdict closes the combined-loading
check. The logic module is pure Python standard library, deterministic,
with no FEA software. It pairs with structures/fem/buckling-analysis,
which owns the concentrically loaded Euler column and rates it slender
or stubby; this leaf takes P_E only as the amplification denominator and
interaction input. Structures/fem/beam-frame-analysis supplies first-
order member forces that this leaf then margin-checks under combined
loading. Units are SI: E in Pa, I in m^4, A in m^2, L and eccentricity in
m, forces in N, moments in N m, stresses in Pa.
Domain quick reference
Euler load of the member, the classic ideal-column critical load:
P_E = pi^2 E I / (K L)^2
where K is the effective length factor resolved from the end
conditions (per the concentric-column sibling; pinned-pinned K = 1.0,
fixed-fixed K = 0.5 raises P_E by the factor 4, cantilever K = 2.0
lowers it by the factor 4).
Moment amplification factor (standard second-order factor, name and
paraphrase):
delta = c_m / (1 - P/P_E)
with c_m = 1.0 for the worst-case constant moment. delta is 1.0 at
zero axial load and grows without bound as P approaches P_E from
below. The amplified primary moment is M_amp = delta * M.
Secant-formula peak compressive stress of an eccentrically loaded
column (classical secant formula, name and paraphrase):
sigma_max = (P/A) (1 + (e c / r^2) / cos((K L / (2 r)) sqrt(P/(E A))))
with e the load eccentricity, c the extreme-fiber distance and
r = sqrt(I/A) the radius of gyration. The secant argument reaches
pi/2 exactly at P = P_E, so sigma_max diverges precisely where the
member buckles. At e = 0 the formula returns P/A exactly, the pure
axial stress limit.
Section yield moment capacity of the extreme fiber:
M_cap = sigma_y I / c
Axial-plus-bending interaction ratio with its amplification carried
inside the bending term:
ratio = P/P_cr + M_applied / (M_cap (1 - P/P_E))
margin = 1/ratio - 1
pass = ratio <= 1.0 (inclusive)
With M_applied = 0 the ratio degenerates to P/P_cr and the margin to
P_cr/P - 1, the pure-axial margin-of-safety identity of the
concentric-column sibling.
Workflow
- Fix the limit load case at the critical station: member properties
E, I, A, L, the effective length factor K from the support
conditions, the radius of gyration r = sqrt(I/A), the extreme-fiber
distance c, the limit axial load P and the primary end moment M, or
the load eccentricity e = M/P when the moment enters that way.
- Euler load traverse: call euler_load(e_mod, i, l, k) to get P_E,
form the axial ratio P/P_E and confirm it sits strictly below unity,
the pole at which the amplification diverges. If the axial-only
critical load P_cr comes from the concentric-column sibling, form
the axial utilization P/P_cr too.
- Moment amplification traverse: call moment_amplification(p, p_euler,
c_m) for delta, multiply the primary moment by delta for the
amplified moment, and form the amplified bending utilization
delta * M / M_cap against the section capacity.
- Secant-formula stress traverse: for an eccentrically loaded column
call secant_stress(p, area, ecc, c, r, l, e_mod, k) to get the peak
compressive stress sigma_max, and compare it against the yield
strength. A result at or above P_E means the member buckles before
it can resist the bending, and the guard raises ValueError.
- Interaction-ratio traverse: call interaction_check(p, p_cr,
m_applied, m_capacity, p_euler) and read the dict with keys ratio,
margin and pass. The margin of safety 1/ratio - 1 and the pass
verdict gate the global combined-loading margin check.
- Contract-test confirmation: run python3
scripts/test_beam_column_analysis.py and confirm every deterministic
case passes offline.
Worked example
The steel member of the buckling-analysis worked anchor, E = 200 GPa,
I = 1e-6 m^4, A = 1e-3 m^2, L = 3.0 m, pinned-pinned K = 1.0, now
carrying combined loading. Solid circular section: r = sqrt(I/A) =
0.031623 m, extreme fiber c = 2 r = 0.063246 m, effective slenderness
K L / r = 94.8683. Limit axial load P = 100 kN with a primary end moment
M = 1 kN m from a load eccentricity e = M/P = 10 mm at the loaded end.
Real outputs of the module:
- P_E = euler_load(200e9, 1e-6, 3.0) = 219324.542 N = 219.325 kN, so
P/P_E = 0.455945. The same member at K = 0.5 gives 877.298 kN and at
K = 2.0 gives 54.831 kN, the K-squared scaling.
- delta = moment_amplification(100e3, 219324.542) = 1.838051, so the
amplified primary moment is 1.838 kN m. The unamplified bending
utilization M/M_cap is 0.252982, but the amplified utilization
M/(M_cap (1 - P/P_E)) is 0.464994: amplification is the whole story.
- sigma_max = secant_stress(100e3, 1e-3, 0.010, 0.063246, 0.031623, 3.0,
200e9, 1.0) = 2.295230e8 Pa = 229.5230 MPa, 0.9181 of the 250 MPa
yield strength; the secant argument is 1.060660 rad, comfortably below
the pi/2 = 1.570796 rad pole at P_E.
- M_cap = sigma_y I / c = 250e6 * 1e-6 / 0.063246 = 3952.847 N m (3.953
kN m).
- interaction_check(100e3, 219324.542, 1000.0, 3952.847, 219324.542):
axial term 0.455945, amplified moment term 0.464994, ratio = 0.920939,
margin = +0.085848 (8.58%), verdict PASS. The Euler-only margin of
safety on this member is 1.19; adding the 1 kN m primary bending
moment drops the combined margin to +0.086, about a 93% reduction,
and ignoring the moment amplification would overstate the margin to
1/0.708927 - 1 = +0.411.
- Overload case P = 130 kN, M = 1.2 kN m (e = 9.23 mm): delta =
2.455424, ratio = 1.3381, margin = -0.2527, verdict FAIL; the secant
peak stress is 344.61 MPa, above the 250 MPa yield. The member passes
neither check at this load.
Verification
Deterministic checks, all offline:
- moment_amplification(0.0, p_euler) = 1.0 exactly; secant_stress with
ecc = 0.0 returns P/A = 1.0e8 Pa exactly; the pinned-pinned to
fixed-fixed Euler load ratio is 4.0 exactly (K enters squared).
- Divergence consistency: the secant argument at P = P_E computes to
1.570796 rad = pi/2, and moment_amplification raises ValueError at
p >= p_euler, as does secant_stress once the argument reaches pi/2
(asserted at p = p_euler + 1.0 N, strictly above the pole).
- Monotonicity: delta rises 1.295291 at P = 50 kN, 1.838051 at P =
100 kN, 3.163736 at P = 150 kN; secant_stress rises with ecc at fixed
P.
- Pure-axial degeneration: interaction_check(100e3, 219324.542, 0.0,
3952.847, 219324.542) gives ratio 0.455945 and margin +1.193245, the
buckling-analysis margin of safety MS = Pcr/P - 1 = 1.19 anchor.
- Rejection: non-positive modulus, moment of area, length, effective
length factor, radius of gyration, extreme-fiber distance, capacity
and negative eccentricity all raise ValueError, as do axial loads at
or above the Euler load in every function that divides by
1 - P/P_E.
- Run the contract test: python3
scripts/test_beam_column_analysis.py (27 tests, deterministic,
exit 0).
Related leaves
- structures/fem/buckling-analysis: the concentrically loaded slender
column, source of the Euler critical load, the end-condition factors
and the slender-or-stubby rating; the pure-axial margin of safety
this leaf reproduces at zero moment.
- structures/fem/beam-frame-analysis: first-order rigid-jointed frame
solves whose member axial and bending results feed the combined
margin check here when a member carries both.
- structures/fem/plate-buckling: flat-panel compression and shear
stability, the panel-level stress interaction that this leaf does not
cover.
- structures/fem/truss-analysis: pin-jointed axial bars with no bending
moment, the pure-axial limit of this leaf's interaction ratio.
Contract test
Run it offline and deterministic from the repo root:
python3 scripts/test_beam_column_analysis.py
The suite exercises the numbered Workflow steps by name: the Euler load
traverse (step 2) against the 219.325 kN worked anchor with the K
scaling and the exact 4.0 ratio, the moment amplification traverse
(step 3) against delta 1.838051 with the monotone series, the zero-load
unity limit, the c_m scaling and the amplification-to-interaction
utilization bridge, the secant-formula stress traverse (step 4) against
the 229.5230 MPa peak with the ecc = 0 pure-axial limit, eccentricity
monotonicity, the pi/2 pole and the overload-yield case, the
interaction-ratio traverse (step 5) against ratio 0.920939 PASS and the
130 kN overload FAIL, the pure-axial margin identity 1.193245, the
inclusive ratio = 1.0 boundary, the exact dict keys and margin
recomputation, plus cross-step determinism and bool verdict typing
(step 6). It also asserts every ValueError rejection named in the spec
Validation list.
Pitfalls
- Sizing on the unamplified moment: ignoring delta = 1/(1 - P/P_E)
overstates the margin to +0.411 against the true +0.086 in the worked
example. At P/P_E = 0.456 the amplification nearly doubles the
bending utilization.
- Applying the pure-axial Euler margin to a bending member: the axial
margin of safety is 1.19, but the combined margin falls to +0.086
once the 1 kN m primary moment is added, a 93% reduction. The
interaction ratio, not the axial ratio, gates the combined case.
- Running at or above the Euler load: both delta and the secant
argument diverge at P = P_E, where the member buckles before it can
resist the moment. Inputs at or above P_E raise ValueError in every
amplification and interaction function; a result near the pole means
the check is meaningless, not that the margin is huge.
- Feeding the eccentricity in millimeters: the worked eccentricity is
10 mm = 0.010 m; passing 10.0 m for ecc makes the secant term
e c / r^2 enormous and the stress wrong by orders of magnitude. All
length inputs are meters.
- Confusing the extreme-fiber distance with the radius of gyration: for
the solid circular section c = 2 r = 0.063246 m while r = 0.031623 m;
swapping them halves the eccentricity leverage term and understates
the peak stress.
- Double counting the amplification: the interaction bending term
carries 1/(1 - P/P_E) built in, so the applied moment must enter
interaction_check unamplified; multiplying M by delta first inflates
the ratio and fails healthy members.
Behavior contract (gate 3)
Run the deterministic contract test (stdlib unittest, offline):
python3 scripts/test_beam_column_analysis.py
The test covers the Euler load traverse with the worked P_E anchor, the
K-squared scaling and the non-physical-input rejections, the moment
amplification traverse with the 1.838051 worked factor, the monotone
series to the pole, the exact unity limit and the c_m scaling, the
secant-formula stress traverse with the 229.5230 MPa worked peak, the
ecc = 0 pure-axial limit, the eccentricity monotonicity, the pi/2 pole
guard and the overload-yield comparison, the interaction-ratio traverse
with the PASS case, the FAIL overload, the pure-axial margin identity,
the inclusive ratio = 1.0 boundary, exact dict keys and the margin
recomputation, plus determinism and boolean verdict typing. All 27
methods must pass and the process must exit 0.
Compliance
- Standards referenced, not reproduced: FAR/CS 25 airworthiness strength
and margin requirements frame the combined-loading context
(reference-only per standards-map.yaml). The Euler load, the moment
amplification factor and the secant formula above are standard
engineering methodology, summary-only, named and paraphrased, never
quoted from a standard text.
- compliance: STANDARDS-REF, gated: false.
1---2name: beam-column-analysis3description: Use when you must margin-check a compression member that also carries bending: compute the Euler load P_E, the moment amplification factor delta that grows the moment as the axial load nears the Euler load, the amplified moment, the secant-formula peak compressive stress of an eccentrically loaded column, and the axial-plus-bending interaction ratio with its margin of safety and pass verdict. Produces P_E, the amplification factor, the amplified moment, the peak combined stress, the interaction ratio, the margin and the verdict for the combined-loading check. SI units, stdlib. Trigger: combined axial compression and bending, moment amplification factor, euler load, secant formula, load eccentricity, margin of safety.4license: Apache-2.05---67# Beam-Column Analysis (structures/fem/beam-column-analysis)89Use when the task is the global member-level margin check of a slender10compression member that also carries bending: a longeron, spar cap or11actuator rod under combined axial compression and primary end moment or12lateral load. The Euler load P_E = pi^2 E I / (K L)^2 of the member sets13the amplification denominator, the moment amplification factor14delta = c_m / (1 - P/P_E) grows the primary moment as the axial load15approaches the Euler load, the secant formula gives the peak compressive16stress of an eccentrically loaded column, and the axial-plus-bending17interaction ratio P/P_cr + M/(M_cap (1 - P/P_E)) with its margin of18safety 1/ratio - 1 and the pass verdict closes the combined-loading19check. The logic module is pure Python standard library, deterministic,20with no FEA software. It pairs with structures/fem/buckling-analysis,21which owns the concentrically loaded Euler column and rates it slender22or stubby; this leaf takes P_E only as the amplification denominator and23interaction input. Structures/fem/beam-frame-analysis supplies first-24order member forces that this leaf then margin-checks under combined25loading. Units are SI: E in Pa, I in m^4, A in m^2, L and eccentricity in26m, forces in N, moments in N m, stresses in Pa.2728## Domain quick reference2930- Euler load of the member, the classic ideal-column critical load:3132 P_E = pi^2 E I / (K L)^23334 where K is the effective length factor resolved from the end35 conditions (per the concentric-column sibling; pinned-pinned K = 1.0,36 fixed-fixed K = 0.5 raises P_E by the factor 4, cantilever K = 2.037 lowers it by the factor 4).3839- Moment amplification factor (standard second-order factor, name and40 paraphrase):4142 delta = c_m / (1 - P/P_E)4344 with c_m = 1.0 for the worst-case constant moment. delta is 1.0 at45 zero axial load and grows without bound as P approaches P_E from46 below. The amplified primary moment is M_amp = delta * M.4748- Secant-formula peak compressive stress of an eccentrically loaded49 column (classical secant formula, name and paraphrase):5051 sigma_max = (P/A) (1 + (e c / r^2) / cos((K L / (2 r)) sqrt(P/(E A))))5253 with e the load eccentricity, c the extreme-fiber distance and54 r = sqrt(I/A) the radius of gyration. The secant argument reaches55 pi/2 exactly at P = P_E, so sigma_max diverges precisely where the56 member buckles. At e = 0 the formula returns P/A exactly, the pure57 axial stress limit.5859- Section yield moment capacity of the extreme fiber:6061 M_cap = sigma_y I / c6263- Axial-plus-bending interaction ratio with its amplification carried64 inside the bending term:6566 ratio = P/P_cr + M_applied / (M_cap (1 - P/P_E))67 margin = 1/ratio - 168 pass = ratio <= 1.0 (inclusive)6970 With M_applied = 0 the ratio degenerates to P/P_cr and the margin to71 P_cr/P - 1, the pure-axial margin-of-safety identity of the72 concentric-column sibling.7374## Workflow75761. Fix the limit load case at the critical station: member properties77 E, I, A, L, the effective length factor K from the support78 conditions, the radius of gyration r = sqrt(I/A), the extreme-fiber79 distance c, the limit axial load P and the primary end moment M, or80 the load eccentricity e = M/P when the moment enters that way.812. Euler load traverse: call euler_load(e_mod, i, l, k) to get P_E,82 form the axial ratio P/P_E and confirm it sits strictly below unity,83 the pole at which the amplification diverges. If the axial-only84 critical load P_cr comes from the concentric-column sibling, form85 the axial utilization P/P_cr too.863. Moment amplification traverse: call moment_amplification(p, p_euler,87 c_m) for delta, multiply the primary moment by delta for the88 amplified moment, and form the amplified bending utilization89 delta * M / M_cap against the section capacity.904. Secant-formula stress traverse: for an eccentrically loaded column91 call secant_stress(p, area, ecc, c, r, l, e_mod, k) to get the peak92 compressive stress sigma_max, and compare it against the yield93 strength. A result at or above P_E means the member buckles before94 it can resist the bending, and the guard raises ValueError.955. Interaction-ratio traverse: call interaction_check(p, p_cr,96 m_applied, m_capacity, p_euler) and read the dict with keys ratio,97 margin and pass. The margin of safety 1/ratio - 1 and the pass98 verdict gate the global combined-loading margin check.996. Contract-test confirmation: run python3100 scripts/test_beam_column_analysis.py and confirm every deterministic101 case passes offline.102103## Worked example104105The steel member of the buckling-analysis worked anchor, E = 200 GPa,106I = 1e-6 m^4, A = 1e-3 m^2, L = 3.0 m, pinned-pinned K = 1.0, now107carrying combined loading. Solid circular section: r = sqrt(I/A) =1080.031623 m, extreme fiber c = 2 r = 0.063246 m, effective slenderness109K L / r = 94.8683. Limit axial load P = 100 kN with a primary end moment110M = 1 kN m from a load eccentricity e = M/P = 10 mm at the loaded end.111Real outputs of the module:112113- P_E = euler_load(200e9, 1e-6, 3.0) = 219324.542 N = 219.325 kN, so114 P/P_E = 0.455945. The same member at K = 0.5 gives 877.298 kN and at115 K = 2.0 gives 54.831 kN, the K-squared scaling.116- delta = moment_amplification(100e3, 219324.542) = 1.838051, so the117 amplified primary moment is 1.838 kN m. The unamplified bending118 utilization M/M_cap is 0.252982, but the amplified utilization119 M/(M_cap (1 - P/P_E)) is 0.464994: amplification is the whole story.120- sigma_max = secant_stress(100e3, 1e-3, 0.010, 0.063246, 0.031623, 3.0,121 200e9, 1.0) = 2.295230e8 Pa = 229.5230 MPa, 0.9181 of the 250 MPa122 yield strength; the secant argument is 1.060660 rad, comfortably below123 the pi/2 = 1.570796 rad pole at P_E.124- M_cap = sigma_y I / c = 250e6 * 1e-6 / 0.063246 = 3952.847 N m (3.953125 kN m).126- interaction_check(100e3, 219324.542, 1000.0, 3952.847, 219324.542):127 axial term 0.455945, amplified moment term 0.464994, ratio = 0.920939,128 margin = +0.085848 (8.58%), verdict PASS. The Euler-only margin of129 safety on this member is 1.19; adding the 1 kN m primary bending130 moment drops the combined margin to +0.086, about a 93% reduction,131 and ignoring the moment amplification would overstate the margin to132 1/0.708927 - 1 = +0.411.133- Overload case P = 130 kN, M = 1.2 kN m (e = 9.23 mm): delta =134 2.455424, ratio = 1.3381, margin = -0.2527, verdict FAIL; the secant135 peak stress is 344.61 MPa, above the 250 MPa yield. The member passes136 neither check at this load.137138## Verification139140Deterministic checks, all offline:141142- moment_amplification(0.0, p_euler) = 1.0 exactly; secant_stress with143 ecc = 0.0 returns P/A = 1.0e8 Pa exactly; the pinned-pinned to144 fixed-fixed Euler load ratio is 4.0 exactly (K enters squared).145- Divergence consistency: the secant argument at P = P_E computes to146 1.570796 rad = pi/2, and moment_amplification raises ValueError at147 p >= p_euler, as does secant_stress once the argument reaches pi/2148 (asserted at p = p_euler + 1.0 N, strictly above the pole).149- Monotonicity: delta rises 1.295291 at P = 50 kN, 1.838051 at P =150 100 kN, 3.163736 at P = 150 kN; secant_stress rises with ecc at fixed151 P.152- Pure-axial degeneration: interaction_check(100e3, 219324.542, 0.0,153 3952.847, 219324.542) gives ratio 0.455945 and margin +1.193245, the154 buckling-analysis margin of safety MS = Pcr/P - 1 = 1.19 anchor.155- Rejection: non-positive modulus, moment of area, length, effective156 length factor, radius of gyration, extreme-fiber distance, capacity157 and negative eccentricity all raise ValueError, as do axial loads at158 or above the Euler load in every function that divides by159 1 - P/P_E.160- Run the contract test: python3161 scripts/test_beam_column_analysis.py (27 tests, deterministic,162 exit 0).163164## Related leaves165166- structures/fem/buckling-analysis: the concentrically loaded slender167 column, source of the Euler critical load, the end-condition factors168 and the slender-or-stubby rating; the pure-axial margin of safety169 this leaf reproduces at zero moment.170- structures/fem/beam-frame-analysis: first-order rigid-jointed frame171 solves whose member axial and bending results feed the combined172 margin check here when a member carries both.173- structures/fem/plate-buckling: flat-panel compression and shear174 stability, the panel-level stress interaction that this leaf does not175 cover.176- structures/fem/truss-analysis: pin-jointed axial bars with no bending177 moment, the pure-axial limit of this leaf's interaction ratio.178179## Contract test180181Run it offline and deterministic from the repo root:182183 python3 scripts/test_beam_column_analysis.py184185The suite exercises the numbered Workflow steps by name: the Euler load186traverse (step 2) against the 219.325 kN worked anchor with the K187scaling and the exact 4.0 ratio, the moment amplification traverse188(step 3) against delta 1.838051 with the monotone series, the zero-load189unity limit, the c_m scaling and the amplification-to-interaction190utilization bridge, the secant-formula stress traverse (step 4) against191the 229.5230 MPa peak with the ecc = 0 pure-axial limit, eccentricity192monotonicity, the pi/2 pole and the overload-yield case, the193interaction-ratio traverse (step 5) against ratio 0.920939 PASS and the194130 kN overload FAIL, the pure-axial margin identity 1.193245, the195inclusive ratio = 1.0 boundary, the exact dict keys and margin196recomputation, plus cross-step determinism and bool verdict typing197(step 6). It also asserts every ValueError rejection named in the spec198Validation list.199200## Pitfalls201202- Sizing on the unamplified moment: ignoring delta = 1/(1 - P/P_E)203 overstates the margin to +0.411 against the true +0.086 in the worked204 example. At P/P_E = 0.456 the amplification nearly doubles the205 bending utilization.206- Applying the pure-axial Euler margin to a bending member: the axial207 margin of safety is 1.19, but the combined margin falls to +0.086208 once the 1 kN m primary moment is added, a 93% reduction. The209 interaction ratio, not the axial ratio, gates the combined case.210- Running at or above the Euler load: both delta and the secant211 argument diverge at P = P_E, where the member buckles before it can212 resist the moment. Inputs at or above P_E raise ValueError in every213 amplification and interaction function; a result near the pole means214 the check is meaningless, not that the margin is huge.215- Feeding the eccentricity in millimeters: the worked eccentricity is216 10 mm = 0.010 m; passing 10.0 m for ecc makes the secant term217 e c / r^2 enormous and the stress wrong by orders of magnitude. All218 length inputs are meters.219- Confusing the extreme-fiber distance with the radius of gyration: for220 the solid circular section c = 2 r = 0.063246 m while r = 0.031623 m;221 swapping them halves the eccentricity leverage term and understates222 the peak stress.223- Double counting the amplification: the interaction bending term224 carries 1/(1 - P/P_E) built in, so the applied moment must enter225 interaction_check unamplified; multiplying M by delta first inflates226 the ratio and fails healthy members.227228## Behavior contract (gate 3)229230Run the deterministic contract test (stdlib unittest, offline):231232 python3 scripts/test_beam_column_analysis.py233234The test covers the Euler load traverse with the worked P_E anchor, the235K-squared scaling and the non-physical-input rejections, the moment236amplification traverse with the 1.838051 worked factor, the monotone237series to the pole, the exact unity limit and the c_m scaling, the238secant-formula stress traverse with the 229.5230 MPa worked peak, the239ecc = 0 pure-axial limit, the eccentricity monotonicity, the pi/2 pole240guard and the overload-yield comparison, the interaction-ratio traverse241with the PASS case, the FAIL overload, the pure-axial margin identity,242the inclusive ratio = 1.0 boundary, exact dict keys and the margin243recomputation, plus determinism and boolean verdict typing. All 27244methods must pass and the process must exit 0.245246## Compliance247248- Standards referenced, not reproduced: FAR/CS 25 airworthiness strength249 and margin requirements frame the combined-loading context250 (reference-only per standards-map.yaml). The Euler load, the moment251 amplification factor and the secant formula above are standard252 engineering methodology, summary-only, named and paraphrased, never253 quoted from a standard text.254- compliance: STANDARDS-REF, gated: false.