📄 column.f90
字号:
program main
implicit none
integer i,c,s
real b,h,l_0,da_m_j,da_n_j,c_grade,s_grade,da_r_a,h_0,kersei,kersei_jg,&
da_a_g,da_r_g,da_r_g_pie,da_a_g_pie,da_e_h,da_e_g,e_0,alpha_e,da_i_h,eta,e,e_pie,&
da_a_g1,da_a_g2,x,sigerma_g,da_n_u,da_n_u1,da_n_u2,da_a,da_b,da_c,neimna,mu_pie,fei
real guma_b,guma_c,guma_s,a,a_pie,e_g
parameter(guma_b=0.95,guma_c=1.25,guma_s=1.25,a=40.0,a_pie=40.0,e_g=200000.0)
print*
print*,"说明:"
print*,"本程序用于矩形截面偏心受压构件对称配筋的设计和复核以及不对称配筋的复核。"
print*,"本程序有文件支持,但无需建立数据文件,请按屏幕提示输入数据,并注意单位。"
print*,"本程序可在此文件同目录上自动生成下列文件:"
print*,"设计数据文件“design.dat”,设计结果文件“design.out”;"
print*,"复核数据文件“verify.dat”,复核结果文件“verify.out”。"
print*
!询问要进行截面设计还是进行截面复核
print*,"开始:"
print*,"要进行截面设计,请输入1;要进行截面复核,请输入2:"
read*,i
do while(i/=1 .and. i/=2)
print*,"输入错误,请重新输入:"
read*,i
enddo
!进行截面设计
if(i==1)then
open(11,file="design.dat")
open(12,file="design.out")
print*,"请在一行上依次输入下列已知条件:"
print*,"截面宽度b(mm),截面高度h(mm),柱计算高度l0(mm),轴力设计值Nj(kN),"
print*,"弯矩设计值Mj(kN·m),混凝土标号(如15),钢筋等级(1,2,3):"
read*,b,h,l_0,da_n_j,da_m_j,c,s
do while(mod(b,10.0)/=0.0 .or. mod(h,10.0)/=0.0 .or. c/=15 .and. c/=20 .and. c/=25 .and. c/=30 &
.and. c/=40 .and. c/=50 .and. c/=60 .or. s/=1 .and. s/=2 .and. s/=3)
print*,"请检查下列错误:截面宽度不是10的倍数,截面高度不是10的倍数,"
print*,"混凝土标号输入有误,钢筋等级输入有误。"
print*,"请重新输入已知条件:"
read*,b,h,l_0,da_n_j,da_m_j,c,s
enddo
write(11,*)
write(11,*)"已知:"
write(11,*)"对称配筋,截面宽度b=",b,"mm,截面高度h=",h,"mm,柱计算高度l0=",l_0,"mm,轴力设计值Nj=",da_n_j,"(kN),"
write(11,*)"弯矩设计值Mj=",da_m_j,"(kN·m),混凝土标号C",c,",钢筋等级",s,"级。"
write(11,*)
write(11,*)"要求:"
write(11,*)"受拉钢筋面积Ag,受压钢筋面积Ag'。"
call sub()
write(12,*)"混凝土标号C",c,",轴心抗压设计强度Ra=",da_r_a,"N/(mm·mm),",&
"弹性模量Eh=",da_e_h,"N/(mm·mm),钢筋等级",s,"级,钢筋受拉设计强度Rg=",da_r_g,"N/(mm·mm),",&
"钢筋受压设计强度Rg'",da_r_g_pie,"N/(mm·mm),受压区高度界限系数ξjg=",kersei_jg,",",&
"钢筋弹性模量Eh=",da_e_h,"N/(mm·mm)。"
h_0=h-a
kersei=(guma_c*da_n_j*10**3)/(guma_b*b*da_r_a*h_0)
x=kersei*h_0
e_0=da_m_j*10**6/(da_n_j*10**3)
if(e_0/h>=1)then
alpha_e=0.22
else
alpha_e=0.1/(0.3+e_0/h)+0.143
endif
da_i_h=b*h**3/12.0
if(l_0/h<=8)then
eta=1.0
else
eta=1/(1-(guma_c*da_n_j*10**3*l_0**2)/(10*alpha_e* da_e_h*da_i_h*guma_b))
endif
e=eta*e_0+h/2.0-a
e_pie=eta*e_0-h/2.0+a_pie
write(*,*)
write(12,*)
write(*,*)"偏心距e0=",e_0,"偏心距e=",e,",偏心距增大系数η=",eta,",相对受压区高度ξ=",kersei,"。"
write(12,*)"偏心距e0=",e_0,",偏心距增大系数η=",eta,",相对受压区高度ξ=",kersei,"。"
if(kersei<=kersei_jg)then !大偏心
if(x>=2*a_pie)then
da_a_g=(da_n_j*10**3*e-guma_b*da_r_a*b*h_0**2*kersei*(1-0.5*kersei)/guma_c)*guma_s &
/(guma_b*da_r_g_pie*(h_0-a_pie))
else
da_a_g1=(guma_s*da_n_j*10**3*e_pie)/(guma_b*da_r_g*(h_0-a_pie))
x=h_0-sqrt(h_0**2-(2.0*guma_c*da_n_j*10**3*e)/(guma_b*da_r_a*b))
da_a_g2=(guma_b*da_r_a*b*x/guma_c-da_n_j*10**3)/(guma_b*da_r_g/guma_s)
da_a_g=min(da_a_g1,da_a_g2)
endif
write(*,*)
write(12,*)
write(*,*)"受拉钢筋面积Ag和受压钢筋面积Ag'均为:",da_a_g,"mm·mm。"
write(12,*)"受拉钢筋面积Ag和受压钢筋面积Ag'均为:",da_a_g,"mm·mm。"
else !小偏心
kersei=(da_n_j*10**3-guma_b*da_r_a*b*h_0*kersei_jg/guma_c) &
/((da_n_j*10**3*e-0.45*guma_b*da_r_a*b*h_0**2/guma_c)/((0.9-kersei_jg)*(h_0-a_pie))&
+guma_b*da_r_a*b*h_0/guma_c)+kersei_jg
write(*,*)"重新计算后的相对受压区高度ξ=",kersei
sigerma_g=0.003*da_e_g*(0.9/kersei-1)
da_a_g=guma_s*(da_n_j*10**3-guma_b*da_r_a*b*h_0*kersei/guma_c)/(guma_b*(da_r_g_pie-sigerma_g))
write(*,*)
write(*,*)"受拉钢筋面积Ag和受压钢筋面积Ag'均为:",da_a_g
write(12,*)
write(12,*)"受拉钢筋面积Ag和受压钢筋面积Ag'均为:",da_a_g
endif
!进行截面复核
else
open(21,file="verify.dat")
open(22,file="verify.out")
print*,"请在一行上依次输入下列已知条件:"
print*,"截面宽度b(mm),截面高度h(mm),柱计算高度l0(mm),轴力设计值Nj(kN),"
print*,"弯矩设计值Mj(kN·m),混凝土标号(如15),钢筋等级(1,2,3),"
print*,"受拉钢筋面积Ag(mm·mm),受压钢筋的面积Ag'(mm·mm):"
read*,b,h,l_0,da_n_j,da_m_j,c,s,da_a_g,da_a_g_pie
do while(mod(b,10.0)/=0.0 .or. mod(h,10.0)/=0.0 .or. c/=15 .and. c/=20 .and. c/=25 .and. c/=30 &
.and. c/=40 .and. c/=50 .and. c/=60 .or. s/=1 .and. s/=2 .and. s/=3)
print*,"请检查下列错误:截面宽度不是10的倍数,截面宽度不是10的倍数,"
print*,"混凝土标号输入有误,钢筋等级输入有误。"
print*,"请重新输入已知条件:"
read*,b,h,l_0,da_n_j,da_m_j,c,s,da_a_g,da_a_g_pie
enddo
write(21,*)
write(21,*)"已知:"
write(21,*)"对称配筋,截面宽度b=",b,"mm,截面高度h=",h,"mm,柱计算高度l0=",l_0,"mm,轴力设计值Nj=",da_n_j,"(kN),"
write(21,*)"弯矩设计值Mj=",da_m_j,"(kN·m),混凝土标号C",c,",钢筋等级",s,"级,"
write(21,*)"受拉钢筋面积Ag=",da_a_g,"mm·mm,受压钢筋面积Ag'=",da_a_g_pie,"mm·mm。"
write(21,*)
write(21,*)"要求:"
write(21,*)"复核该截面是否安全。"
call sub()
write(22,*)
write(22,*)"混凝土标号C",c,",轴心抗压设计强度Ra=",da_r_a,",",&
"弹性模量Eh=",da_e_h,",钢筋等级",s,"级,钢筋受拉设计强度Rg=",da_r_g,",",&
"钢筋受压设计强度Rg'",da_r_g_pie,",受压区高度界限系数ξjg=",kersei_jg,",",&
"钢筋弹性模量Eh=",da_e_h,"。"
!弯矩作用平面内的截面复核
h_0=h-a
e_0=da_m_j*10**6/(da_n_j*10**3)
if(e_0/h>=1.0)then
alpha_e=0.22
else
alpha_e=0.1/(0.3+e_0/h)+0.143
endif
da_i_h=b*h**3/12.0
if(l_0/h<=8)then
eta=1.0
else
eta=1/(1-(guma_c*da_n_j*10**3*l_0**2)/(10*alpha_e* da_e_h*da_i_h*guma_b))
endif
e=eta*e_0+h/2.0-a
e_pie=eta*e_0-h/2.0+a_pie
write(*,*)
write(22,*)
write(*,*)"偏心距e0=",e_0,"偏心距e=",e,"偏心距e'=",e_pie,",偏心距增大系数η=",eta,"。"
write(22,*)"偏心距e0=",e_0,"偏心距e=",e,"偏心距e'=",e_pie,",偏心距增大系数η=",eta,"。"
x=h_0-e+sqrt((h_0-e)**2+2*(da_r_g*da_a_g*e-da_r_g_pie*da_a_g_pie*e_pie)/(da_r_a*b))
write(*,*)"受压区高度x=",x,"mm。"
kersei=x/h_0
if(kersei<=kersei_jg)then !大偏心
if(x>=2*a_pie)then
da_n_u=guma_b*(da_r_a*b*x/guma_c+(da_r_g_pie*da_a_g_pie-da_r_g*da_a_g/guma_s))
else
da_n_u1=guma_b*da_r_g*da_a_g*(h_0-a_pie)/(guma_s*e_pie)
x=h_0-e+sqrt((h_0-e)**2+2*da_r_g*da_a_g*e/(da_r_a*b))
da_n_u2=guma_b*(da_r_a*b*x/guma_c+(da_r_g_pie*da_a_g_pie-da_r_g*da_a_g/guma_s))
da_n_u=max(da_n_u1,da_n_u2)
endif
else !小偏心
da_a=0.5*da_r_a*b*h_0
da_b=da_r_a*b*h_0*(e-h_0)-da_r_g*da_a_g*e/(kersei_jg-0.9)
da_c=(0.9*da_r_g*da_a_g*e/(kersei_jg-0.9)+da_r_g_pie*da_a_g_pie*e_pie)*h_0
x=(-da_b+sqrt(da_b**2-4.0*da_a*da_c))/(2.0*da_a)
kersei=x/h_0
write(*,*)"重新计算后的相对受压区高度ξ=",kersei
if(kersei<h/h_0)then
sigerma_g=0.003*da_e_g*(0.9/kersei-1.0)
da_n_u=guma_b*(da_r_a*b*x/guma_c+(da_r_g_pie*da_a_g_pie-sigerma_g*da_a_g/guma_s))
else
kersei=h/h_0
sigerma_g=0.003*da_e_g*(0.9/kersei-1.0)
da_n_u1=guma_b*(da_r_a*b*x/guma_c+(da_r_g_pie*da_a_g_pie-sigerma_g*da_a_g/guma_s))
da_n_u2=(0.5*guma_b*da_r_a*b*(h-a_pie)**2/guma_c+guma_b*da_r_g_pie*da_a_g*(h-a_pie-a)/guma_s)/e_pie
da_n_u=min(da_n_u1,da_n_u2)
endif
endif
write(*,*)
write(22,*)
if(da_n_j<=da_n_u)then
write(*,*)"恭喜恭喜,截面在弯矩作用平面内安全!"
write(22,*)"恭喜恭喜,截面在弯矩作用平面内安全!"
else
write(*,*)"很抱歉,截面在弯矩作用平面内不安全!"
write(22,*)"很抱歉,截面在弯矩作用平面内不安全!"
endif
!垂直于弯矩作用平面的截面复核
!柱刚度折减系数取为1.0
neimna=l_0/b
mu_pie=(da_a_g+da_a_g_pie)/(b*h)
fei=3.1415926**2*da_e_h/((da_r_a+da_r_g_pie*mu_pie)*neimna**2)
da_n_u=fei*guma_b*(da_r_a*b*h/guma_c+da_r_g_pie*da_a_g_pie/guma_s)
if(da_n_j<=da_n_u)then
write(*,*)"恭喜恭喜,截面在垂直于弯矩作用平面内安全!"
write(22,*)"恭喜恭喜,截面在垂直于弯矩作用平面内安全!"
else
write(*,*)"很抱歉,截面在垂直于弯矩作用平面内不安全!"
write(22,*)"很抱歉,截面在垂直于弯矩作用平面内不安全!"
endif
endif
contains
subroutine sub()
select case (c)
case (15)
da_r_a=8.5
da_e_h=23000.0
case (20)
da_r_a=11.0
da_e_h=26000.0
case (25)
da_r_a=14.5
da_e_h=28500.0
case (30)
da_r_a=17.5
da_e_h=30000.0
case (40)
da_r_a=23.0
da_e_h=33000.0
case (50)
da_r_a=25.8
da_e_h=35000.0
case (60)
da_r_a=32.5
da_e_h=36500.0
endselect
select case (s)
case (1)
da_r_g=240.0
da_r_g_pie=240.0
kersei_jg=0.65
da_e_g=210000.0
case (2)
da_r_g=340.0
da_r_g_pie=340.0
kersei_jg=0.55
da_e_g=200000.0
case (3)
da_r_g=380.0
da_r_g_pie=380.0
kersei_jg=0.55
da_e_g=200000.0
endselect
write(*,*)
write(*,*)"混凝土标号C",c,",轴心抗压设计强度Ra=",da_r_a,",",&
"弹性模量Eh=",da_e_h,",钢筋等级",s,"级,钢筋受拉设计强度Rg=",da_r_g,",",&
"钢筋受压设计强度Rg'",da_r_g_pie,",受压区高度界限系数ξjg=",kersei_jg,",",&
"钢筋弹性模量Eh=",da_e_h,"。"
end subroutine
end program
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -