Skip to content

Instantly share code, notes, and snippets.

@jsb2505
Created November 23, 2023 15:54
Show Gist options
  • Save jsb2505/393451bd385ceeccfc59fce6cc5c02df to your computer and use it in GitHub Desktop.
Save jsb2505/393451bd385ceeccfc59fce6cc5c02df to your computer and use it in GitHub Desktop.
Concrete Bending formulas
/**Design concrete moment of resistance in kNm from effective area, in kNm.
Ref: EC2 §Fig 3.5 Fig 6.1 (and first principles)
*/
Get_M_Rd_kNm = LAMBDA(f_ck, b_w_mm, d_mm,
// (2091/12500) is the more exact coefficient than 0.167
(2091/12500) * f_ck * b_w_mm * d_mm^2 / 10^6
);
/**The lever arm of the tensile steel or compression concrete about the neutral axis, in mm.
Ref: EC2 §Fig 3.5 Fig 6.1 (and first principles)
*/
Get_Lever_Arm = LAMBDA(M_Rd, M_Ed, d_mm,
LET(
/*
(2091/12500) is the more exact coefficient than 0.167.
K_0 is limited to 0.167 which occurs when M_Ed > M_Rd.
*/
K_0, (2091/12500) * MIN(M_Ed / M_Rd, 1),
MIN(
d_mm * (0.5 + SQRT(0.25 - 3 * K_0 / 3.4)),
0.95 * d_mm
)
)
);
/**K_0 is used to find the lever arm and is limited to 0.167 max.
Ref: EC2 §Fig 3.5, Fig 6.1 (and first principles)
*/
Get_K_0 = LAMBDA(M_Ed_kNm, b_w_mm, d_mm, f_ck,
MIN(M_Ed_kNm *10^6 / (b_w_mm * d_mm^2 * f_ck), 2091/12500)
);
/**Minimum area of longitudinal tension reinforcement, in mm^2/m.
Ref: EC2 §9.2.1.1(1)(9.1N)
*/
Get_A_s_min = LAMBDA(f_ck, d_mm, [f_yk],
LET(
f_ctm, Get_f_ctm(f_ck),
_f_yk, IF(ISOMITTED(f_yk), 500, f_yk),
coeff, MAX(
0.26 * (f_ctm / _f_yk),
0.0013
),
coeff * d_mm * 1000
)
);
/**Maximum area of longitudinal tension or compression reinforcement, in mm^2/m.
Ref: EC2 §9.2.1.1(3)
*/
Get_A_s_max = LAMBDA(h_mm,
0.04 * h_mm * 1000
);
/**Area of longitudinal tensile reinforcement required, in mm^2/m.
Ref: EC2 §Fig 3.5, Fig 6.1 (and first principles)
*/
Get_A_s_req_t = LAMBDA(M_Rd_kNm, M_Ed_kNm, d_mm, b_w_mm, [As_req_compression_per_m], [f_yk],
LET(
As_req_c, IF(ISOMITTED(As_req_compression_per_m), 0, As_req_compression_per_m),
_f_yk, IF(ISOMITTED(f_yk), 500, f_yk),
f_yd, Get_f_yd(_f_yk),
z, Get_Lever_Arm(M_Rd_kNm, M_Ed_kNm, d_mm),
IF(As_req_c > 0,
(1000 / b_w_mm) * M_Rd_kNm * 10^6 / (f_yd * z) + As_req_c,
(1000 / b_w_mm) * M_Ed_kNm * 10^6 / (f_yd * z)
)
)
);
/**Area of longitudinal compressive reinforcement required, in mm^2/m.
Ref: EC2 §Fig 3.5, Fig 6.1 (and first principles)
*/
Get_A_s_req_c = LAMBDA(M_Rd_kNm, M_Ed_kNm, d_mm, d_2_mm, b_w_mm, [f_yk],
LET(
_f_yk, IF(ISOMITTED(f_yk), 500, f_yk),
f_yd, Get_f_yd(_f_yk),
z, d_mm - d_2_mm,
MAX(
(1000 / b_w_mm) * ((M_Ed_kNm - M_Rd_kNm)* 10^6) / (f_yd * z),
0
)
)
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment