| |
|
| |
|
| | clear; clc;
|
| |
|
| | disp('--- Simple RC-SRP Calculator ---');
|
| | disp('Follow the steps to enter the given variables.');
|
| |
|
| |
|
| | fc = input('Enter concrete compressive strength f_c'' (psi): ');
|
| | fy = input('Enter steel yield strength f_y (psi): ');
|
| | b = input('Enter beam width b (in): ');
|
| | h = input('Enter beam height h (in): ');
|
| | cover = input('Enter cover distance to extreme tension layer (in): ');
|
| |
|
| | n_bars = input('Enter total number of bars: ');
|
| | a_bar = input('Enter area per bar (in^2): ');
|
| |
|
| |
|
| | double_layer_ans = input('Is this a double layer reinforcement? (yes/no): ', 's');
|
| |
|
| | if strcmpi(double_layer_ans, 'yes')
|
| | layer_type = 'Double Layer Singly Reinforced';
|
| | n_bars1 = input('Enter number of bars in layer 1 (bottom): ');
|
| | n_bars2 = input('Enter number of bars in layer 2 (top): ');
|
| | spacing = input('Enter spacing between layers (in): ');
|
| | else
|
| | layer_type = 'Single Layer Singly Reinforced';
|
| | end
|
| |
|
| |
|
| | show_output = input('Ready to calculate and show the output? (yes/no): ', 's');
|
| |
|
| | if strcmpi(show_output, 'yes')
|
| | disp(' ');
|
| | disp('--- CALCULATION OUTPUT ---');
|
| |
|
| |
|
| | disp(['Type of section: ', layer_type]);
|
| | disp(' ');
|
| |
|
| |
|
| | 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 strcmpi(double_layer_ans, 'no')
|
| |
|
| | d = h - cover;
|
| | As = n_bars * a_bar;
|
| |
|
| | disp(['1. Effective depth (d): ', num2str(d), ' in']);
|
| | disp(['2. Area of steel (A_s): ', num2str(As), ' in^2']);
|
| |
|
| |
|
| | T = As * fy_ksi;
|
| | disp(['3. Tension force (T, assuming yield): ', num2str(T), ' kips']);
|
| |
|
| | a = T / (0.85 * fc_ksi * b);
|
| | c = a / beta1;
|
| | disp(['4. 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(['5. 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(['6. Nominal Moment (M_n): ', num2str(Mn), ' kip-ft']);
|
| |
|
| |
|
| | As_min = (As_min_factor / fy) * b * d;
|
| | disp(['7. Minimum steel (A_s,min): ', num2str(As_min), ' in^2']);
|
| | if As >= As_min
|
| | disp(' Status: A_s >= A_s,min. OK.');
|
| | 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(['8. Reduction factor (phi): ', num2str(phi)]);
|
| | disp(['9. Design Moment (phi*M_n): ', num2str(phi_Mn), ' kip-ft']);
|
| |
|
| | else
|
| |
|
| | 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(['2. 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(['3. Tension force (T, assuming yield): ', num2str(T), ' kips']);
|
| | disp(['4. 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(['5. 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(['6. Nominal Moment (M_n): ', num2str(Mn), ' kip-ft']);
|
| |
|
| |
|
| | As_min = (As_min_factor / fy) * b * d;
|
| | disp(['7. Minimum steel (A_s,min): ', num2str(As_min), ' in^2']);
|
| | if As >= As_min
|
| | disp(' Status: A_s >= A_s,min. OK.');
|
| | 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(['8. Extreme tension strain (eps_t): ', num2str(eps_t)]);
|
| | disp([' Reduction factor (phi): ', num2str(phi)]);
|
| | disp(['9. Design Moment (phi*M_n): ', num2str(phi_Mn), ' kip-ft']);
|
| | end
|
| | else
|
| | disp('Calculation stopped. Have a great day!');
|
| | end
|
| |
|