|
楼主你好,我也看了这本书,不过弹塑性那段的程序没有看懂,不知楼主可否注解一下,我倒是能把他的程序调出来,下面给出他的 两个程序
楼主可将我的程序中的elcen.dat换成你的EI centro.dat这样就可以运行了- 弹性%%%%%%%%%%%%% MAIN PROGRAM %%%%%%%%%%%%%
- % response analysis of structure--- elastic time history analysis method
- % structure parameter
- tic;
- h=[4000,3300,3300]; % 各层层高, mm
- m=[2.762 2.760 2.300]*1e+3;
- k0=[2.485 1.921 1.522]*1e+5;
- cn=length(m); % 总层数
- % earthquake parameter
- load elcen.dat
- dzhbo=elcen(:,2); %dzhbo 指地震波
- ct=1.4; % Wilson-θ法的θ值
- dt=0.01;
- xs=200/max(abs(dzhbo)); % 调整地震输入加速度幅值
- ag=dzhbo*0.01*xs; % 地震波, 400 步, 步长为0.02s, 单位m/s2
- ndzh=2000;
- ag1=ag(1:ndzh);
- ag2=ag(2:ndzh+1);
- agtao=ct*(ag2-ag1);
- % initial value
- chsh=zeros(cn,1);
- wyi1=chsh; %位移
- sdu1=chsh; %速度
- jsdu1=chsh; %加速度
- wyimt=chsh;
- sdumt=chsh;
- jsdumt=chsh;
- unit=ones(cn,1);
- m=diag(m);
- [ik]=matrixju(k0,cn); %子程序形成刚度矩阵
- [x,d]=eig(ik,m);
- d=sqrt(d);
- w=sort(diag(d)); %将频率从大到小排列
- a=2*w(1)*w(2)*(0.05*w(2)-0.07*w(1))/(w(2)^2-w(1)^2); %认为是瑞利阻尼,求系数
- b=2*(0.07*w(2)-0.05*w(1))/(w(2)^2-w(1)^2);
- c0=a*m+b*ik;
- for i=1:ndzh
- kxin=ik+(3/(ct*dt))*c0+(6/(ct*ct*dt*dt))*m; %kxin为新的刚度
- dpxin=-m*unit*agtao(i)+m*(6/(ct*dt)*sdu1+3*jsdu1)+c0*(3*sdu1+ct*dt/2*jsdu1); %新的力增量
- dxtao=kxin\dpxin;
- dtjsdu=6*dxtao/(ct*(ct^2*dt^2))-6*sdu1/(ct*ct*dt)-(3/ct)*jsdu1;
- jsdu=jsdu1+dtjsdu;
- dtsdu=(dt/2)*(jsdu+jsdu1);
- sdu=sdu1+dtsdu;
- dtwyi=dt*sdu1+(1/3)*dt^2*jsdu1+(dt^2/6)*jsdu;
- wyi=wyi1+dtwyi;
- jsdu=-m\(m*unit*ag2(i)+c0*sdu+ik*wyi); % 调整加速度
- wyi1=wyi;
- sdu1=sdu;
- jsdu1=jsdu;
- wyimt=[wyimt wyi*1000];
- sdumt=[sdumt sdu];
- jsdumt=[jsdumt jsdu];
- end
- mm=toc;
- mm
- t=0:dt:ndzh*dt;
- figure(2)
- subplot(2,2,1)
- plot(t,wyimt(3,:)/1000,'r-')
- subplot(2,2,2)
- plot(t,jsdumt(3,:),'r-')
- 弹塑性
- %%%%%%%%% MAIN PROGRAM %%%%%%%%%
- %(made in July-October, 2000 by Xu Zhao-dong)
- %(revised in January 6--16, 2002)%
- % this program is three-poly stiffness degeneration model
- % this program is the reinforced concrete structure
- % structure parameters
- m0=[1.690 1.581 1.412]*1e+4;
- k0=[1.512 2.012 2.012]*1e+7;
- h=[4000 7300 10600];
- k3stif=[k0' k0'*0.4 k0'*0.1];
- cn=length(m0);
- m=diag(m0);
- xc=[6.3 4.9 4.2]*1e-3; % 层间开裂位移
- xy=[21.8 18.9 17.2]*1e-3; % 层间屈服位移
- kxi1=0.05; kxi2=0.07; % 阻尼比
- % earthquake parameters
- load elcen.dat
- dzhbo=elcen(:,2);
- ct=1.4;
- dt=0.02;
- ndzh=400;
- tao=ct*dt;
- xs=400/max(abs(dzhbo));
- ag=xs*0.01*dzhbo;
- ag1=ag(1:ndzh);
- ag2=ag(2:ndzh+1);
- agtao=ct*(ag2-ag1);
- % initial value
- chsh=zeros(cn,1);
- pd=chsh;pdd=chsh;
- xcj=chsh;sducj=chsh;jsducj=chsh;fcj=chsh;
- xcjq=chsh;sducjq=chsh;jsducjq=chsh;fcjq=chsh;
- wyi=chsh;sdu=chsh;jsdu=chsh;
- wyimt=chsh;sdumt=chsh;jsdumt=chsh;
- plastic=chsh;plasticmt=chsh;
- unit=ones(cn,1);
- xp=xy;xn=-xy;
- kk=k3stif(:,1);
- [k4stif,fp,fn]=strpara(cn,k3stif,xc,xy); % 求解结构的参数
- for i=1:ndzh
- pdt=zeros(cn,1);
- for j=1:cn % 刚度的确定
- if pd(j)==0
- kk(j)=k4stif(j,1);
- plastic(j)=0;
- fcj(j)=kk(j)*xcj(j)+plastic(j);
- if xcj(j)>xc(j)
- pd(j)=2;
- pdt(j)=1;
- bl=(xc(j)-xcjq(j,i-1))/(xcj(j)-xcjq(j,i-1));
- kk(j)=k4stif(j,2);
- plastic(j)=(k4stif(j,1)-k4stif(j,2))*xc(j);
- fcj(j)=kk(j)*xcj(j)+plastic(j);
- elseif xcj(j)<-xc(j)
- pd(j)=-2;
- pdt(j)=1;
- bl=(-xc(j)-xcjq(j,i-1))/(xcj(j)-xcjq(j,i-1));
- kk(j)=k4stif(j,2);
- plastic(j)=-(k4stif(j,1)-k4stif(j,2))*xc(j);
- fcj(j)=kk(j)*xcj(j)+plastic(j);
- end
- end
- if pd(j)==2
- kk(j)=k4stif(j,2);
- plastic(j)=(k4stif(j,1)-k4stif(j,2))*xc(j);
- fcj(j)=kk(j)*xcj(j)+plastic(j);
- if xcj(j)>xy(j)
- pd(j)=3;
- pdt(j)=1;
- bl=(xy(j)-xcjq(j,i-1))/(xcj(j)-xcjq(j,i-1));
- kk(j)=k4stif(j,3);
- plastic(j)=(k4stif(j,4)-k4stif(j,3))*xy(j);
- fcj(j)=kk(j)*xcj(j)+plastic(j);
- elseif (xcj(j)<xy(j))&&(sducj(j)<0)
- x1a(j)=abs(xcj(j));
- pd(j)=1;
- kk(j)=((k4stif(j,1)-k4stif(j,2))*xc(j))/x1a(j)+k4stif(j,2);
- plastic(j)=0;
- fcj(j)=kk(j)*xcj(j)+plastic(j);
- end
- end
- if pd(j)==-2
- kk(j)=k4stif(j,2);
- plastic(j)=-(k4stif(j,1)-k4stif(j,2))*xc(j);
- fcj(j)=kk(j)*xcj(j)+plastic(j);
- if xcj(j)<-xy(j)
- pd(j)=-3;
- pdt(j)=1;
- bl=(-xy(j)-xcjq(j,i-1))/(xcj(j)-xcjq(j,i-1));
- kk(j)=k4stif(j,3);
- plastic(j)=-(k4stif(j,4)-k4stif(j,3))*xy(j);
- fcj(j)=kk(j)*xcj(j)+plastic(j);
- elseif (xcj(j)>-xy(j))&&(sducj(j)>0)
- x1a(j)=abs(xcj(j));
- pd(j)=1;
- kk(j)=((k4stif(j,1)-k4stif(j,2))*xc(j))/x1a(j)+k4stif(j,2);
- plastic(j)=0;
- fcj(j)=kk(j)*xcj(j)+plastic(j);
- end
- end
- if pd(j)==1
- kk(j)=((k4stif(j,1)-k4stif(j,2))*xc(j))/x1a(j)+k4stif(j,2);
- plastic(j)=0;
- fcj(j)=kk(j)*xcj(j)+plastic(j);
- if xcj(j)>x1a(j)
- pd(j)=2;
- pdt(j)=1;
- bl=(x1a(j)-xcjq(j,i-1))/(xcj(j)-xcjq(j,i-1));
- kk(j)=k4stif(j,2);
- plastic(j)=(k4stif(j,1)-k4stif(j,2))*xc(j);
- fcj(j)=kk(j)*xcj(j)+plastic(j);
- elseif xcj(j)<-x1a(j)
- pd(j)=-2;
- pdt(j)=1;
- bl=(-x1a(j)-xcjq(j,i-1))/(xcj(j)-xcjq(j,i-1));
- kk(j)=k4stif(j,2);
- plastic(j)=-(k4stif(j,1)-k4stif(j,2))*xc(j);
- fcj(j)=kk(j)*xcj(j)+plastic(j);
- end
- end
- if pd(j)==3
- kk(j)=k4stif(j,3);
- plastic(j)=(k4stif(j,4)-k4stif(j,3))*xy(j);
- fcj(j)=kk(j)*xcj(j)+plastic(j);
- if sducj(j)<0
- xp(j)=xcj(j);
- fp(j)=fcj(j);
- pd(j)=4;
- kk(j)=k4stif(j,4);
- plastic(j)=fp(j)-kk(j)*xp(j);
- fcj(j)=kk(j)*xcj(j)+plastic(j);
- end
- end
- if pd(j)==-3
- kk(j)=k4stif(j,3);
- plastic(j)=-(k4stif(j,4)-k4stif(j,3))*xy(j);
- fcj(j)=kk(j)*xcj(j)+plastic(j);
- if sducj(j)>0
- xn(j)=xcj(j);
- fn(j)=fcj(j);
- pd(j)=-4;
- kk(j)=k4stif(j,4);
- plastic(j)=fn(j)-kk(j)*xn(j);
- fcj(j)=kk(j)*xcj(j)+plastic(j);
- end
- end
- if pd(j)==4
- kk(j)=k4stif(j,4);
- plastic(j)=fp(j)-kk(j)*xp(j);
- fcj(j)=kk(j)*xcj(j)+plastic(j);
- if fcj(j)<0
- pd(j)=-6;
- pdt(j)=1;
- bl=fcjq(j,i-1)/(fcjq(j,i-1)-fcj(j));
- xa(j)=xcjq(j,i-1)+bl*(xcj(j)-xcjq(j,i-1));
- fa(j)=0;
- kk(j)=(fn(j)-fa(j))/(xn(j)-xa(j));
- plastic(j)=fa(j)-kk(j)*xa(j);
- fcj(j)=kk(j)*xcj(j)+plastic(j);
- elseif xcj(j)>xp(j)
- pd(j)=3;
- pdt(j)=1;
- bl=(xp(j)-xcjq(j,i-1))/(xcj(j)-xcjq(j,i-1));
- kk(j)=k4stif(j,3);
- plastic(j)=(k4stif(j,4)-k4stif(j,3))*xy(j);
- fcj(j)=kk(j)*xcj(j)+plastic(j);
- end
- end
- if pd(j)==-4
- kk(j)=k4stif(j,4);
- plastic(j)=fn(j)-kk(j)*xn(j);
- fcj(j)=kk(j)*xcj(j)+plastic(j);
- if fcj(j)>0
- pd(j)=6;
- pdt(j)=1;
- bl=fcjq(j,i-1)/(fcjq(j,i-1)-fcj(j));
- xb(j)=xcjq(j,i-1)+bl*(xcj(j)-xcjq(j,i-1));
- fb(j)=0;
- kk(j)=(fp(j)-fb(j))/(xp(j)-xb(j));
- plastic(j)=fb(j)-kk(j)*xb(j);
- fcj(j)=kk(j)*xcj(j)+plastic(j);
- elseif xcj(j)<xn(j)
- pd(j)=-3;
- pdt(j)=1;
- bl=(xn(j)-xcjq(j,i-1))/(xcj(j)-xcjq(j,i-1));
- kk(j)=k4stif(j,3);
- plastic(j)=-(k4stif(j,4)-k4stif(j,3))*xy(j);
- fcj(j)=kk(j)*xcj(j)+plastic(j);
- end
- end
- if pd(j)==-6
- kk(j)=(fn(j)-fa(j))/(xn(j)-xa(j));
- plastic(j)=fa(j)-kk(j)*xa(j);
- fcj(j)=kk(j)*xcj(j)+plastic(j);
- if sducj(j)>0
- xe(j)=xcj(j);
- fe(j)=fcj(j);
- pd(j)=-5;
- kk(j)=k4stif(j,4);
- plastic(j)=fe(j)-kk(j)*xe(j);
- fcj(j)=kk(j)*xcj(j)+plastic(j);
- elseif xcj(j)<xn(j)
- pd(j)=-3;
- pdt(j)=1;
- bl=(xn(j)-xcjq(j,i-1))/(xcj(j)-xcjq(j,i-1));
- kk(j)=k4stif(j,3);
- plastic(j)=-(k4stif(j,4)-k4stif(j,3))*xy(j);
- fcj(j)=kk(j)*xcj(j)+plastic(j);
- end
- end
- if pd(j)==6
- kk(j)=(fp(j)-fb(j))/(xp(j)-xb(j));
- plastic(j)=fb(j)-kk(j)*xb(j);
- fcj(j)=kk(j)*xcj(j)+plastic(j);
- if sducj(j)<0
- xf(j)=xcj(j);
- ff(j)=fcj(j);
- pd(j)=5;
- kk(j)=k4stif(j,4);
- plastic(j)=ff(j)-kk(j)*xf(j);
- fcj(j)=kk(j)*xcj(j)+plastic(j);
- elseif xcj(j)>xp(j)
- pd(j)=3;
- pdt(j)=1;
- bl=(xp(j)-xcjq(j,i-1))/(xcj(j)-xcjq(j,i-1));
- kk(j)=k4stif(j,3);
- plastic(j)=(k4stif(j,4)-k4stif(j,3))*xy(j);
- fcj(j)=kk(j)*xcj(j)+plastic(j);
- end
- end
- if pd(j)==-5
- kk(j)=k4stif(j,4);
- plastic(j)=fe(j)-kk(j)*xe(j);
- fcj(j)=kk(j)*xcj(j)+plastic(j);
- if fcj(j)>0
- pd(j)=6;
- pdt(j)=1;
- bl=fcjq(j,i-1)/(fcjq(j,i-1)-fcj(j));
- xb(j)=xcjq(j,i-1)+bl*(xcj(j)-xcjq(j,i-1));
- fb(j)=0;
- kk(j)=(fp(j)-fb(j))/(xp(j)-xb(j));
- plastic(j)=fb(j)-kk(j)*xb(j);
- fcj(j)=kk(j)*xcj(j)+plastic(j);
- elseif (sducj(j)<0)&&(fcj(j)<=0)
- xa(j)=xcj(j);
- fa(j)=fcj(j);
- pd(j)=-6;
- kk(j)=(fn(j)-fa(j))/(xn(j)-xa(j));
- plastic(j)=fa(j)-kk(j)*xa(j);
- fcj(j)=kk(j)*xcj(j)+plastic(j);
- end
- end
- if pd(j)==5
- kk(j)=k4stif(j,4);
- plastic(j)=ff(j)-kk(j)*xf(j);
- fcj(j)=kk(j)*xcj(j)+plastic(j);
- if fcj(j)<0
- pd(j)=-6;
- pdt(j)=1;
- bl=fcjq(j,i-1)/(fcjq(j,i-1)-fcj(j));
- xa(j)=xcjq(j,i-1)+bl*(xcj(j)-xcjq(j,i-1));
- fa(j)=0;
- kk(j)=(fn(j)-fa(j))/(xn(j)-xa(j));
- plastic(j)=fa(j)-kk(j)*xa(j);
- fcj(j)=kk(j)*xcj(j)+plastic(j);
- elseif (sducj(j)>0)&&(fcj(j)>=0)
- xb(j)=xcj(j);
- fb(j)=fcj(j);
- pd(j)=6;
- kk(j)=(fp(j)-fb(j))/(xp(j)-xb(j));
- plastic(j)=fb(j)-kk(j)*xb(j);
- fcj(j)=kk(j)*xcj(j)+plastic(j);
- end
- end
- if pdt(j)==1 % 插值处理
- dt1=(1-bl)*dt;
- tao1=ct*dt1;
- [kju]=matrixju(kk,cn);
- [c0]=strdamp(m,kju,kxi1,kxi2,cn);
- dtp1=(1-bl)*dtplastic;
- for s=1:cn
- xcjtp(s)=xcjq(s,i-1)+bl*(xcj(s)-xcjq(s,i-1));
- sducjtp(s)=sducjq(s,i-1)+bl*(sducj(s)-sducjq(s,i-1));
- jsducjtp(s)=jsducjq(s,i-1)+bl*(jsducj(s)-jsducjq(s,i-1));
- end
- [wyi1]=cjzhuanhuan(xcjtp,cn);
- [sdu1]=cjzhuanhuan(sducjtp,cn);
- [jsdu1]=cjzhuanhuan(jsducjtp,cn);
- kxin1=kju+(3/tao1)*c0+(6/tao1^2)*m;
- dpxin1=-m*unit*agtao(i-1)*(1-bl)+m*(6/(tao1)*sdu1+3*jsdu1)+c0*(3*sdu1+tao1/2*jsdu1)-ct*dtp1;
- dxtao1=kxin1\dpxin1;
- dtjsdu1=6*dxtao1/(ct*(tao1^2))-6*sdu1/(ct*tao1)-(3/ct)*jsdu1;
- jsdu=jsdu1+dtjsdu1;
- dtsdu1=(dt1/2)*(jsdu+jsdu1);
- sdu=sdu1+dtsdu1;
- dtwyi1=dt1*sdu1+(dt1^2/3)*jsdu1+(dt1^2/6)*jsdu;
- wyi=wyi1+dtwyi1;
- [xcj]=zhuanhuan(wyi,cn);
- [sducj]=zhuanhuan(sdu,cn);
- [jsducj]=zhuanhuan(jsdu,cn);
- xcjq(:,i)=xcj;
- sducjq(:,i)=sducj;
- jsducjq(:,i)=jsducj;
- fcjq(:,i)=fcj;
- wyimt(:,i)=wyi*1000;
- sdumt(:,i)=sdu;
- jsdumt(:,i)=jsdu;
- end
- end % 1:cn
- pdd=[pdd pd]; % 阶段符号矩阵
- [kju]=matrixju(kk,cn); % 刚度矩阵的聚合
- [c0]=strdamp(m,kju,kxi1,kxi2,cn); % 求解结构的阻尼矩阵
- plastic2=[plastic(2:cn);0];
- plastic3=plastic-plastic2;
- plasticmt=[plasticmt plastic3];
- dtplastic=plastic3-plasticmt(:,i);
- [wyi1]=cjzhuanhuan(xcj,cn);
- [sdu1]=cjzhuanhuan(sducj,cn);
- [jsdu1]=cjzhuanhuan(jsducj,cn);
- kxin=kju+(3/tao)*c0+(6/tao^2)*m;
- dpxin=-m*unit*agtao(i)+m*(6/tao*sdu1+3*jsdu1)+c0*(3*sdu1+tao/2*jsdu1)- ct*dtplastic;
- dxtao=kxin\dpxin;
- dtjsdu=6*dxtao/(ct*(tao^2))-6*sdu1/(ct*tao)-(3/ct)*jsdu1;
- jsdu=jsdu1+dtjsdu; % new acceleration
- dtsdu=(dt/2)*(jsdu+jsdu1);
- sdu=sdu1+dtsdu; % new velocity
- dtwyi=dt*sdu1+(dt^2/3)*jsdu1+(dt^2/6)*jsdu;
- wyi=wyi1+dtwyi; % new displacement
- [xcj]=zhuanhuan(wyi,cn);
- [sducj]=zhuanhuan(sdu,cn);
- jsdu=-m\(m*unit*ag2(i)+c0*sdu+kju*wyi+plastic3); % 加速度修正
- [jsducj]=zhuanhuan(jsdu,cn);
- fcj=kk.*xcj+plastic;
- xcjq=[xcjq xcj];
- sducjq=[sducjq sducj];
- jsducjq=[jsducjq jsducj];
- fcjq=[fcjq fcj];
- wyimt=[wyimt wyi*1000];
- sdumt=[sdumt sdu];
- jsdumt=[jsdumt jsdu];
- end % 1:ndzh
- t=0:0.02:8;
- subplot(2,2,1)
- plot(t,wyimt(3,:),'k');
- subplot(2,2,2)
- plot(t,jsdumt(3,:),'k');
复制代码 |
评分
-
1
查看全部评分
-
|