Fortran语言有限元程序分析报告平面钢架.docx

上传人:b****7 文档编号:9918093 上传时间:2023-02-07 格式:DOCX 页数:16 大小:91.13KB
下载 相关 举报
Fortran语言有限元程序分析报告平面钢架.docx_第1页
第1页 / 共16页
Fortran语言有限元程序分析报告平面钢架.docx_第2页
第2页 / 共16页
Fortran语言有限元程序分析报告平面钢架.docx_第3页
第3页 / 共16页
Fortran语言有限元程序分析报告平面钢架.docx_第4页
第4页 / 共16页
Fortran语言有限元程序分析报告平面钢架.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

Fortran语言有限元程序分析报告平面钢架.docx

《Fortran语言有限元程序分析报告平面钢架.docx》由会员分享,可在线阅读,更多相关《Fortran语言有限元程序分析报告平面钢架.docx(16页珍藏版)》请在冰豆网上搜索。

Fortran语言有限元程序分析报告平面钢架.docx

Fortran语言有限元程序分析报告平面钢架

程序框图:

程序特点:

问题类型:

可用于计算结构力学的平面刚架问题

单元类型:

直接利用杆单元

载荷类型:

节点载荷及非节点载荷,其中非节点载荷包括均布荷载和垂直于杆件的集中荷载

材料性质:

所有杆单元几何性质相同,且由相同的均匀材料组成

方程求解:

结构刚度矩阵采用满阵存放,Gauss消元过程采用《数值分析》中的列主元素消去法

输入文件:

按先处理法的要求,由手工生成输入数据文件

 

1.主要变量:

ne:

单元个数

nj:

结点个数

n:

自由度

e:

弹性模量(单位:

KN/m2)

a:

杆截面积

zi:

惯性矩

np:

结点荷载个数

nf:

非结点荷载个数

x(nj):

存放结点的x轴坐标

y(nj):

存放结点的y轴坐标

ij(ne,2):

存放单元结点编号,其中ij(nj,1)存放起始结点编号,ij(nj,2)存放终止结点编号

jn(nj,3):

存放结点位移编号,以组成单元定位数组

pj(np,3):

存放结点荷载信息,其中pj(np,1)存放结点荷载作用结点号,pj(np,2)存放荷载方向代码(1—x方向;2—y方向;3—转角),pj(np,3)存放荷载大小

pf(ne,4):

存放非结点荷载信息,其中pf(ne,1)存放荷载作用单元号,pf(ne,2)存放荷载代码(1—均布荷载,2—垂直集中荷载),pf(ne,3)存放荷载大小,pf(ne,4)荷载作用距离(均布荷载,集中荷载均以单元起始结点为计算起始位置)。

2.子例行子程序哑元信息:

第一部分:

基本部分

I.subroutinelsc(Length&Sin&Cos):

输入哑元:

m(单元号),nj,ne,x,y,ij

输出哑元:

bl(杆件长度),si(正弦值),co(余弦值)

II.subroutineelv(ElementLocationVector):

输入哑元:

m,ne,nj,ij,jn

输出哑元:

lv(单元定位数组)

III.subroutineesm(ElementStiffnessMatrix):

输入哑元:

e,a,zi,bl,si,co

输出哑元:

ek(整体坐标系下的单刚矩阵)

IV.subroutineeff(ElementFixed-endForces)

输入哑元:

i,pf,nf,bl

输出哑元:

fo(局部坐标系下单元固端力)

第二部分:

主程序直接调用部分

I.subroutinetsm(TotalStiffnessMatrix计算总刚矩阵)

输入哑元:

ne,nj,n,e,x,y,ij,a,zi,jn

输出哑元:

tk

II.subroutinejlp(JointLoadVector计算结点荷载)

输入哑元:

ne,nj,n,np,nf,x,y,ij,jn,pj,pf

输出哑元:

p(结点荷载列矩阵)

