| |
|
| |
|
| |
|
| |
|
| | 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
|
| |
|