结构矩阵原理分析与程序设计程序代码.docx
《结构矩阵原理分析与程序设计程序代码.docx》由会员分享,可在线阅读,更多相关《结构矩阵原理分析与程序设计程序代码.docx(18页珍藏版)》请在冰豆网上搜索。
结构矩阵原理分析与程序设计程序代码
OptionExplicit
DimnnAsInteger,neAsInteger,ndAsInteger,ndfAsInteger
DimnfAsInteger,npjAsInteger,npeAsInteger,nAsInteger
Dimal(50)AsDouble,t(6,6)AsDouble,x(40)AsDouble,y(40)AsDouble
Dimjl(50)AsInteger,jr(50)AsInteger,ea(50)AsDouble,ei(50)AsDouble
Dimc(6,6)AsDouble,r(120,120)AsDouble,p(120)AsDouble,pe(120)AsDouble
Dimibd(20)AsInteger,ii(6)AsInteger,bd(20)AsDouble,ff(6)AsDouble
Dimmj(20)AsInteger,qj(20,3)AsDouble,f(6)AsDouble,dis(6)AsDouble
Dimmf(30)AsInteger,ind(30)AsInteger,aq(30)AsDouble,bq(30)AsDouble
Dimq1(30)AsDouble,q2(30)AsDouble
Subframe()
Open"d:
\mydata\ww.txt"ForInputAs#1
Open"d:
\mydata\wt.txt"ForOutputAs#2
Callinput1
Callwstiff
Callload
Callbound
Callgauss
Callnqm
Close1
Close2
EndSub
Subinput1()
DimintiAsInteger,intjAsInteger,iAsInteger,jAsInteger,kAsInteger
Dimdx,dyAsDouble
Print#2,"PlaneFrameStructuralAnalysis"
Print#2,"*********************************"
Print#2,"InputData"
Print#2,"==============="
Print#2,
Print#2,"StructuralControlData"
Print#2,"-------------------------"
Print#2,"nn";Spc(3);"ne";Spc(3);"nf";Spc(3);"nd";Spc(3);"ndf";Spc
(2);"npj";Spc
(2);"npe";Spc(3);"n"
Input#1,nn,ne,nf,nd,ndf,npj,npe
n=3*(nn-nf)
Print#2,nn;Spc
(2);ne;Spc
(2);nf;Spc
(2);nd;Spc
(2);ndf;Spc
(2);npj;Spc
(2);npe;Spc
(2);n
Print#2,
Print#2,"NodalCoordinates"
Print#2,"------------------------"
Print#2,"Node";Spc
(2);"x";Spc(5);"y"
i=nn
Forinti=1Toi
Input#1,inti,x(inti),y(inti)
Print#2,inti;Spc
(2);x(inti);Spc(3);y(inti)
Nextinti
Print#2,
Print#2,"ElementInformation"
Print#2,"-------------------"
Print#2,"Ele.No";Spc
(2);"jl";Spc
(2);"jr";Spc(5);"ea";Spc(7);"ei";Spc(5);"al"
i=ne
Forinti=1Toi
Input#1,inti,jl(inti),jr(inti),ea(inti),ei(inti)
Nextinti
Forinti=1Toi
Ifjl(inti)>=jr(inti)ThenStop
Nextinti
Forinti=1Toi
j=jl(inti)
k=jr(inti)
dx=x(k)-x(j)
dy=y(k)-y(j)
al(inti)=Sqr(dx*dx+dy*dy)
Print#2,Spc(3);inti;Spc(4);jl(inti);Spc(3);jr(inti);Spc
(2);ea(inti);Spc
(2);ei(inti);Spc
(2);al(inti);
Nextinti
Print#2,
k=npj
Ifk<>0Then
Print#2,"NodalLoad"
Print#2,"--------------------"
Print#2,"i";Spc(3);"mj";Spc
(2);"xd";Spc
(2);"yd";Spc
(2);"md"
Forinti=1Tok
Input#1,inti,mj(inti),qj(inti,1),qj(inti,2),qj(inti,3)
Print#2,inti;Spc
(2);mj(inti);Spc
(2);qj(inti,1);Spc
(2);qj(inti,2);Spc
(2);qj(inti,3);
Nextinti
EndIf
Print#2,
i=npe
Ifi<>0Then
Print#2,"Elementloads"
Print#2,"--------------------"
Print#2,"i";Spc(3);"mf";Spc
(2);"ind";Spc
(2);"aq";Spc
(2);"bq";Spc
(2);"q1";Spc(3);"q2"
Forinti=1Toi
Input#1,inti,mf(inti),ind(inti),aq(inti),bq(inti),q1(inti),q2(inti)
Print#2,inti;Spc
(2);mf(inti);Spc(3);ind(inti);Spc
(2);aq(inti);Spc
(2);bq(inti);Spc
(2);q1(inti);Spc(3);q2(inti)
Nextinti
EndIf
Print#2,
j=ndf
Ifj<>0Then
Print#2,"BoundaryConditions"
Print#2,"-------------------------"
Print#2,"i";Spc(3);"ibd";Spc(3);"bd"
Forinti=1Toj
Input#1,inti,ibd(inti),bd(inti)
Print#2,inti;Spc(3);ibd(inti);Spc(3),bd(inti)
Nextinti
EndIf
EndSub
Subwstiff()
DimiAsInteger,jAsInteger,ieAsInteger,k1AsInteger,k2AsInteger
Fori=1Ton
Forj=1Ton
r(i,j)=0
Nextj
Nexti
ie=1
DoWhileie<=ne
Callstiff(ie)
Calllocat(ie)
Fork1=1To6
i=ii(k1)
Ifi<=nThen
Fork2=k1To6
j=ii(k2)
Ifj<=nThen
r(i,j)=r(i,j)+c(k1,k2)
EndIf
Nextk2
EndIf
Nextk1
ie=ie+1
Loop
Fori=2Ton
Forj=1To(i-1)
r(i,j)=r(j,i)
Nextj
Nexti
EndSub
Substiff(ie)
DimiAsInteger,jAsInteger
DimcxAsDouble,cyAsDouble,b1AsDouble,b2AsDouble,b3AsDouble,b4AsDouble
Dims1AsDouble,s2AsDouble,s3AsDouble,s4AsDouble,s5AsDouble,s6AsDouble
i=jl(ie)
j=jr(ie)
cx=(x(j)-x(i))/al(ie)
cy=(y(j)-y(i))/al(ie)
b1=ea(ie)/al(ie)
b2=12#*ei(ie)/al(ie)^3
b3=6#*ei(ie)/al(ie)^2
b4=2#*ei(ie)/al(ie)
s1=b1*cx^2+b2*cy^2
s2=(b1-b2)*cx*cy
s3=b3*cy
s4=b1*cy^2+b2*cx^2
s5=b3*cx
s6=b4
c(1,1)=s1
c(1,2)=s2
c(1,3)=s3
c(1,4)=-s1
c(1,5)=-s2
c(1,6)=s3
c(2,2)=s4
c(2,3)=-s5
c(2,4)=-s2
c(2,5)=-s4
c(2,6)=-s5
c(3,3)=2#*s6
c(3,4)=-s3
c(3,5)=s5
c(3,6)=s6
c(4,4)=s1
c(4,5)=s2
c(4,6)=-s3
c(5,5)=s4
c(5,6)=s5
c(6,6)=2#*s6
Fori=2To6
Forj=1To(i-1)
c(i,j)=c(j,i)
Nextj
Nexti
EndSub
'=========================================
'SUB-4setupelementlocationvector(II)
'=========================================
Sublocat(ie)
DimiAsInteger,jAsInteger'
i=jl(ie)
j=jr(ie)
ii
(1)=3*i-2
ii
(2)=3*i-1
ii(3)=3*i
ii(4)=3*j-2
ii(5)=3*j-1
ii(6)=3*j
EndSub
'=====================================
'SUB-5setuptotalnodalvevtor{p}
'=====================================
Subload()
DimiAsInteger,jAsInteger,kAsInteger
i=1
DoWhilei<=n
p(i)=0#
i=i+1
Loop
Ifnpj>0Then
Fori=1Tonpj
k=mj(i)
p(3*k-2)=qj(i,1)
p(3*k-1)=qj(i,2)
p(3*k)=qj(i,3)
Nexti
EndIf
Ifnpe<>0Then
Calleload
i=1
DoWhilei<=n
p(i)=p(i)+pe(i)
i=i+1
Loop
EndIf
EndSub
'====================================
'SUB-6setupelementeffectiveload
'====================================
Subeload()
DimiAsInteger,jAsInteger,kAsInteger,k1AsInteger,k2AsInteger,k3AsInteger
i=1
DoWhilei<=n
pe(i)=0#
i=i+1
Loop
j=1
DoWhilej<=npe
k=mf(j)
Calltrans(k)
Calllocat(k)
Callefix(j)
Fork1=1To6
f(k1)=0#
Fork2=1To6
f(k1)=f(k1)+t(k2,k1)*ff(k2)
Nextk2
Nextk1
Fork3=1To6
i=ii(k3)
Ifi<=nThen
pe(i)=pe(i)-f(k3)
EndIf
Nextk3
j=j+1
Loop
EndSub
'============
'sub-7setupfixed-endforceofelement
'============
Subefix(i)
DimjAsInteger,kAsInteger
DimslAsDouble,aAsDouble,bAsDouble,p1AsDouble,p2AsDouble
Dimb1AsDouble,b2AsDouble,b3AsDouble,c1AsDouble,c2AsDouble,c3AsDouble
Dimd1AsDouble,d2AsDouble
Forj=1To6
ff(j)=0#
Nextj
k=mf(i)
sl=al(k)
a=aq(i)
b=bq(i)
p1=q1(i)
p2=q2(i)
b1=sl-(a+b)/2#
b2=b-a
b3=(a+b)/2#
c1=sl-(2#*b+a)/3#
c2=b2
c3=(2#*b+a)/3#
d1=b^3-a^3
d2=b*b-a*a
SelectCaseind(i)
Case1
ff
(2)=-p1*(sl-a)^2*(1#+2#*a/sl)/sl^2
ff(3)=p1*a*(sl-a)^2/sl^2
ff(5)=-p1-ff
(2)
ff(6)=-p1*a^2*(sl-a)/sl^2
Case2
ff
(2)=-p1*b2*(12#*b1^2*sl-8#*b1^3+b2^2*sl-2#*b1*b2^2)/(4#*sl^3)
ff(3)=p1*b2*(12#*b3*b1^2-3*b1*b2^2+b2^2*sl)/12#/sl^2
ff(5)=-p1*b2-ff
(2)
ff(6)=-p1*b2*(12#*b3^2*b1+3#*b1*b2^2-2#*b2^2*sl)/12#/sl^2
Case3
ff
(2)=-p2*c2*(18*c1^2*sl-12*c1^3+c2^2*sl-2*c1*c2^2-4*c2^3/45)/12/sl^3
ff(3)=p2*c2*(18#*c3*c1^2-3#*c1*c2^2+c2^2*sl-2#*c2^3/15#)/36#/sl^2
ff(5)=-0.5*p1*c2-ff
(2)
ff(6)=-p2*c2*(18#*c3^2*c1+3*c1*c2^2-2*c2^2*sl+2*c2^3/15#)/36#/sl^2
Case4
ff
(2)=-6#*p1*a*(sl-a)/sl^3
ff(3)=p1*(sl-a)*(3#*a-sl)/sl^2
ff(5)=-ff
(2)
ff(6)=p1*a*(2#*sl-3#*a)/sl^2
Case5
ff
(2)=-p1*(3#*sl*d2-2#*d1)/sl^3
ff(3)=p1*(2#*d2+(b-a)*sl-d1/sl)/sl
ff(5)=-ff
(2)
ff(6)=p1*(d2-d1/sl)/sl
Case6
ff
(1)=-p1*(1#-a/sl)
ff(4)=-p1*a/sl
Case7
ff
(1)=-p1*(b-a)*(1#-(b+a)/(2#*sl))
ff(4)=-p1*d2/2#/sl
Case8
ff(3)=-a*(p1-p2)*ei(k)/b
ff(6)=-ff(3)
EndSelect
EndSub
'========
'sub-8
'========
Subtrans(ie)
DimiAsInteger,jAsInteger
DimcxAsDouble,cyAsDouble
i=jl(ie)
j=jr(ie)
cx=(x(j)-x(i))/al(ie)
cy=(y(j)-y(i))/al(ie)
Fori=1To6
Forj=1To6
t(i,j)=0#
Nextj
Nexti
Fori=1To4Step3
t(i,i)=cx
t(i,i+1)=cy
t(i+1,i)=-cy
t(i+1,i+1)=cx
t(i+2,i+2)=1#
Nexti
EndSub
'=======
'sub-9
'=======
Subbound()
DimiAsInteger,jAsInteger,kAsInteger
DimaAsDouble
Ifndf<>0Then
Forj=1Tondf
a=1E+20
Fori=1Tondf
k=ibd(i)
r(k,k)=a
p(k)=a*bd(i)
Nexti
Nextj
EndIf
EndSub
'====================================
'SUB-10SolveEquilibriumEquations
'====================================
Subgauss()
DimiAsInteger,jAsInteger,kAsInteger,k1AsInteger,n1AsInteger
DimcAsDouble
n1=n-1
Fork=1Ton1
k1=k+1
Fori=k1Ton
c=r(k,i)/r(k,k)
p(i)=p(i)-p(k)*c
Forj=k1Ton
r(i,j)=r(i,j)-r(k,j)*c
Nextj
Nexti
Nextk
p(n)=p(n)/r(n,n)
Fori=1Ton1
k=n-i
k1=k+1
Forj=k1Ton
p(k)=p(k)-r(k,j)*p(j)
Nextj
p(k)=p(k)/r(k,k)
Nexti
Fork=1Tone
Calllocat(k)
Fork1=1To6
i=ii(k1)
Ifi>nThen
p(i)=0#
EndIf
Nextk1
Nextk
Print#2,
Print#2,"OutputData"
Print#2,"=============="
Print#2,
Print#2,"NodalDisplacement"
Print#2,"---------------"
Print#2,"NodeNo.","u","v","fai"
Fori=1Tonn
Print#2,i,p(3*i-2),p(3*i-1),p(3*i)
Next
EndSub
'=====================================================
'SUB-11Calculate