写在前面的话
最近在的用Jupyter Notebook学习Python,顺便把以前fx-FD10Pro做的构件计算文件重写成Python,就当做练习了。
程序说明:
【a】已知Asp,M,求As
x=h_0-\sqrt{h_0^2-\dfrac{2\left[\gamma_{RE}M-f_y^{\prime}A_s^{\prime}(h_0-a_s^{\prime}\right]}{\alpha_1f_cb}}
\\should,\ x\le\xi_bh_0
\\if\ x\ge2a^{\prime},\ A_s=\dfrac{\alpha_1f_cbx+f_y^{\prime}A_s^{\prime}}{f_y}
\\if\ x<2a^{\prime},\ A_s=\dfrac{\gamma_{RE}M}{f_y(h-a_s-a_s^{\prime})}
【b】已知As,Asp,求Mu
x=\dfrac{f_yA_s-f_y^{\prime}A_s^{\prime}}{\alpha_1f_cb}
\\if\ ,x\ge2a^{\prime},\ M_u=[\alpha_1f_cbx(h_0-\dfrac{x}{2})+f_y^{\prime}A_s^{\prime}(h_0-a_s^{\prime})]/\gamma_{RE}
\\if\ ,x<2a^{\prime},\ M_u=f_yA_s(h-a_s-a_s^{\prime})/\gamma_{RE}
#coding=utf-8
#钢筋混凝土参数
def c_hrb():
global fcuk,HRB,Ec,fc,ft,ftk,Es,fy,fyp,fyk
global a1,epsilon_cu
fcuk=Ec=fc=ft=ftk=0.0
HRB=Es=fy=fyp=fyk=0.0
#矩形应力图系数a1,C50以下为1.0
a1=1.0
#正截面混凝土极限压应变epsilon_cu,C50以下为0.0033
epsilon_cu=0.0033
fcuk=int(input("C?30/35/40"))
if (fcuk==30):
Ec=30000
fc=14.3
ft=1.43
ftk=2.01
elif (fcuk==35):
Ec=31500
fc=16.7
ft=1.57
ftk=2.2
elif (fcuk==40):
Ec=32500
fc=19.1
ft=1.71
ftk=2.39
HRB=int(input("HRB?300/400/500"))
if (HRB==300):
Es=210000
fy=270
fyp=270
fyk=300
elif (HRB==400):
Es=200000
fy=360
fyp=360
fyk=400
elif (HRB==500):
Es=200000
fy=435
fyp=410
fyk=500
print('fcuk=',fcuk)
print('Ec=',Ec)
print('fc=',fc)
print('ft=',ft)
print('ftk=',ftk)
print('HRB=',HRB)
print('Es=',Es)
print('fy=',fy)
print('fyp=',fyp)
print('fyk=',fyk)
#函数结束
#1.受弯构件正截面
#矩形双筋(非抗震,gamma_RE=1.0;抗震,《混规》11.1.6,gamma_RE=0.75)
#【a】已知Asp,M,求As
def given_asp_m_solve_as():
import math
c_hrb()
gamma_RE=float(input("抗震0.75,gamma_RE="))
nsp=float(input("受压筋个数nsp="))
dsp=float(input("受压筋直径dsp="))
Asp=nsp*0.25*3.14*(dsp**2)
M=float(input("kN*m,M="))
h=float(input("mm,h="))
b=float(input("mm,b="))
ast=float(input("mm,受拉钢筋合力点至受拉边缘的距离ast="))
asp=float(input("mm,受压钢筋合力点至受压边缘的距离asp="))
h0=h-ast
#界限受压区高度ksi_b
ksi_b=round(0.8/(1 + fy / (Es*epsilon_cu)),3)
#受压区高度x
x=round(h0-math.sqrt(h0**2 - 2*(gamma_RE*M*(10**6) - fyp*Asp*(h0-asp)) / (a1*fc*b)),1)
print('h0=',h0)
print('ksi_b=',ksi_b)
print('x=',x)
if (x<=ksi_b*h0):
#弯曲破坏时,截面的延性取决于受压区高度的大小,受压区高度越小,截面转动就越大,延性就越好
print(x,"非抗震截面,<=ksi_b*h0",ksi_b*h0)
print(x,"抗震端截面,一级x<=0.25h0",0.25*h0)
print(x,"抗震端截面,二、三级x<=0.35h0",0.35*h0)
else:
#超筋梁,脆性破坏
print(x,">ksi_b*h0,截面过小!",ksi_b*h0)
if (x>=2*asp):
print(x,">=2*asp,混规6.2.10-4式",2*asp)
As=(a1*fc*b*x+fyp*Asp)/fy
else:
print(x,"<2*asp,混规6.2.14条",2*asp)
As=gamma_RE*M*(10**6) / (fy*(h - ast - asp))
As=round(As,1)
print('受拉筋面积As=',As)
rho=round(As/(b*h)*100,3)
print('另需满足最小配筋率;配筋率rho=',rho,'%')
#函数结束
#【b】已知As,Asp,求Mu
def given_as_asp_solve_mu():
import math
c_hrb()
gamma_RE=float(input("抗震0.75,gamma_RE="))
nst=float(input("受拉筋个数nst="))
dst=float(input("受拉筋直径dst="))
As=nst*0.25*3.14*(dst**2)
nsp=float(input("受压筋个数nsp="))
dsp=float(input("受压筋直径dsp="))
Asp=nsp*0.25*3.14*(dsp**2)
h=float(input("mm,h="))
b=float(input("mm,b="))
ast=float(input("mm,受拉钢筋合力点至受拉边缘的距离ast="))
asp=float(input("mm,受压钢筋合力点至受压边缘的距离asp="))
h0=h-ast
#界限受压区高度ksi_b
ksi_b=round(0.8/(1 + fy / (Es*epsilon_cu)),3)
#受压区高度x
x=(fy*As-fyp*Asp)/(a1*fc*b)
print('h0=',h0)
print('ksi_b=',ksi_b)
print('x=',x)
if (x<=ksi_b*h0):
#弯曲破坏时,截面的延性取决于受压区高度的大小,受压区高度越小,截面转动就越大,延性就越好
print(x,"非抗震截面,<=ksi_b*h0",ksi_b*h0)
print(x,"抗震端截面,一级x<=0.25h0",0.25*h0)
print(x,"抗震端截面,二、三级x<=0.35h0",0.35*h0)
else:
x=ksi_b*h0
print(x,"取x=ksi_b*h0",ksi_b*h0)
if (x>=2*asp):
print(x,">=2*asp,混规6.2.10-4式",2*asp)
Mu=(a1*fc*b*x*(h0-x/2) + fyp*Asp*(h0-asp)) / gamma_RE/(10**6)
else:
print(x,"<2*asp,混规6.2.14条",2*asp)
Mu=fy*As*(h - ast - asp) / gamma_RE/(10**6)
Mu=round(Mu,3)
print('极限抗弯承载力Mu=',Mu)
#函数结束