Document 1
Document 1
2 clear;
3 close all;
4 % NAME MUBAREK UMER
5 % ID NUMBER 8457/17
6 % MASTERS OF SCIENCE IN CIVIL ENGINEERING (STRUCTURAL ENGINEERRING)
7 % MOMENT- CURVATURE CURVE FOR RC BEAM ACCORDING TO EBCS EN 1992
8 function Mphi_RC_EBCS_EN()
9
10 % ---- User Inputs ----
11 fck = input('fck [MPa]: ');
12 fyk = input('fyk [MPa]: ');
13 Es = 200e3; % Steel modulus (MPa)
14 Ecm = 22*(fck/10)^0.3*1e3; % Eurocode modulus for concrete
15 eps_cu = 0.0035;
16 eps_0 = 0.002;
17
18 b = input('Width b [mm]: ');
19 h = input('Height h [mm]: ');
20 cover = input('Concrete cover [mm]: ');
21
22 % Tension Reinforcement
23 n_t = input('Number of tension bars: ');
24 phi_t = input('Tension bar diameter [mm]: ');
25 As_t = n_t * pi * phi_t^2 / 4;
26 d = h - cover - phi_t/2;
27
28 % Doubly Reinforced Section
29 doubly = input('Is the section doubly reinforced? (1 = Yes, 0 = No): ');
30 if doubly == 1
31 n_c = input('Number of compression bars: ');
32 phi_c = input('Compression bar diameter [mm]: ');
33 As_c = n_c * pi * phi_c^2 / 4;
34 d_prime = cover + phi_c/2;
35 else
36 As_c = 0;
37 d_prime = 0;
38 end
39
40 % Axial Load
41 consider_N = input('Include axial load? (1 = Yes, 0 = No): ');
42 if consider_N
43 N_axial = input('Axial load N [kN] (+ve = compression): ') * 1e3;
44 else
45 N_axial = 0;
46 end
47
48 % Tension Stiffening & Strain Hardening
49 include_ts = input('Include tension stiffening? (1 = Yes, 0 = No): ');
50 include_sh = input('Include strain hardening? (1 = Yes, 0 = No): ');
51
52 % Cracking moment
53 fctm = 0.3 * fck^(2/3);
54 I_g = b * h^3 / 12;
55 M_cr = fctm * I_g / (h/2);
56 phi_cr = M_cr / (Ecm * I_g);
57
58 % Loop setup
59 eps_c_list = linspace(1e-6, eps_cu, 50);
60 phi = zeros(size(eps_c_list));
61 M = zeros(size(eps_c_list));
62
63 for i = 1:length(eps_c_list)
64 eps_c = eps_c_list(i);
65 c_guess = h / 2;
66 options = optimset('Display','off');
67
68 c = fsolve(@(c) equilibriumFull(c, eps_c, fck, eps_0, eps_cu, ...
69 b, d, As_t, As_c, d_prime, fyk, Es, N_axial, include_ts, fctm), c_guess, options);
70
71 eps_s = eps_c * (d - c) / c;
72 eps_sc = doubly * eps_c * (c - d_prime) / c;
73
74 % Steel tension
75 if include_sh
76 fs_t = bilinearSteel(eps_s, Es, fyk, 0.01);
77 else
78 fs_t = min(Es * eps_s, fyk);
79 end
80
81 % Steel compression
82 if doubly
83 if include_sh
84 fs_c = bilinearSteel(eps_sc, Es, fyk, 0.01);
85 else
86 fs_c = min(Es * eps_sc, fyk);
87 end
88 else
89 fs_c = 0;
90 end
91
92 % Concrete stress block
93 [Cc, Mc] = concreteForceSimple(c, eps_c, fck, eps_0, eps_cu, b, d, 100);
94
95 % Tension stiffening (approx)
96 if include_ts && eps_s > 0
97 fct_eff = max(fctm * (1 - eps_s / 0.002), 0);
98 T_ts = fct_eff * As_t;
99 else
100 T_ts = 0;
101 end
102
103 Mt = As_t * fs_t * (d - c);
104 Mcs = As_c * fs_c * (c - d_prime) * doubly;
105 M(i) = (Mc + Mt + Mcs + T_ts * (d - c)) / 1e6;
106 phi(i) = eps_c / c;
107 end
108
109 % Plot
110 figure;
111 plot(phi, M, 'b', 'LineWidth', 2); hold on;
112 plot(phi_cr, M_cr / 1e6, 'ro', 'MarkerSize', 8);
113 xlabel('Curvature [mm^{-1}]'); ylabel('Moment [kN·m]');
114 title('Moment-Curvature Curve (EBCS-EN)');
115 legend('M-φ Curve','Cracking Moment','Location','southeast');
116 grid on;
117 end
118
119 function R = equilibriumFull(c, eps_c, fck, eps_0, eps_cu, b, d, As_t, As_c, d_prime, fyk, Es, N,
include_ts, fctm)
120 [Cc, ~] = concreteForceSimple(c, eps_c, fck, eps_0, eps_cu, b, d, 100);
121 eps_s = eps_c * (d - c) / c;
122 eps_sc = eps_c * (c - d_prime) / c;
123
124 fs_t = min(Es * eps_s, fyk);
125 fs_c = min(Es * eps_sc, fyk);
126
127 if include_ts && eps_s > 0
128 fct_eff = max(fctm * (1 - eps_s / 0.002), 0);
129 T_ts = fct_eff * As_t;
130 else
131 T_ts = 0;
132 end
133
134 R = Cc + As_c * fs_c - As_t * fs_t - T_ts - N;
135 end
136
137 function [C, M] = concreteForceSimple(c, eps_c_max, fck, eps_0, eps_cu, b, d, n)
138 y = linspace(0, c, n); dy = c / (n-1); C = 0; M = 0;
139 for i = 1:n
140 eps_c = eps_c_max * y(i) / c;
141 if eps_c <= eps_0
142 sigma = fck * (2*(eps_c/eps_0) - (eps_c/eps_0)^2);
143 else
144 sigma = fck * (1 - 0.15 * (eps_c - eps_0) / (eps_cu - eps_0));
145 end
146 dC = sigma * b * dy;
147 C += dC;
148 M += dC * (d - y(i));
149 end
150 end
151
152 function fs = bilinearSteel(eps, Es, fyk, eps_u)
153 if abs(eps) <= fyk / Es
154 fs = Es * eps;
155 else
156 % Strain hardening past yield
157 fsh = fyk + 0.01 * Es * (abs(eps) - fyk / Es);
158 fs = sign(eps) * min(fsh, 1.15 * fyk);
159 end
160 end