结构有限元分析姓名:葛斌学号:10121306 班级:土建硕1005 1.主要流程图图12、变量列表及子程序说明(1)程序的主要变量和数组说明a)主要变量说明NP:结构总的结点数NE:结构总的单元数NR:结点总的约束数NNE:单元结点数NFDE:单元结点自由度数NBW:总体刚度矩阵按变带宽存储的带宽值E:弹性模量AMU:伯松比T:单元厚度b)主要数组说明COORD:结点坐标NEC:单元拓扑阵(各单元结点的总体编码)NRA:受约束结点总体编码NRP:约束的属性ALV:结点的外载和位移CS:按变带宽存储的总体刚度矩阵B:应变矩阵ES:单元刚度矩阵D:应力矩阵S:弹性矩阵DIS:单元结点位移STS:单元应力STR:单元应变ESCO: 单元刚度矩阵的子矩阵TYPEE:问题性质(平面应力、应变或轴对称)TYPEE=0 表示平面应力问题TYPEE=1 表示平面应变问题(2)各子程序功能说明GUOMIN:主程序INPUT:数据输入子程序CHECKENBW:验证变带宽子程序ADDSTF:总体刚度集成子程序SOLEQ:用高斯消元法求解位移向量子程序SOLST: 求解单元应力应变子程序OUTPUT:数据输出子程序ELESTF:求解一般三角形单元刚度子程序3、数组输入文件的格式数组输入文件格式如下:输入文件名:任意,但不超过65个字符自由格式输入第一批数据:NP,NE,NR,NBW,E,AMU,T,NNE,NFDE(输入控制参数,占1行) NP:结构总的结点数NE:结构总的单元数NR:结点总的约束数NBW:总体刚度矩阵按变带宽存储的带宽值E:弹性模量AMU:伯松比T:单元厚度第二批数据:COORD(结点坐标,占NP行)第三批数据:NEC(单元拓扑阵占NE行)第四批数据:NRA(受约束结点总体编码,占1行)第五批数据:NRP(约束属性,占1行)NRP=0~9表示Y轴受约束NRP=10~20表示X轴受约束NRP=21~表示XY轴都受约束第六批数据:ALV(结点外荷载,以次输入结点X Y方向受的结点力占1行)第七批数据:TYPEE(问题性质及单元类型信息,占1行)4、原程序附录!(1)guomin.f90主程序!**************************************************************!==============================================================! 主程序!==============================================================!************************************************************** program guomindimension coord(10,2),nec(9,3),nra(2),nrp(2),alv(20),cs(20,10)!选取不同的结构只要修改coord,nec,alv,cs数组的维数即可!用次程序分析第二个结构修改为:coord(5,2) nec(4,3) alv(10) cs(10,8) dimension b(3,6),es(6,6),d(3,3),s(3,6),dis(6),sts(3)integer typeecommon/a3/typeecommon/a1/np,ne,nr,nbw,e,amu,tcommon/a2/coord,nec,nra,nrp,alv,b,d,s,es,cs,dis,stsopen(9,file='D:\beifenchengxu\outp1.txt')!调用子程序INPUT为建立单元刚度矩阵准备原始信息call inputif(typee.eq.0)thenprint*,'该问题是平面应力问题'elseif(typee.eq.1)thenprint*,'该问题是平面应变问题'e=e/(1-amu**2)amu=amu/(1-amu)endifcall checknbw!调用子程序ADDSTF建立单元刚度矩阵和整体刚度矩阵call addstfcall soleqcall solstclose(9)stopend!(2)INPUT.F90子程序!============================================================! 数据输入!============================================================ subroutine inputdimension coord(10,2),nec(9,3),nra(2),nrp(2),alv(20),cs(20,10)!选取不同的结构只要修改coord,nec,alv,cs数组的维数即可!用次程序分析第二个结构修改为:coord(5,2) nec(4,3) alv(10) cs(10,8) dimension b(3,6),es(6,6),d(3,3),s(3,6),dis(6),sts(3)integer typeecommon/a3/typeecommon/a1/np,ne,nr,nbw,e,amu,tcommon/a2/coord,nec,nra,nrp,alv,b,d,s,es,cs,dis,stsopen(6,file='D:\beifenchengxu\inp.txt')read(6,*)np,ne,nr,nbw,e,amu,tread(6,*)((coord(i,j),j=1,2),i=1,np)read(6,*)((nec(i,j),j=1,3),i=1,ne)read(6,*)(nra(i),i=1,nr)read(6,*)(nrp(i),i=1,nr)np2=2*npread(6,*)(alv(i),i=1,np2)!判断平面问题的性质read(6,*)typeeclose(6)end!(3)checknbw.f90子程序!===========================================================! 检查变带宽值!=========================================================== subroutine checknbwdimension coord(10,2),nec(9,3),nra(2),nrp(2),alv(20),cs(20,10)!选取不同的结构只要修改coord,nec,alv,cs数组的维数即可!用次程序分析第二个结构修改为:coord(5,2) nec(4,3) alv(10) cs(10,8) dimension b(3,6),es(6,6),d(3,3),s(3,6),dis(6),sts(3)common/a1/np,ne,nr,nbw,e,amu,tcommon/a2/coord,nec,nra,nrp,alv,b,d,s,es,cs,dis,stsnnbw=0do i=1,neii=nec(i,1)jj=nec(i,2)kk=nec(i,3)ij=abs(ii-jj)jk=abs(jj-kk)ki=abs(kk-ii)enbw=max(ij,jk,ki)if(enbw.gt.nnbw)nnbw=enbwenddonnbw=2*(nnbw+1)print*,'计算出的带宽',nnbwdo while(nbw.ne.nnbw)if(nnbw.gt.nbw)thenprint*,'所选取带宽偏小'write(*,'(a)',advance='no')'请输入新的带宽:'read*,nbwelseprint*,'所选取带宽偏大'write(*,'(a)',advance='no')'请输入新的带宽:'read*,nbwendifenddoif(nnbw.eq.nbw)print*,'所选的带宽最优'end!(4)ADDSTF.f90子程序!=================================================================== ! 总纲度矩阵集成!=================================================================== subroutine addstfdimension coord(10,2),nec(9,3),nra(2),nrp(2),alv(20),cs(20,10)!选取不同的结构只要修改coord,nec,alv,cs数组的维数即可!用次程序分析第二个结构修改为:coord(5,2) nec(4,3) alv(10) cs(10,8) dimension b(3,6),es(6,6),d(3,3),s(3,6),dis(6),sts(3)common/a1/np,ne,nr,nbw,e,amu,tcommon/a2/coord,nec,nra,nrp,alv,b,d,s,es,cs,dis,stsprint*,'计算半带宽存储的总体刚度矩阵'np2=2*npdo i=1,np2do j=1,nbwcs(i,j)=0enddoenddodo n=1,necall elestf(n,1)do j=1,3do jj=1,2ir=2*(j-1)+jjir2=2*(nec(n,j)-1)+jjdo k=1,3do kk=1,2ic=2*(k-1)+kkic1=2*(nec(n,k)-1)+kkic2=ic1-ir2+1if(ic2.gt.0)thencs(ir2,ic2)=cs(ir2,ic2)+es(ir,ic)endifenddoenddoenddoenddoenddo! 边界条件的处理do n=1,nriz=nra(n)ir2=2*iz-1if(nrp(n).gt.10)thendo j=2,nbwcs(ir2,j)=0enddoif(ir2.ge.nbw)then it=nbwelseit=ir2endifif(it.ge.2)thendo j=2,itcs(ir2-j+1,j)=0enddoendifendifir2=ir2+1if(nrp(n).lt.10)thenjf=nrp(n)elsejf=nrp(n)-20endifif(jf.lt.1)thenelsedo j=2,nbwcs(ir2,j)=0enddoif(ir2.ge.nbw)thenit=nbwelseendifif(it.ge.2)thendo j=2,ir2cs(ir2-j+1,j)=0enddoendifendifenddoend!(5)SOLEQ.f90子程序!=================================================================== ! 用高斯消元法求解位移向量!=================================================================== subroutine soleq!定义数组变量和公共数据块dimension coord(10,2),nec(9,3),nra(2),nrp(2),alv(20),cs(20,10)!选取不同的结构只要修改coord,nec,alv,cs数组的维数即可!用次程序分析第二个结构修改为:coord(5,2) nec(4,3) alv(10) cs(10,8) dimension b(3,6),es(6,6),d(3,3),s(3,6),dis(6),sts(3)dimension nnp(10),u(10),v(10)common/a1/np,ne,nr,nbw,e,amu,tcommon/a2/coord,nec,nra,nrp,alv,b,d,s,es,cs,dis,sts!解数组变量方程n2=2*npm2=n2-1do k=1,m2if(n2.gt.k+nbw-1)thenim=k+nbw-1im=n2endifdo i=k+1,iml=i-k+1c=cs(k,l)/cs(k,1)l1=nbw-l+1do j=1,l1m=j+i-kcs(i,j)=cs(i,j)-c*cs(k,m)enddoalv(i)=alv(i)-c*alv(k)enddoenddoalv(n2)=alv(n2)/cs(n2,1)do i=n2-1,1,-1if(nbw.gt.n2-i+1)thenjm=n2-i+1elsejm=nbwendifdo j=2,jmih=j+i-1alv(i)=alv(i)-cs(i,j)*alv(ih)alv(i)=alv(i)/cs(i,1)enddoenddowrite(9,*)'结点水平,竖直方向的位移'write(9,'(2x,a,4x,a,12x,a)')'no','ux','uy'nnp(i)=iu(i)=alv(2*i-1)v(i)=alv(2*i)write(9,'(1x,i3,2(2x,e10.4,2x))')nnp(i),u(i),v(i)enddoend!(6)ELESTF.f90子程序!=============================================================! 求解一般问题三角形单元的单元刚度矩阵子程序!============================================================= subroutine elestf(nn,nk)dimension coord(10,2),nec(9,3),nra(2),nrp(2),alv(20),cs(20,10)!选取不同的结构只要修改coord,nec,alv,cs数组的维数即可!用次程序分析第二个结构修改为:coord(5,2) nec(4,3) alv(10) cs(10,8) dimension b(3,6),es(6,6),d(3,3),s(3,6),dis(6),sts(3)common/a1/np,ne,nr,nbw,e,amu,tcommon/a2/coord,nec,nra,nrp,alv,b,d,s,es,cs,dis,sts!计算ck,bk,cj,bj和aii=nec(nn,1)jj=nec(nn,2)kk=nec(nn,3)bi=coord(jj,2)-coord(kk,2)bj=coord(kk,2)-coord(ii,2)bk=coord(ii,2)-coord(jj,2)ci=coord(kk,1)-coord(jj,1)cj=coord(ii,1)-coord(kk,1) ck=coord(jj,1)-coord(ii,1) a=(bj*ck-bk*cj)/2.0do i=1,3do j=1,6b(i,j)=0enddoenddob(1,1)=bib(1,3)=bjb(1,5)=bkb(2,2)=cib(2,4)=cjb(2,6)=ckb(3,1)=b(2,2)b(3,2)=b(1,1)b(3,3)=b(2,4)b(3,4)=b(1,3)b(3,5)=b(2,6)b(3,6)=b(1,5)do i=1,3do j=1,6b(i,j)=b(i,j)/(2.0*a) enddoenddodo i=1,3do j=1,3d(i,j)=0enddoenddod(1,1)=1d(1,2)=amud(2,1)=d(1,2)d(2,2)=d(1,1)d(3,3)=(1-amu)/2dd=e/(1-amu**2)do i=1,3do j=1,3d(i,j)=d(i,j)*ddenddoenddos=matmul(d,b)if(nk.lt.1.0)thens=matmul(d,b)elsedo i=1,6do j=1,6es(i,j)=0do k=1,3es(i,j)=es(i,j)+s(k,i)*b(k,j)*a*tenddoenddoenddoendifend!(7)SOLST.f90子程序!===================================================================! 求解单元应力,应变!=================================================================== subroutine solstdimension coord(10,2),nec(9,3),nra(2),nrp(2),alv(20),cs(20,10)!选取不同的结构只要修改coord,nec,alv,cs数组的维数即可!用次程序分析第二个结构修改为:coord(5,2) nec(4,3) alv(10) cs(10,8) dimension b(3,6),es(6,6),d(3,3),s(3,6),dis(6),sts(3)dimension str(3)common/a1/np,ne,nr,nbw,e,amu,tcommon/a2/coord,nec,nra,nrp,alv,b,d,s,es,cs,dis,stswrite(9,*)'单元的主应力及其与X轴夹角及单元应变值'write(9,'(2x,a,4x,a,6x,a,5x,a,4x,3(a,6x))')'No','stsmax','stsmin','an gle','stn_x','stn_y','stn_xy'do n=1,necall elestf(n,0)do i=1,3do j=1,2ij=2*(i-1)+jmij=2*(nec(n,i)-1)+jdis(ij)=alv(mij)enddoenddodo i=1,3sts(i)=0str(i)=0do j=1,6sts(i)=sts(i)+s(i,j)*dis(j)str(i)=str(i)+b(i,j)*dis(j)enddoenddoavests=(sts(1)+sts(2))/2.0stsr=sqrt(((sts(1)-sts(2))/2.0)**2+sts(3)**2)stsmax=avests+stsrstsmin=avests-stsrif(sts(2).ne.stsmin)thenang=28.6624*atan(2.*sts(3)/(sts(2)-sts(1)))elseang=0endifwrite(9,'(1x,i3,2x,2(e10.4,2x),f6.2,2x,3(e10.4,2x))')n,stsmax,stsmin, ang,str(1),str(2),str(3)enddoend6、应用实例一结构及其受力图示如下:图1输入文件:5,4,2,5,1.0,0.25,10,02,01,10,22,21,2,32,5,31,3,43,5,41,212,20,0,0,0,0,0,0,0,0,10输出文件:结点水平、竖直方向的位移值no ux uy1 0.0000E+00 0.1167E+022 0.3501E+01 0.0000E+003 0.2614E+01 0.7398E+014 -.4469E+02 -.2063E+025 -.7487E+01 0.2719E+02单元的主应力及其与X轴夹角及单元应变值No stsmax stsmin angle stn_x stn_y stn_xy 1 0.4199E+01 0.2175E+00 43.94 0.1750E+01 0.1562E+01 -.4973E+012 0.1328E+02 -.1295E+01 1.10 -.4607E+01 0.1359E+02 0.7018E+003 0.2284E+02 -.1110E+02 7.15 0.2496E+02 -.1615E+02 -.1047E+024 0.1894E+02 0.3655E+00 5.96 0.1860E+02 -.4120E+01 -.4793E+018、应用实例二结构及其受力图示如下:图2输入文件:10,9,2,8,1.0,0.25,10,02,04,06,01,23,25,22,44,43,61,2,52,3,63,4,73,7,62,6,55,6,86,7,96,9,88,9,101,422,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10 0输出文件:结点水平、竖直方向的位移值no ux uy1 0.0000E+00 0.0000E+002 0.1508E+02 0.3930E+003 0.2923E+03 0.4488E+024 0.2165E+04 0.0000E+005 0.5338E+01 -.5183E+016 0.3917E+01 0.7772E+017 0.2048E+03 0.4218E+028 0.1567E+01 0.4323E+029 0.4287E+00 0.3162E+0210 -.8820E+01 0.4985E+02单元的主应力及其与X轴夹角及单元应变值No stsmax stsmin angle stn_x stn_y stn_xy 1 0.7339E+01 -.8750E+00 2.53 0.7538E+01 -.2690E+01 -.9036E+002 0.1496E+03 0.2536E+02 9.92 0.1386E+03 -.7431E+01 -.5266E+023 0.1058E+04 0.2030E+03 15.00 0.9361E+03 0.9872E+01 -.5343E+034 0.1141E+03 0.6541E+01 17.42 0.1004E+03 -.9950E+01 -.7679E+025 0.5101E+00 -.8565E+00 23.60 -.7104E+00 0.4506E+00 0.1253E+016 0.2240E+02 0.4611E+01 6.43 -.7104E+00 0.2097E+02 0.4947E+017 0.1104E+03 0.2791E+02 9.85 0.1004E+03 0.3321E+01 -.3476E+028 0.1631E+02 0.2695E+01 -12.64 -.5693E+00 0.1483E+02 -.7266E+019 0.8834E+01 -.1311E+01 -28.85 -.5693E+00 0.6212E+01 -.1071E+02。