Tension Stiffening
Tension Stiffening
Tension Stiffening
fig, ax = plt.subplots()
plt.plot(e_cc,B,label='B')
plt.xlabel('$\epsilon_{cc}$')
plt.title('Rectangular Stress Block Constants vs $\epsilon_{cc}$')
plt.plot(e_cc,a,label='a')
plt.legend()
plt.grid()
file:///Users/benjaminklassen/Downloads/TensionStiffening.html 1/8
19/07/2024, 02:44 TensionStiffening
## Section Properties
d_bot = 720
d_top = 50
b = 400
h = 800
Ag = b*h
file:///Users/benjaminklassen/Downloads/TensionStiffening.html 2/8
19/07/2024, 02:44 TensionStiffening
yg = h/2
Ig = 1/12*b*h**3
## Prestressed Tendons
A_RO = 0.015
B_RO = 119
C_RO = 18
Ep = 200000 #MPa
fpu = 1860 #MPa
fpy = 0.9*fpu
db = 16 #mm
## Concrete
f_c = -40
Ec = 4500*np.sqrt(-f_c)
f_t=0.6*np.sqrt(-f_c)
e_t = f_t/Ec # Approximate for strain at rupture
print(f'Ec: {Ec:1.2f} MPa')
print(f'f\'t: {f_t:1.2f} MPa')
print(f'e_t: {e_t:1.3e}')
## Transformation
n_p = Ep/Ec
i) Case One
In [5]: # Variables that change
Ap = 1000 #mm^2
fpo = 1350 #MPa
del_ep = fpo/Ep
e_cc = np.linspace(-0.00043,-0.0035,num)
B = (4-e_cc/e_c)/(6-2*(e_cc-e_c))
a = 1/B*(e_cc/e_c-(e_cc/e_c)**2/3)
In [6]: ## Transformations
Ac = Ag - Ap
Ap_tr = n_p*Ap
A_tr = Ac + Ap_tr
y_tr = (Ag*yg +(n_p-1)*(Ap*d_bot))/A_tr
I_tr = (Ig + Ag*(yg-y_tr)**2 + (n_p-1)*Ap*(d_bot-y_tr)**2)
file:///Users/benjaminklassen/Downloads/TensionStiffening.html 3/8
19/07/2024, 02:44 TensionStiffening
## To find Mcr
e_cen = (N - N_0) / (Ec * A_tr)
f_cen = e_cen * Ec
M_cr = (f_t - f_cen) * I_tr / (h - y_tr) / 1000**2 + M_0
Phi_zero_mom = (0 - M_0 * 1000**2) / (Ec * I_tr) # rad/mm
Phi_M_cr = (M_cr - M_0) * 1000**2 / (Ec * I_tr)
## Moment-curvature
phi_1 = np.linspace(Phi_zero_mom, Phi_M_cr, 10)
M_1 = phi_1 * Ec * I_tr / 1000**2 + M_0
def f(c):
# Strains
e_p = e_conc*(c-d_bot)/c+del_ep
e_c_bot = e_conc*(c-d_bot)/c
#Stresses
f_p = Ep*e_p*(A_RO+(1-A_RO)/(1+(B_RO*e_p)**C_RO)**(1/C_RO))
f_c_bot=e_c_bot*Ec
# Stress Limits
if f_c_bot>f_t:
Ac_eff = ((h-d_bot)+7.5*db)*b
pp = Ap/Ac_eff
alpha_1 = 0.7 #Tendons Only
alpha_2 = 1 # Short-term load assumed
fc1 = alpha_1*alpha_2*f_t/(1+np.sqrt(500*e_c_bot))
fc2 = pp*(fpy-f_p)
f_c_bot = max(min(fc1,fc2),0)
if f_p > fpy:
f_p = fpy
# Forces
Cc = (alpha*f_c)*(beta*c)*b
file:///Users/benjaminklassen/Downloads/TensionStiffening.html 4/8
19/07/2024, 02:44 TensionStiffening
C = Cc
T=Tp+Tc
return C+T
c[i] = brentq(f,1,800)
# Strains
ep[i] = e_conc*(c[i]-d_bot)/c[i]+del_ep
ec_bot[i] = e_conc*(c[i]-d_bot)/c[i]
if Ap==0:
ep[i]=0
#Stresses
fp[i] = Ep*ep[i]*(A_RO+(1-A_RO)/(1+(B_RO*ep[i])**C_RO)**(1/C_RO))
fc_bot[i]=ec_bot[i]*Ec
if fp[i] > fpy: #fpy used with tension stiffening instead of fpu
fp[i] = fpy
# Stress Limits
if fc_bot[i]>f_t:
Ac_eff = ((h-d_bot)+7.5*db)*b
pp = Ap/Ac_eff
alpha_1 = 0.7 #Tendons Only
alpha_2 = 1 # Short-term load assumed
fc1 = alpha_1*alpha_2*f_t/(1+np.sqrt(500*ec_bot[i]))
fc2 = pp*(fpy-fp[i])
fc_bot[i] = max(min(fc1,fc2),0)
# Forces
Cc[i] = (alpha*f_c)*(beta*c[i])*b
C[i] = (Cc[i])/1000
T[i]=(Tp[i]+Tc[i])/1000
# Tabulated Values
col_names = ['e_cc', 'c (mm)','a (mm)', 'B (mm)', 'ep','ec_bot', 'fc_bot','f
'T (kN)', 'Tp', 'Tc', 'C (kN)']
table = pd.DataFrame(list(zip(e_cc, c, a, B, ep, ec_bot,fc_bot, fp,
T,Tp/1000,Tc/1000,C)),columns=col_names)
print(table)
file:///Users/benjaminklassen/Downloads/TensionStiffening.html 5/8
19/07/2024, 02:44 TensionStiffening
phi_1 = np.hstack((phi_1,phi))
M_1 = np.hstack((M_1,M))
Mn = M_1.max()
print(f'Nominal Moment Capacity: {Mn:1.2f} kNm')
fig, ax = plt.subplots()
plt.plot(phi_1,M_1,label='i)')
plt.xlabel('Curvature ($\phi$)')
plt.ylabel('Moment (kNm)')
plt.title('Moment vs Curvature')
plt.grid()
file:///Users/benjaminklassen/Downloads/TensionStiffening.html 6/8
19/07/2024, 02:44 TensionStiffening
3.693359432366014e-06
In [12]: plt.plot(ec_bot,fc1,label='fc1')
plt.plot(ec_bot,fc2,label='fc2')
plt.legend()
file:///Users/benjaminklassen/Downloads/TensionStiffening.html 7/8
19/07/2024, 02:44 TensionStiffening
In [ ]:
file:///Users/benjaminklassen/Downloads/TensionStiffening.html 8/8