III.subroutinegauss(带列主元素消去的高斯法)

输入(输出)哑元:

tk,p,n;(注意,算出位移后,直接存储到结点荷载列矩阵)

IV.subroutinemvn(Member-endforcesofelements计算各单元的杆端力)

输入哑元:

ne,nj,n,nf,e,x,y,ij,a,zi,jn,pf,p

3.文件管理:

源程序文件:

pff.for

程序需读入的数据文件:

input.txt

程序输出的数据文件:

output

4.数据文件格式:

【输入文件格式】:

栏目

格式说明

实际需输入的数据

基本模型数据

第1行,每两个数之间用“,”号隔开

单元个数,结点个数,总自由度,弹性模量,杆截面积,惯性矩,结点荷载个数,非结点荷载个数

结点位置信息

第2行,每两个数之间用“,”号隔开

依次输入各结点的坐标(x,y)

单元结点信息

每输入一个单元换行(回车),两个数之间用“,”号隔开

依次输入各单元的起点结点号和终点结点号

结点约束信息

每输入一个结点换行(回车),两个数之间用“,”号隔开

按先处理法要求,输入各结点编号

结点荷载信息

每个结点荷载成一行,每两个数之间用“,”号隔开

每行依次输入荷载作用的结点号,荷载方向代码,荷载大小(参考“主要变量”的叙述)

非结点荷载信息

每个非结点荷载成一行,每两个数之间用“,”号隔开

每行依次输入荷载作用单元,荷载代码,荷载大小,荷载作用”长度”(参考“主要向量”的叙述)

【输出文件格式】:

1.第1部分:

每行数据依次为:

结点号,结点x方向位移,结点y方向位移,结点转角位移

2.第2部分:

每行数据依次为:

单元号,

源程序:

programPFF

implicitnone

realtk(100,100),x(50),y(50),p(100),pj(50,3),pf(50,4)

integerij(50,2),jn(50,3)

integerne,nj,n,np,nf

reale,a,zi

open(1,file="input.txt",status="old")

open(2,file="output.txt",status="old")

read(1,*)ne,nj,n,e,a,zi,np,nf

callinput(ne,nj,x,y,ij,jn,np,nf,pj,pf)

calltsm(ne,nj,n,e,x,y,ij,a,zi,jn,tk)

calljlp(ne,nj,n,np,nf,x,y,ij,jn,pj,pf,p)

callgauss(tk,p,n)

callmvn(ne,nj,n,nf,e,x,y,ij,a,zi,jn,pf,p)

end

subroutineinput(ne,nj,x,y,ij,jn,np,nf,pj,pf)

dimensionx(nj),y(nj),ij(ne,2),jn(nj,3),pj(np,3),pf(nf,4)

read(1,*)(x(i),y(i),i=1,nj)

read(1,*)(ij(i,1),ij(i,2),i=1,ne)

read(1,*)((jn(i,j),j=1,3),i=1,nj)

if(np>0)read(1,*)((pj(i,j),j=1,3),i=1,np)

if(nf>0)read(1,*)((pf(i,j),j=1,4),i=1,nf)

end

subroutinetsm(ne,nj,n,e,x,y,ij,a,zi,jn,tk)

dimensionx(nj),y(nj),ij(ne,2),jn(nj,3),tk(n,n),ek(6,6),lv(6)

doi=1,n

doj=1,n

tk(i,j)=0

enddo

enddo

dom=1,ne

calllsc(m,ne,nj,x,y,ij,bl,si,co)

callesm(e,a,zi,bl,si,co,ek)

callelv(m,ne,nj,ij,jn,lv)

dol=1,6

i=lv(l)

if(i/=0)then

dok=1,6

j=lv(k)

if(j/=0)tk(i,j)=tk(i,j)+ek(l,k)

enddo

endif

enddo

enddo

end

subroutinelsc(m,ne,nj,x,y,ij,bl,si,co)

dimensionx(nj),y(nj),ij(ne,2)

i=ij(m,1)

j=ij(m,2)

dx=x(j)-x(i)

dy=y(j)-y(i)

bl=sqrt(dx*dx+dy*dy)

si=dy/bl

co=dx/bl

end

subroutineesm(e,a,zi,bl,si,co,ek)

dimensionek(6,6)

c1=e*a/bl

c2=2.0*e*zi/bl

c3=3.0*c2/bl

c4=2.0*c3/bl

s1=c1*co*co+c4*si*si

s2=(c1-c4)*si*co

s3=c3*si

s4=c1*si*si+c4*co*co

s5=c3*co

s6=c2

ek(1,1)=s1

ek(1,2)=s2

ek(1,3)=-s3

ek(1,4)=-s1

ek(1,5)=-s2

ek(1,6)=-s3

ek(2,2)=s4

ek(2,3)=s5

ek(2,4)=-s2

ek(2,5)=-s4

ek(2,6)=s5

ek(3,3)=2*s6

ek(3,4)=s3

ek(3,5)=-s5

ek(3,6)=s6

ek(4,4)=s1

ek(4,5)=s2

ek(4,6)=s3

ek(5,5)=s4

ek(5,6)=-s5

ek(6,6)=2.0*s6

doi=1,5

doj=i+1,6

ek(j,i)=ek(i,j)

enddo

enddo

end

subroutineelv(m,ne,nj,ij,jn,lv)

dimensionij(ne,2),jn(nj,3),lv(6)

i=ij(m,1)

j=ij(m,2)

dok=1,3

lv(k)=jn(i,k)

lv(k+3)=jn(j,k)

enddo

end

subroutinejlp(ne,nj,n,np,nf,x,y,ij,jn,pj,pf,p)

dimensionx(nj),y(nj),ij(ne,2),jn(nj,3),pj(np,3),pf(nf,4),p(n),fo(6),pe(6),lv(6)

doi=1,n

p(i)=0.0

enddo

if(np>0)then

doi=1,np

j=int(pj(i,1))

k=int(pj(i,2))

l=jn(j,k)

if(l/=0)p(l)=pj(i,3)

enddo

endif

if(nf>0)then

doi=1,nf

m=int(pf(i,1))

calllsc(m,ne,nj,x,y,ij,bl,si,co)

calleff(i,pf,nf,bl,fo)

callelv(m,ne,nj,ij,jn,lv)

pe

(1)=-fo

(1)*co+fo

(2)*si

pe

(2)=-fo

(1)*si-fo

(2)*co

pe(3)=-fo(3)

pe(4)=-fo(4)*co+fo(5)*si

pe(5)=-fo(4)*si-fo(5)*co

pe(6)=-fo(6)

doj=1,6

l=lv(j)

if(l/=0)p(l)=p(l)+pe(j)

enddo

enddo

endif

end

subroutineeff(i,pf,nf,bl,fo)

dimensionpf(nf,4),fo(6)

no=int(pf(i,2))

q=pf(i,3)

c=pf(i,4)

b=bl-c

c1=c/bl

c2=c1*c1

c3=c1*c2

doj=1,6

fo(j)=0.0

enddo

goto(10,20),no

10fo

(2)=-q*c*(1.0-c2+c3/2.0)

fo(3)=-q*c*c*(0.5-2.0*c1/3.0+0.25*c2)

fo(5)=-q*c*c2*(1.0-0.5*c1)

fo(6)=q*c*c*c1*(1.0/3.0-0.25*c1)

return

20fo

(2)=-q*b*b*(1.0+2.0*c1)/bl/bl

fo(3)=-q*c*b*b/bl/bl

fo(5)=-q*c2*(1.0+2.0*b/bl)

fo(6)=q*c2*b

return

end

subroutinegauss(e,d,n)

dimensione(n,n),d(n),a(n,n+1)

doi=1,n

doj=1,n

a(i,j)=e(i,j)

enddo

enddo

doi=1,n

a(i,n+1)=d(i)

enddo

dok=1,n-1

doi=k+1,n

if(abs(a(i,k))>abs(a(k,k)))then

doj=1,n+1

c=a(k,j)

a(k,j)=a(i,j)

a(i,j)=c

enddo

else

endif

enddo

doi=k+1,n

a(i,k)=a(i,k)/a(k,k)

doj=k+1,n+1

a(i,j)=a(i,j)-a(i,k)*a(k,j)

enddo

enddo

enddo

a(n,n+1)=a(n,n+1)/a(n,n)

doi=n-1,1,-1

doj=i+1,n

p=p+a(i,j)*a(j,n+1)

enddo

a(i,n+1)=(a(i,n+1)-p)/a(i,i)

p=0

enddo

doi=1,n

d(i)=a(i,n+1)

enddo

end

subroutinemvn(ne,nj,n,nf,e,x,y,ij,a,zi,jn,pf,p)

dimensionx(nj),y(nj),ij(ne,2),jn(nj,3),pf(nf,4),lv(6),fo(6),d(6),fd(6),f(6),ek(6,6),p(n)

write(2,10)

10format(//2x,"结点位移"/5x,"结点号",9x,"u向位移",9x,"v向位移",9x,"角位移")

doj=1,nj

doi=1,3

d(i)=0.0

l=jn(j,i)

if(l/=0)d(i)=p(l)

enddo

write(2,20)j,d

(1),d

(2),d(3)

20format(2x,i6,4x,3e15.6)

enddo

write(2,30)

30format(/2x,"单元杆端力及弯矩"/4x,"单元号",13x,"Fx",17x,"Fy",17x,"弯矩")

dom=1,ne

calllsc(m,ne,nj,x,y,ij,bl,si,co)

callesm(e,a,zi,bl,si,co,ek)

callelv(m,ne,nj,ij,jn,lv)

doi=1,6

l=lv(i)

d(i)=0.0

if(l/=0)d(i)=p(l)

enddo

doi=1,6

fd(i)=0.0

doj=1,6

fd(i)=fd(i)+ek(i,j)*d(j)

enddo

enddo

f

(1)=fd

(1)*co+fd

(2)*si

f

(2)=-fd

(1)*si+fd

(2)*co

f(3)=fd(3)

f(4)=fd(4)*co+fd(5)*si

f(5)=-fd(4)*si+fd(5)*co

f(6)=fd(6)

if(nf>0)then

doi=1,nf

l=int(pf(i,1))

if(m==l)then

calleff(i,pf,nf,bl,fo)

doj=1,6

f(j)=f(j)+fo(j)

enddo

endif

enddo

endif

write(2,40)m,f

40format(2x,i8,4x,"Ix=",f12.4,3x,"Iy=",f12.4,3x,"Mi=",f12.4/14x,"Jx=",f12.4,3x,"Jy=",f12.4,3x,"Mj=",f12.4)

enddo

end

 

【算例】:

课题二:

平面刚架有限元程序分析

题目一:

分析如图所示结构,其中

 

用程序PFF计算此结构的输入数据文件如下:

 

输出的计算结果文件如下:

 

【学习体会】:

1.通过这次课程设计,我进一步了解了关于Fortran90的一些更复杂更深入的用法,例如子例行子程序的调用,主程序与子程序之间数据的传递等。

2.了解了有限元设计的模块化(结构化)设计。

结构化程序设计事程序结构清晰,设计工作可分步进行。

3.进一步了解了杆系结构的有限元设计。

知道了程序处理方法和人工处理方法的不同之处。

【参考书目】:

《土木工程结构分析程序设计》赵更新中国水利水电出版社2002

《有限单元法》丁科北京大学出版社2006

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 图表模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1