|
|
|
|
|
|
|
|
| clear; clc;
|
|
|
|
|
|
|
|
|
|
|
| fc = 4000;
|
| fy = 60000;
|
|
|
|
|
| b = 12;
|
| h = 20;
|
| cover = 2.5;
|
|
|
|
|
| n_bars1 = 4;
|
| a_bar = 0.79;
|
|
|
|
|
|
|
| n_bars2 = 0;
|
| spacing = 0;
|
|
|
|
|
| show_output = true;
|
|
|
|
|
|
|
| if show_output
|
| disp(' ');
|
| disp('--- CALCULATION OUTPUT ---');
|
|
|
|
|
| fc_ksi = fc / 1000;
|
| fy_ksi = fy / 1000;
|
| Es_ksi = 29000;
|
| E_cu = 0.003;
|
|
|
|
|
| beta1 = 0.85;
|
| if fc > 4000
|
| beta1 = 0.85 - 0.05 * ((fc - 4000) / 1000);
|
| end
|
| beta1 = max(beta1, 0.65);
|
|
|
|
|
| limit_val = 3 * sqrt(fc);
|
| As_min_factor = max(limit_val, 200);
|
|
|
|
|
| if n_bars2 == 0
|
| layer_type = 'Single Layer Singly Reinforced';
|
|
|
|
|
| d = h - cover;
|
| As = n_bars1 * a_bar;
|
|
|
| disp(['1. Effective depth (d): ', num2str(d), ' in']);
|
| disp([' Area of steel (A_s): ', num2str(As), ' in^2']);
|
|
|
|
|
| T = As * fy_ksi;
|
| disp(['2. Tension force (T, assuming yield): ', num2str(T), ' kips']);
|
|
|
| a = T / (0.85 * fc_ksi * b);
|
| c = a / beta1;
|
| disp(['3. Compression block depth (a): ', num2str(a), ' in']);
|
| disp([' Neutral axis depth (c): ', num2str(c), ' in']);
|
|
|
|
|
| eps_y = fy_ksi / Es_ksi;
|
| eps_s = ((d - c) / c) * E_cu;
|
| disp(['4. Yield strain (eps_y): ', num2str(eps_y)]);
|
| disp([' Steel strain (eps_s): ', num2str(eps_s)]);
|
|
|
| if eps_s >= eps_y
|
| disp(' Status: Steel yielded. Assumption OK.');
|
| else
|
| disp(' Status: Steel did NOT yield. Assumption failed.');
|
| end
|
|
|
|
|
| Mn = T * (d - a/2) / 12;
|
| disp(['5. Nominal Moment (M_n): ', num2str(Mn), ' kip-ft']);
|
|
|
|
|
| As_min = (As_min_factor / fy) * b * d;
|
| disp(['6. Minimum steel (A_s,min): ', num2str(As_min), ' in^2']);
|
| if As >= As_min
|
| disp(' Status: A_s >= A_s,min. OK.');
|
| else
|
| disp(' Status: A_s < A_s,min. Does not meet minimum requirement.');
|
| end
|
|
|
|
|
| eps_t = eps_s;
|
| if eps_t >= 0.005
|
| phi = 0.90;
|
| elseif eps_t <= 0.002
|
| phi = 0.65;
|
| else
|
| phi = 0.65 + (eps_t - 0.002) * (250/3);
|
| end
|
|
|
| phi_Mn = phi * Mn;
|
| disp(['7. Reduction factor (phi): ', num2str(phi)]);
|
| disp(['8. Design Moment (phi*M_n): ', num2str(phi_Mn), ' kip-ft']);
|
|
|
| else
|
| layer_type = 'Double Layer Singly Reinforced';
|
|
|
|
|
| As1 = n_bars1 * a_bar;
|
| As2 = n_bars2 * a_bar;
|
| As = As1 + As2;
|
|
|
| dist1 = cover;
|
| dist2 = cover + spacing;
|
|
|
|
|
| g = (As1 * dist1 + As2 * dist2) / As;
|
| d = h - g;
|
| d_t = h - cover;
|
|
|
| disp(['1. Centroid distance (g): ', num2str(g), ' in']);
|
| disp([' Effective depth (d): ', num2str(d), ' in']);
|
| disp([' Area of steel (A_s): ', num2str(As), ' in^2']);
|
|
|
|
|
| T = As * fy_ksi;
|
| a = T / (0.85 * fc_ksi * b);
|
| c = a / beta1;
|
| disp(['2. Tension force (T, assuming yield): ', num2str(T), ' kips']);
|
| disp(['3. Compression block depth (a): ', num2str(a), ' in']);
|
| disp([' Neutral axis depth (c): ', num2str(c), ' in']);
|
|
|
|
|
| eps_y = fy_ksi / Es_ksi;
|
| eps_s = ((d - c) / c) * E_cu;
|
| disp(['4. Yield strain (eps_y): ', num2str(eps_y)]);
|
| disp([' Steel strain (eps_s): ', num2str(eps_s)]);
|
|
|
| if eps_s < eps_y
|
| disp(' Status: Over-reinforced section. Assumption Failed.');
|
| disp(' Solving exact c using quadratic method...');
|
|
|
|
|
| A_quad = 0.85 * fc_ksi * b * beta1;
|
| B_quad = As * Es_ksi * E_cu;
|
| C_quad = -1 * As * Es_ksi * E_cu * d;
|
|
|
| roots_c = roots([A_quad, B_quad, C_quad]);
|
| c = max(roots_c(roots_c > 0));
|
| a = beta1 * c;
|
|
|
| disp([' Exact Neutral axis (c): ', num2str(c), ' in']);
|
| disp([' Exact Compression block (a): ', num2str(a), ' in']);
|
|
|
| T = As * Es_ksi * ((d - c)/c) * E_cu;
|
| disp([' Exact Tension force (T): ', num2str(T), ' kips']);
|
| else
|
| disp(' Status: Steel yielded. Assumption OK.');
|
| end
|
|
|
|
|
| Mn = T * (d - a/2) / 12;
|
| disp(['5. Nominal Moment (M_n): ', num2str(Mn), ' kip-ft']);
|
|
|
|
|
| As_min = (As_min_factor / fy) * b * d;
|
| disp(['6. Minimum steel (A_s,min): ', num2str(As_min), ' in^2']);
|
| if As >= As_min
|
| disp(' Status: A_s >= A_s,min. OK.');
|
| else
|
| disp(' Status: A_s < A_s,min. Does not meet minimum requirement.');
|
| end
|
|
|
|
|
| eps_t = ((d_t - c) / c) * E_cu;
|
| if eps_t >= 0.005
|
| phi = 0.90;
|
| elseif eps_t <= 0.002
|
| phi = 0.65;
|
| else
|
| phi = 0.65 + (eps_t - 0.002) * (250/3);
|
| end
|
|
|
| phi_Mn = phi * Mn;
|
| disp(['7. Extreme tension strain (eps_t): ', num2str(eps_t)]);
|
| disp([' Reduction factor (phi): ', num2str(phi)]);
|
| disp(['8. Design Moment (phi*M_n): ', num2str(phi_Mn), ' kip-ft']);
|
| end
|
|
|
| disp(' ');
|
| disp(['CONCLUSION: The calculated section is [', layer_type, '].']);
|
| end
|
|
|