NTC-2023 Acero
12/12Revisión de las secciones extremas de miembros en flexocompresión (9.1.6.1.a) y, por remisión de 9.2.2.2, en flexotensión, de sección I o H tipo 1 o 2 — sustitución conservadora de la ec. 9.1.6.1 con α = 1 por la ec. 9.1.6.1.5, junto con la condición adicional de la ec. 9.1.6.1.7
Casos de prueba (0/0)
Resistencia a compresión — estado límite de pandeo por flexión de miembros sin elementos esbeltos
Casos de prueba (2/2)
source: Second derivation, not a two-source case. Expected ratio computed by hand from the clause formulas and resistance factors recorded in this spec (Rc = FR*chi*Fy*A with chi = [1+lambda_c^(2n)]^(-1/n), n = 1.0; lambda_c = sqrt(Fy/Fe); Fe = pi^2*E/(KL/r)^2), independently of the Rust check. Governing KL/r is the larger of KyL/ry = 30.0 and KzL/rz = 60.0, so KL/r = 60.0; Fe = 548,311,355.6 Pa; lambda_c = 0.675237; chi = 0.686839; Rc = 0.9*0.686839*250e6*0.01 = 1,545,387.70 N. This catches a mismatch between the implementation and the formula as transcribed here. It does NOT satisfy the two-source rule: it shares this spec's transcription with the implementation, so it cannot detect a transcription error against the published norm. A published worked example should be added later as an ADDITIONAL case with its own inputs and citation, not as a replacement for this string. If such a source disagrees with these numbers, that is a finding, not a test failure: it means either the transcription in this spec or this derivation is wrong, which is exactly what the two-source rule exists to surface.
source: Second derivation, not a two-source case. Expected ratio computed by hand from the clause formulas and resistance factors recorded in this spec (Rc = FR*chi*Fy*A with chi = [1+lambda_c^(2n)]^(-1/n), n = 1.0; lambda_c = sqrt(Fy/Fe); Fe = pi^2*E/(KL/r)^2), independently of the Rust check. Governing KL/r is the larger of KyL/ry = 30.0 and KzL/rz = 60.0, so KL/r = 60.0; Fe = 548,311,355.6 Pa; lambda_c = 0.675237; chi = 0.686839; Rc = 0.9*0.686839*250e6*0.01 = 1,545,387.70 N. This catches a mismatch between the implementation and the formula as transcribed here. It does NOT satisfy the two-source rule: it shares this spec's transcription with the implementation, so it cannot detect a transcription error against the published norm. A published worked example should be added later as an ADDITIONAL case with its own inputs and citation, not as a replacement for this string. If such a source disagrees with these numbers, that is a finding, not a test failure: it means either the transcription in this spec or this derivation is wrong, which is exactly what the two-source rule exists to surface.
Resistencia en flexión de miembros compactos (tipo 1 o 2) de sección I con dos ejes de simetría, flexionados alrededor del eje de mayor inercia — estados límite de fluencia y de pandeo lateral por flexotorsión
Casos de prueba (2/2)
source: Second derivation, not a two-source case. Expected ratio computed by hand from the clause formulas and resistance factors recorded in this spec, independently of the Rust check. G = E/(2(1+nu)) = 76,923,076,923 Pa. Section is compact per Tabla 2.2.1.2.6.b: bf/2tf = 4.50 <= 0.38*sqrt(E/Fy) = 10.748 and h/ta = 29.17 <= 3.76*sqrt(E/Fy) = 106.349, so this clause governs. Mp = Zx*Fy = 437,500 N*m. TWO TRAPS a hand derivation must respect. (1) Ca is the FLANGES-ONLY warping constant Iy*h0^2/4 with h0 = d - tf = 0.38 m, which is deliberately <= the true warping constant; computing Ca by the full-section formula gives a different Me and the case fails for a reason that is not a defect. Ca = 7.0395e-7 m^6. (2) The 'Iy' in this clause is the WEAK-axis inertia, 'el eje de simetria situado en el plano del alma', which in this model is inertia_z_m4 = 1.95e-5 m^4 and NOT inertia_y_m4; local y is the strong axis here. Then Me = (Cb*pi/L)*sqrt(E*Iy*G*J + (pi*E/L)^2*Iy*Ca) = 369,696.95 N*m with Cb = 1.0 and L = 6.0 m. Me > (2/3)Mp = 291,667, so the inelastic branch governs: Mn = 1.15*Mp*(1 - 0.28*Mp/Me) = 336,413.29 N*m, below Mp so the cap does not bind, which is why L = 6.0 m was chosen -- it exercises the 1.15 and 0.28 coefficients rather than capping at Mp. MR = 0.9*336,413.29 = 302,771.96 N*m. This catches a mismatch between the implementation and the formula as transcribed here. It does NOT satisfy the two-source rule: it shares this spec's transcription with the implementation, so it cannot detect a transcription error against the published norm. A published worked example should be added later as an ADDITIONAL case with its own inputs and citation, not as a replacement for this string. If such a source disagrees with these numbers, that is a finding, not a test failure.
source: Second derivation, not a two-source case. Expected ratio computed by hand from the clause formulas and resistance factors recorded in this spec, independently of the Rust check. G = E/(2(1+nu)) = 76,923,076,923 Pa. Section is compact per Tabla 2.2.1.2.6.b: bf/2tf = 4.50 <= 0.38*sqrt(E/Fy) = 10.748 and h/ta = 29.17 <= 3.76*sqrt(E/Fy) = 106.349, so this clause governs. Mp = Zx*Fy = 437,500 N*m. TWO TRAPS a hand derivation must respect. (1) Ca is the FLANGES-ONLY warping constant Iy*h0^2/4 with h0 = d - tf = 0.38 m, which is deliberately <= the true warping constant; computing Ca by the full-section formula gives a different Me and the case fails for a reason that is not a defect. Ca = 7.0395e-7 m^6. (2) The 'Iy' in this clause is the WEAK-axis inertia, 'el eje de simetria situado en el plano del alma', which in this model is inertia_z_m4 = 1.95e-5 m^4 and NOT inertia_y_m4; local y is the strong axis here. Then Me = (Cb*pi/L)*sqrt(E*Iy*G*J + (pi*E/L)^2*Iy*Ca) = 369,696.95 N*m with Cb = 1.0 and L = 6.0 m. Me > (2/3)Mp = 291,667, so the inelastic branch governs: Mn = 1.15*Mp*(1 - 0.28*Mp/Me) = 336,413.29 N*m, below Mp so the cap does not bind, which is why L = 6.0 m was chosen -- it exercises the 1.15 and 0.28 coefficients rather than capping at Mp. MR = 0.9*336,413.29 = 302,771.96 N*m. This catches a mismatch between the implementation and the formula as transcribed here. It does NOT satisfy the two-source rule: it shares this spec's transcription with the implementation, so it cannot detect a transcription error against the published norm. A published worked example should be added later as an ADDITIONAL case with its own inputs and citation, not as a replacement for this string. If such a source disagrees with these numbers, that is a finding, not a test failure.
Resistencia en cortante del alma sin considerar el campo de tensión diagonal — estados límite de fluencia y de pandeo por cortante
Casos de prueba (6/6)
source: Second derivation, not a two-source case. Expected ratio recomputed by hand from the resistance factors recorded in this spec, independently of the Rust check. V_R = FR*0.6*Fy*Aa*Cv with FR = 0.9, Aa = h*ta, and Fy = 250 MPa, E = 200 GPa. The web is UNSTIFFENED (no transverse_stiffener_spacing_m stated), so kv = 5.0 per eq. 8.2.3.a and X = sqrt(kv*E/Fy) = 63.245553. The three Cv branches are bounded by 1.10X = 69.5701 and 1.37X = 86.6464. Exercises the PLASTIC branch: h/ta = 30.0 <= 1.10X = 69.5701, so Cv = 1.0 and the web yields rather than buckling. Geometry chosen because this is the most common web in practice and it is the one branch where every Cv coefficient drops out — so without it, an implementation that wrongly applied an inelastic Cv to a compact web would go undetected, while the other two cases would still pass. Aa = 0.300*0.010 = 0.003 m^2; V_R = 0.9*0.6*250e6*0.003*1.0 = 405,000 N. IMPORTANT, a limit of this spec rather than of the derivation: this rule's `latex` states only V_R = F_R(0.6 Fy Aa Cv) and does NOT state how Cv is determined, so the branch structure above was taken from the factor names (Cv_plastic_limit 1.1, Cv_inelastic_limit 1.37, Cv_elastic_coefficient 1.51) plus the standard form of the clause. The `latex` should be extended to carry the three Cv branches, because as written it omits the mechanism this rule exists to apply. ALSO: the out-of-scope refusal at h/ta >= 260 is NOT covered by any case here and cannot be — the case runner maps NotApplicable to an error by design, since a declined case has no ratio to compare. That refusal is pinned by the unit test `unstiffened_web_beyond_260_is_out_of_scope` in src/normatives/mx_cdmx_acero_2023/mod.rs. This set therefore covers the three COMPUTING branches only, and is complete only in that sense. This catches a mismatch between the implementation and the clause as understood here. It does NOT satisfy the two-source rule: it cannot detect a transcription error against the published norm. A published worked example should be added later as an ADDITIONAL case with its own inputs and citation, never as a replacement for this string. If such a source disagrees with these numbers, that is a finding rather than a test failure.
source: Second derivation, not a two-source case. Expected ratio recomputed by hand from the resistance factors recorded in this spec, independently of the Rust check. V_R = FR*0.6*Fy*Aa*Cv with FR = 0.9, Aa = h*ta, and Fy = 250 MPa, E = 200 GPa. The web is UNSTIFFENED (no transverse_stiffener_spacing_m stated), so kv = 5.0 per eq. 8.2.3.a and X = sqrt(kv*E/Fy) = 63.245553. The three Cv branches are bounded by 1.10X = 69.5701 and 1.37X = 86.6464. Exercises the PLASTIC branch: h/ta = 30.0 <= 1.10X = 69.5701, so Cv = 1.0 and the web yields rather than buckling. Geometry chosen because this is the most common web in practice and it is the one branch where every Cv coefficient drops out — so without it, an implementation that wrongly applied an inelastic Cv to a compact web would go undetected, while the other two cases would still pass. Aa = 0.300*0.010 = 0.003 m^2; V_R = 0.9*0.6*250e6*0.003*1.0 = 405,000 N. IMPORTANT, a limit of this spec rather than of the derivation: this rule's `latex` states only V_R = F_R(0.6 Fy Aa Cv) and does NOT state how Cv is determined, so the branch structure above was taken from the factor names (Cv_plastic_limit 1.1, Cv_inelastic_limit 1.37, Cv_elastic_coefficient 1.51) plus the standard form of the clause. The `latex` should be extended to carry the three Cv branches, because as written it omits the mechanism this rule exists to apply. ALSO: the out-of-scope refusal at h/ta >= 260 is NOT covered by any case here and cannot be — the case runner maps NotApplicable to an error by design, since a declined case has no ratio to compare. That refusal is pinned by the unit test `unstiffened_web_beyond_260_is_out_of_scope` in src/normatives/mx_cdmx_acero_2023/mod.rs. This set therefore covers the three COMPUTING branches only, and is complete only in that sense. This catches a mismatch between the implementation and the clause as understood here. It does NOT satisfy the two-source rule: it cannot detect a transcription error against the published norm. A published worked example should be added later as an ADDITIONAL case with its own inputs and citation, never as a replacement for this string. If such a source disagrees with these numbers, that is a finding rather than a test failure.
source: Second derivation, not a two-source case. Expected ratio recomputed by hand from the resistance factors recorded in this spec, independently of the Rust check. V_R = FR*0.6*Fy*Aa*Cv with FR = 0.9, Aa = h*ta, and Fy = 250 MPa, E = 200 GPa. The web is UNSTIFFENED (no transverse_stiffener_spacing_m stated), so kv = 5.0 per eq. 8.2.3.a and X = sqrt(kv*E/Fy) = 63.245553. The three Cv branches are bounded by 1.10X = 69.5701 and 1.37X = 86.6464. Exercises the INELASTIC branch: 1.10X = 69.5701 < h/ta = 78.0 <= 1.37X = 86.6464, so Cv = 1.10X/(h/ta) = 69.5701/78 = 0.891924468. Geometry chosen to sit well inside the band rather than near either bound, so the case fails if the branch selection shifts in either direction. Aa = 0.780*0.010 = 0.0078 m^2; V_R = 0.9*0.6*250e6*0.0078*0.891924468 = 939,196.4651 N. IMPORTANT, a limit of this spec rather than of the derivation: this rule's `latex` states only V_R = F_R(0.6 Fy Aa Cv) and does NOT state how Cv is determined, so the branch structure above was taken from the factor names (Cv_plastic_limit 1.1, Cv_inelastic_limit 1.37, Cv_elastic_coefficient 1.51) plus the standard form of the clause. The `latex` should be extended to carry the three Cv branches, because as written it omits the mechanism this rule exists to apply. ALSO: the out-of-scope refusal at h/ta >= 260 is NOT covered by any case here and cannot be — the case runner maps NotApplicable to an error by design, since a declined case has no ratio to compare. That refusal is pinned by the unit test `unstiffened_web_beyond_260_is_out_of_scope` in src/normatives/mx_cdmx_acero_2023/mod.rs. This set therefore covers the three COMPUTING branches only, and is complete only in that sense. This catches a mismatch between the implementation and the clause as understood here. It does NOT satisfy the two-source rule: it cannot detect a transcription error against the published norm. A published worked example should be added later as an ADDITIONAL case with its own inputs and citation, never as a replacement for this string. If such a source disagrees with these numbers, that is a finding rather than a test failure.
source: Second derivation, not a two-source case. Expected ratio recomputed by hand from the resistance factors recorded in this spec, independently of the Rust check. V_R = FR*0.6*Fy*Aa*Cv with FR = 0.9, Aa = h*ta, and Fy = 250 MPa, E = 200 GPa. The web is UNSTIFFENED (no transverse_stiffener_spacing_m stated), so kv = 5.0 per eq. 8.2.3.a and X = sqrt(kv*E/Fy) = 63.245553. The three Cv branches are bounded by 1.10X = 69.5701 and 1.37X = 86.6464. Exercises the INELASTIC branch: 1.10X = 69.5701 < h/ta = 78.0 <= 1.37X = 86.6464, so Cv = 1.10X/(h/ta) = 69.5701/78 = 0.891924468. Geometry chosen to sit well inside the band rather than near either bound, so the case fails if the branch selection shifts in either direction. Aa = 0.780*0.010 = 0.0078 m^2; V_R = 0.9*0.6*250e6*0.0078*0.891924468 = 939,196.4651 N. IMPORTANT, a limit of this spec rather than of the derivation: this rule's `latex` states only V_R = F_R(0.6 Fy Aa Cv) and does NOT state how Cv is determined, so the branch structure above was taken from the factor names (Cv_plastic_limit 1.1, Cv_inelastic_limit 1.37, Cv_elastic_coefficient 1.51) plus the standard form of the clause. The `latex` should be extended to carry the three Cv branches, because as written it omits the mechanism this rule exists to apply. ALSO: the out-of-scope refusal at h/ta >= 260 is NOT covered by any case here and cannot be — the case runner maps NotApplicable to an error by design, since a declined case has no ratio to compare. That refusal is pinned by the unit test `unstiffened_web_beyond_260_is_out_of_scope` in src/normatives/mx_cdmx_acero_2023/mod.rs. This set therefore covers the three COMPUTING branches only, and is complete only in that sense. This catches a mismatch between the implementation and the clause as understood here. It does NOT satisfy the two-source rule: it cannot detect a transcription error against the published norm. A published worked example should be added later as an ADDITIONAL case with its own inputs and citation, never as a replacement for this string. If such a source disagrees with these numbers, that is a finding rather than a test failure.
source: Second derivation, not a two-source case. Expected ratio recomputed by hand from the resistance factors recorded in this spec, independently of the Rust check. V_R = FR*0.6*Fy*Aa*Cv with FR = 0.9, Aa = h*ta, and Fy = 250 MPa, E = 200 GPa. The web is UNSTIFFENED (no transverse_stiffener_spacing_m stated), so kv = 5.0 per eq. 8.2.3.a and X = sqrt(kv*E/Fy) = 63.245553. The three Cv branches are bounded by 1.10X = 69.5701 and 1.37X = 86.6464. Exercises the ELASTIC branch: h/ta = 120.0 > 1.37X = 86.6464, and still below the 260 limit where the clause declines, so Cv = 1.51*kv*E/(Fy*(h/ta)^2) = 1.51*5.0*200e9/(250e6*14400) = 0.419444444. Geometry chosen between 1.37X and 260 so the elastic coefficient 1.51 is load-bearing in the expected value and the case does not stray into the refusal. Aa = 0.960*0.008 = 0.00768 m^2; V_R = 0.9*0.6*250e6*0.00768*0.419444444 = 434,880 N. IMPORTANT, a limit of this spec rather than of the derivation: this rule's `latex` states only V_R = F_R(0.6 Fy Aa Cv) and does NOT state how Cv is determined, so the branch structure above was taken from the factor names (Cv_plastic_limit 1.1, Cv_inelastic_limit 1.37, Cv_elastic_coefficient 1.51) plus the standard form of the clause. The `latex` should be extended to carry the three Cv branches, because as written it omits the mechanism this rule exists to apply. ALSO: the out-of-scope refusal at h/ta >= 260 is NOT covered by any case here and cannot be — the case runner maps NotApplicable to an error by design, since a declined case has no ratio to compare. That refusal is pinned by the unit test `unstiffened_web_beyond_260_is_out_of_scope` in src/normatives/mx_cdmx_acero_2023/mod.rs. This set therefore covers the three COMPUTING branches only, and is complete only in that sense. This catches a mismatch between the implementation and the clause as understood here. It does NOT satisfy the two-source rule: it cannot detect a transcription error against the published norm. A published worked example should be added later as an ADDITIONAL case with its own inputs and citation, never as a replacement for this string. If such a source disagrees with these numbers, that is a finding rather than a test failure.
source: Second derivation, not a two-source case. Expected ratio recomputed by hand from the resistance factors recorded in this spec, independently of the Rust check. V_R = FR*0.6*Fy*Aa*Cv with FR = 0.9, Aa = h*ta, and Fy = 250 MPa, E = 200 GPa. The web is UNSTIFFENED (no transverse_stiffener_spacing_m stated), so kv = 5.0 per eq. 8.2.3.a and X = sqrt(kv*E/Fy) = 63.245553. The three Cv branches are bounded by 1.10X = 69.5701 and 1.37X = 86.6464. Exercises the ELASTIC branch: h/ta = 120.0 > 1.37X = 86.6464, and still below the 260 limit where the clause declines, so Cv = 1.51*kv*E/(Fy*(h/ta)^2) = 1.51*5.0*200e9/(250e6*14400) = 0.419444444. Geometry chosen between 1.37X and 260 so the elastic coefficient 1.51 is load-bearing in the expected value and the case does not stray into the refusal. Aa = 0.960*0.008 = 0.00768 m^2; V_R = 0.9*0.6*250e6*0.00768*0.419444444 = 434,880 N. IMPORTANT, a limit of this spec rather than of the derivation: this rule's `latex` states only V_R = F_R(0.6 Fy Aa Cv) and does NOT state how Cv is determined, so the branch structure above was taken from the factor names (Cv_plastic_limit 1.1, Cv_inelastic_limit 1.37, Cv_elastic_coefficient 1.51) plus the standard form of the clause. The `latex` should be extended to carry the three Cv branches, because as written it omits the mechanism this rule exists to apply. ALSO: the out-of-scope refusal at h/ta >= 260 is NOT covered by any case here and cannot be — the case runner maps NotApplicable to an error by design, since a declined case has no ratio to compare. That refusal is pinned by the unit test `unstiffened_web_beyond_260_is_out_of_scope` in src/normatives/mx_cdmx_acero_2023/mod.rs. This set therefore covers the three COMPUTING branches only, and is complete only in that sense. This catches a mismatch between the implementation and the clause as understood here. It does NOT satisfy the two-source rule: it cannot detect a transcription error against the published norm. A published worked example should be added later as an ADDITIONAL case with its own inputs and citation, never as a replacement for this string. If such a source disagrees with these numbers, that is a finding rather than a test failure.
Resistencia a tensión — menor de fluencia (sección total) y fractura (sección neta)
Casos de prueba (2/2)
source: RETROFIT: derived from engine case ntc2023_tension_pass (Rt=0.90*345e6*9097e-6=2,824,619 N; Pu/Rt=0.177). Circular — the implementation is both the source and the thing under test, so this case can only catch a regression, never a wrong formula. Needs re-derivation for THESE inputs by an actor working from §5.3.1 alone, who has not seen check_tension. A worked example from another code (e.g. AISC 360-22 D.1) is not a substitute: it has its own geometry, forces and resistance factors, so it validates neither this ratio nor this clause.
source: RETROFIT: derived from engine case ntc2023_tension_fail (Rt=2,824,619 N; Pu/Rt=1.062). Circular for the same reason as tension_pass, and re-derivable in the same pass: same section and grade, only Pu differs.