⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 column.f90

📁 说明:本程序用于矩形截面偏心受压构件对称配筋的设计和复核以及不对称配筋的复核。本程序有文件支持
💻 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 + -