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

📄 kb_trilinear.m

📁 钢、混凝土结构时频反应谱程序
💻 M
字号:
function [kk2,x2,f2,nst]=kb_trilinear(per,nt,m,eta,kk1,k1,k2,k3,ux,uy,dt,xg,x1,x2,f1,nst)
%半退化三线型恢复力模型,适用于砌体结构非线性地震分析;
%第一轮刚度开裂前为k1,开裂后为k2;第二轮刚度开裂前为k0,开裂后为k3;; 
py=k1*ux+k2*(uy-ux);
k0=py/uy;px=k1*ux;
f2=f1+kk1*(x2(1)-x1(1));
f0=(k1-k2)*ux;
if(nst==0)
    [kk2,x2,f2]=ks_bilinear(per,nt,m,eta,kk1,k1,k2,ux,dt,xg,x1,x2,f1);   
    if(kk2==k1)
        xup=(f0+x2(1)*k1-f2)/(k1-k2);
        xdn=xup-2*ux;
        fup=f0+k2*xup;
        fdn=fup-2*px;
        if(xup>uy)
            nst=1;
            if(kk1==k1)         
                xup1=(f0+x1(1)*k1-f1)/(k1-k2);
                xdn1=xup1-2*ux;
                fup1=f0+k2*xup1;
                fdn1=fup1-2*px;
                [tq,xq]=guaidian1(dt,k1,m,eta,xg,x1,xup1);
                txg(1)=xg(1)+(xg(2)-xg(1))*tq/dt;
				txg(2)=xg(2);
                fq=f1+k1*(xup1-x1(1));
				dt1=dt-tq;
                [tm,xm]=guaidian1(dt1,k2,m,eta,txg,xq,uy); 
                dtm=dt1-tm;
                fm=fq+k2*(uy-xup1);%%%fm=py;
                txg(1)=xg(1)+(xg(2)-xg(1))*(tm+tq)/dt;
				txg(2)=xg(2);
                [x2]=newmark_single(dtm,k3,m,eta,txg,xm); 
                [kk2,x2,f2]=ks_bilinear(per,nt,m,eta,k3,k0,k3,uy,dtm,txg,xm,x2,fm);
            else%%kk1=k2;
                [tm,xm]=guaidian1(dt,k2,m,eta,xg,x1,uy); 
                dtm=dt-tm;
                fm=f1+k2*(xm(1)-x1(1));%%%fm=py;
                txg(1)=xg(1)+(xg(2)-xg(1))*tm/dt;
				txg(2)=xg(2);
                [x2]=newmark_single(dtm,k3,m,eta,txg,xm); 
                [kk2,x2,f2]=ks_bilinear(per,nt,m,eta,k3,k0,k3,uy,dtm,txg,xm,x2,fm);
            end
        elseif(xdn<-uy)
            nst=1;
            if(kk1==k1)         
                xup1=(f0+x1(1)*k1-f1)/(k1-k2);
                xdn1=xup1-2*ux;
                fup1=f0+k2*xup1;
                fdn1=fup1-2*px;
                [tq,xq]=guaidian1(dt,k1,m,eta,xg,x1,xdn1);
                txg(1)=xg(1)+(xg(2)-xg(1))*tq/dt;
				txg(2)=xg(2);
                fq=f1+k1*(xdn1-x1(1));
				dt1=dt-tq;
                [tm,xm]=guaidian1(dt1,k2,m,eta,txg,xq,-uy); 
                dtm=dt1-tm;
                fm=fq+k2*(-uy-xdn1);%%%fm=-py;
                txg(1)=xg(1)+(xg(2)-xg(1))*(tm+tq)/dt;
				txg(2)=xg(2);
                [x2]=newmark_single(dtm,k3,m,eta,txg,xm); 
                [kk2,x2,f2]=ks_bilinear(per,nt,m,eta,k3,k0,k3,uy,dtm,txg,xm,x2,fm);
            else%%kk1=k2;
                [tm,xm]=guaidian1(dt,k2,m,eta,xg,x1,-uy); 
                dtm=dt-tm;
                fm=f1+k2*(xm(1)-x1(1));%%%fm=py;
                txg(1)=xg(1)+(xg(2)-xg(1))*tm/dt;
				txg(2)=xg(2);
                [x2]=newmark_single(dtm,k3,m,eta,txg,xm); 
                [kk2,x2,f2]=ks_bilinear(per,nt,m,eta,k3,k0,k3,uy,dtm,txg,xm,x2,fm);
            end            
        elseif(xup==uy)
            nst=1;
            if(x2(2)>0)
                kk2=k3;
            else
                kk2=k0;
            end
        elseif(xdn==-uy)
            nst=1;
            if(x2(2)<0)
                kk2=k3;
            else
                kk2=k0;
            end     
        else%可不做处理;
        end
    else%kk2=k2
        if(x2(1)>uy)
            nst=1;
            if(kk1==k1)         
                xup1=(f0+x1(1)*k1-f1)/(k1-k2);
                xdn1=xup1-2*ux;
                fup1=f0+k2*xup1;
                fdn1=fup1-2*px;
                [tq,xq]=guaidian1(dt,k1,m,eta,xg,x1,xup1);
                txg(1)=xg(1)+(xg(2)-xg(1))*tq/dt;
				txg(2)=xg(2);
                fq=f1+k1*(xup1-x1(1));
				dt1=dt-tq;
                [tm,xm]=guaidian1(dt1,k2,m,eta,txg,xq,uy); 
                dtm=dt1-tm;
                fm=fq+k2*(uy-xup1);%%%fm=py;
                txg(1)=xg(1)+(xg(2)-xg(1))*(tm+tq)/dt;
				txg(2)=xg(2);
                [x2]=newmark_single(dtm,k3,m,eta,txg,xm); 
                [kk2,x2,f2]=ks_bilinear(per,nt,m,eta,k3,k0,k3,uy,dtm,txg,xm,x2,fm);
            else%%kk1=k2;
                [tm,xm]=guaidian1(dt,k2,m,eta,xg,x1,uy); 
                dtm=dt-tm;
                fm=f1+k2*(xm(1)-x1(1));%%%fm=py;
                txg(1)=xg(1)+(xg(2)-xg(1))*tm/dt;
				txg(2)=xg(2);
                [x2]=newmark_single(dtm,k3,m,eta,txg,xm); 
                [kk2,x2,f2]=ks_bilinear(per,nt,m,eta,k3,k0,k3,uy,dtm,txg,xm,x2,fm);

            end
        elseif(x2(1)<-uy)
            nst=1;
            if(kk1==k1)         
                xup1=(f0+x1(1)*k1-f1)/(k1-k2);
                xdn1=xup1-2*ux;
                fup1=f0+k2*xup1;
                fdn1=fup1-2*px;
                [tq,xq]=guaidian1(dt,k1,m,eta,xg,x1,xdn1);
                txg(1)=xg(1)+(xg(2)-xg(1))*tq/dt;
				txg(2)=xg(2);
                fq=f1+k1*(xdn1-x1(1));
				dt1=dt-tq;
                [tm,xm]=guaidian1(dt1,k2,m,eta,txg,xq,-uy); 
                dtm=dt1-tm;
                fm=fq+k2*(-uy-xdn1);%%%fm=-py;
                txg(1)=xg(1)+(xg(2)-xg(1))*(tm+tq)/dt;
				txg(2)=xg(2);
                [x2]=newmark_single(dtm,k3,m,eta,txg,xm); 
                [kk2,x2,f2]=ks_bilinear(per,nt,m,eta,k3,k0,k3,uy,dtm,txg,xm,x2,fm);
            else%%kk1=k2;
                [tm,xm]=guaidian1(dt,k2,m,eta,xg,x1,-uy); 
                dtm=dt-tm;
                fm=f1+k2*(xm(1)-x1(1));%%%fm=py;
                txg(1)=xg(1)+(xg(2)-xg(1))*tm/dt;
				txg(2)=xg(2);
                [x2]=newmark_single(dtm,k3,m,eta,txg,xm); 
                [kk2,x2,f2]=ks_bilinear(per,nt,m,eta,k3,k0,k3,uy,dtm,txg,xm,x2,fm);
            end
        elseif(x2(1)==uy)
            nst=1;
            if(x2(2)>0)
                kk2=k3;
            else
                kk2=k0;
            end
        elseif(x2(1)==-uy)
            nst=1;
            if(x2(2)<0)
                kk2=k3;
            else
                kk2=k0;
            end                               
        else%可不做处理;
        end
    end
else%%nst=1
    [kk2,x2,f2]=ks_bilinear(per,nt,m,eta,kk1,k0,k3,uy,dt,xg,x1,x2,f1);
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -