e=ee+z*c[j]; /*以截面中间处应变为基准计算每一条带中心处应变,原代码左端为"ee"有误*/
if(e>0.00015) s=0.0; /*if语句,用来判断每一条带中心处应变所在范围,从而选择对应公式计算该处应力*/
file1=fopen("input.dat","r"); /*从input.dat中读取相应数据*/
fscanf(file1,"%f%f%f",&fy,&es,&esh);
fscanf(file1,"%f%f",&fc,&fct);
c[j]=c[j-1]+dc;
do /*do-while循环,计算某一曲率下的混凝土与钢筋的合弯矩,并保证钢筋混凝土截面内合力为0*/
{ii++;
mic=0.0;
mis=0.0; /*给混凝土和钢筋的弯矩赋初值为0*/
ee=ee+de; /*第一次计算截面内力后给ee一个增量,然后再次计算得到截面内力,用两次的计算结果计算ee的合理增量*/
em=de; /*把初定的变量de赋给em,参与后边的计算*/
}
else
j=0;
ii=0;
do /*do-while循环,用于将曲率与计算截面的弯矩一一对应*/
{j++; ii=0; /*监测程序运行的整个过程发现ii增长的不健康,无法给sf1动态赋值,因而在这里加一个ii=0*/
fs=0.0; /*钢筋合力初值为0.0*/
for(k=0;k<2;k++) /*计算截面钢筋的合力和弯矩*/
{
z=ao[k]-h/2; /*钢筋距上边缘的距离*/
fscanf(file1,"%d%d%d",&sn,&ln,&st);
fclose(file1);
//*****End of Inputing Data*****
float dc=0.0000002,de=0.00005,ee,em; /*定义曲率增量,应变增量,截面中间处应变,应变的中间变量*/
int j,k,n,ii,jj;
int jmax1=500,jmax2=0,jmax3=0; /*定义jmax1,jmax2,jmax3三个整型变量并赋初值*/
esy=fy/es; /*计算钢筋的屈服应变*/
hn=h/sn; /*计算h高度的截面所分成的sn条带时,每条带的高度hn*/
e=ee+z*c[j]; /*截面曲率为c[j]时钢筋的应变,其中ee为截面中心的应变,为保证截面合力为0,会做调整*/
if(abstr(e)<=esy) s=e*es; /*弹性阶段钢筋应力的计算*/
else if(abstr(e)<=esh) s=sign(e)*fy; /*屈服阶段钢筋应力的计算,其中sign是根据应变的符号确定应力符号的函数*/
float mom[100],coc[100]; /*定义一维单精度浮点型变量数组,数组长度为300,mom:纵梁方向距梁端n*da处弯矩;coc:对应曲率*/
int i; /*定义为整型变量*/
for(i=0;i<300;i++) /*为数组m,c,p,d,mom,coc赋初值0*/
float fy,es,esh; /*定义钢筋屈服强度,钢筋弹性模量,钢筋的极限拉应变*/
float fc,fct; /*定义混凝土抗压强度,抗拉强度*/
float as1,as; /*定义抗压钢筋面积,抗拉钢筋面积*/
#include<stdio.h>
#include<math.h>
float abstr(float); /*定义名为abstr的函数,其功能是求绝对值*/
else s=0.0;
ffc=ffc+s*b*(h/sn); /*将每一条带中心的混凝土受力叠加求合力*/
mic=mic+s*b*z*(h/sn); /*将每一条带中心的混凝土弯矩叠加求合弯矩*/
}
//*****Calculate The Force Of Steel*****
{m[i]=0.0;
c[i]=0.0;
p[i]=0.0;
d[i]=0.0;
}
for(i=0;i<100;i++)
{mom[i]=0.0;
coc[i]=0.0;
}
//*****Enter Data To Store In Input.dat*****
FILE *file1,*file2,*file3,*file4;
else s=sign(e)*(fy+0.01*es*(abstr(e)-esh)); /*钢筋硬化后钢筋应力的计算*/
if(z<0.0) aas=as1; /*把受压钢筋的截面
面积赋给变量aas*/
mis=mis+s*aas*z; /*截面钢筋合弯矩*/
}
if(ii==1) /*从此处到计算mm之前,是在计算判断赋给截面中心应变的增量是多少时,截面的合力接近0*/
{
sf1=ffc+fs; /*截面合力*/
float dd,dsn,dl; /*均为挠度中间变量*/
float mm,mo,co,dp,tan; /*弯矩中间变量,外力作用点处弯矩,对应曲率
,外力变化量,屈服点处弯矩与曲率的比值*/
//*****Calculate The Force Of Concrete*****
ffc=0.0; /*给混凝土合力赋初值为0*/
for(i=0;i<sn;i++) /*for循环,用于各条带混凝土产生的合力与合弯矩*/
{
sf2=ffc+fs; /*用ee+de计算的截面合力*/
dsf=sf2-sf1; /*两次计算的截面合力差*/
em=-sf2*em/dsf; /*计算合理的ee增量,也就是使截面合力趋近0时的ee增量*/
else if(e>0.0001) s=fct;
else if(e>0.0) s=(2*fct*e)/(e+0.0001);
else if(e>eo) s=-0.85*fc*(2*e/eo-(e/eo)*(e/eo));
else if(e>eu) s=-0.85*fc*(1-100*(eo-e));
float z,e,s,r; /*定义条带到截面中间的距离,应变,应力,反力*/
float eo,eu,cc=0.0; /*定义混凝土达到极限强度时的应变,破坏时的应变,cc为计算挠度时曲率变量,只对cc赋初值0.0*/
int sign(float); /*定义名为sign的函数,其功能是获取数值的正负号*/
void main(void)
{
float m[300],c[300],p[300],d[300]; /*定义一维单精度浮点型变量loat l,a,h,b; /*定义梁跨长,作用点到左端距离,截面宽、高*/
float ao[2]; /*抗压和抗拉钢筋中心到梁顶距离*/
int sn,ln,st; /*定义截面划分条带数,a长度上的分段数,钢筋型号*/
float lp,hh,hn,aas,etop; /*塑性铰长度的一半,分成sn个条带后每条带的高度,钢筋面积的中间变量,梁顶混凝土应变*/
float esy,da; /*定义钢筋的屈服应变,梁纵向弹性区段分段ln后每段长度*/
eu=-0.004; /*定义混凝土破坏时的应变为-0.004*/
eo=-0.002; /*给条带应变赋初值*/
ee=-0.0001; /*给截面中间处应变赋初值*/
float sf1=0.0,sf2=0.0,dsf; /*定义截面合力sf1,sf2,截面合力修正值dsf*/
float ffc=0.0,fs=0.0; /*定义混凝土合力,钢筋合力*/
float mi=0.0,mic,mis; /*定义某一条带的弯矩,混凝土截面内的合弯矩,截面钢筋合弯矩*/
else aas=as; /*把受拉钢筋的截面面积赋给变量aas*/
if(abstr(e)>esy) dc=0.0000003; /*钢筋屈服后的曲率增量*/
fs=fs+s*aas; /*截面钢筋合力*/
fscanf(file1,"%f%f",&as1,&as);
fscanf(file1,"%f%f%f%f",&l,&a,&h,&b);
fscanf(file1,"%f%f",&ao[0],&ao[1]);