在ANSYS中实现影响线计算王文斌中交公路规划设计院北京,100010[ 摘要 ] 本文介绍了利用ANSYS的APDL语言进行矩阵运算、图形处理,实现结构影响线的方法,同时提供了一个三跨连续梁影响线求解的APDL示例,并附了详细的说明。
为采用ANSYS进行结构分析的工程设计人员提供参考。
[ 关键词 ] ANSYS APDL 矩阵操作影响线计算三跨连续梁Create Influence Lines of Structrue in ANSYSWang wenbinChina Highway Planning & Design Institute (HPDI) Consultants,IncBeijing 100010[ Abstract ] This paper is intended to introduce a method that create influence lines of structure by using APDL in ANSYS and gives a example of 3-span continuous girder bridge withcomments as a reference for engineers.[ Keyword ] ANSYS, APDL, Matrix operation, Influence lines of structure, 3-span continuous girder bridge1. 前言在结构分析中,常常需要借助影响线来寻找移动荷载最不利位置以及绘制截面内力包络图以分析结构在最不利荷载作用下的受力状况。
所以影响线往往是结构分析的有力工具,也是工程师必须要考虑的部分。
在典型的桥梁分析软件中影响线的计算一般是软件的基础,所以在软件中都内嵌这部分的计算。
然而对于通用有限元程序就不一定内嵌这部分计算。
对于现在广为使用的Structure模块ANSYS的STRUCTURE模块中也不直接提供影响线的计算,所以需要寻求解决方法。
在本文中介绍了如何利用ANSYS载荷步的功能实现影响线的计算,但是未对影响线的使用作深入的讨论。
2. 准备工作ANSYS的用户都知道,ANSYS基于APDL的命令流功能很强,这是其他一般有限元分析程序所不具备的。
本文将要介绍的影响线的实现就是利用ANSYS的命令流实现的,当然,通过GUI的模式同样可以实现,但是工作量和耗费的时间精力都比较大。
所以还是用命令流完成该项工作比较合适。
下面就具体介绍一下利用APDL进行矩阵操作,获取结构影响线的方法。
在利用ANSYS获取结构影响线前,需要准备的是关于ANSYS的三部分知识:(1) 载荷步的操作(2) 后处理中单元表的操作(3) 向量和矩阵运算操作如果具备了上述三部分的知识,那就可以很轻易的实现影响线的绘制。
3. 影响线的实现根据影响线的定义:当一个单位荷载在结构上移动时,表示某一约束力变化规律的图形称为该约束力的影响线。
可知,要绘制结构的影响线就需要求解荷载在结构任意位置的所有工况,而某一位置影响线数量则是该位置的自由度数。
本文以三跨连续梁为例绘制影响线。
3.1 影响线绘制思路(1) 分别在需要绘制影响线的结构所有位置(n 个节点)施加单位荷载P =1(2) 建立n 个载荷步(3) 求解所有载荷步(4) 提取某个位置的某个自由度在各载荷步下的响应值,由此可以绘制该位置的某个自由度的影响线(5) 重复(4)响应值的提取过程,完成所有位置的所有自由度的影响线绘制3.2 有限元结构P=1AB C D图1 如图1所示,三跨连续梁的布置为3×20,A 点处约束X 、Y 向的线位移,B 、C 、D 三点处均为只约束Y 向的线位移。
对于该结构影响线只与结构有关,所以材料和截面可以任意取,计算时只考虑单位荷载的效应。
计算单位:kN ,m (其实力的单位在这里并不重要)。
采用简单的两维梁单元BEAM3单元,取单元长度0.2m,截面高度为1/20L,截面宽度为1/10L。
为了尽量减少计算时间,不指定多余的材料属性,仅定义材料弹性模量E=3.5×107kPa和泊松系数PRXY=0.167。
3.3 过程文件以下为求解影响线全过程的命令流文件。
“!”后面的文字为注释,在ANSYS执行宏文件时忽略这些信息。
在文件中仅对主要命令注释,其余请参考《ANSYS命令参考手册》!!连续梁桥影响线的计算示例!!日期:2003-11-12!!计算单位:kN,m!!!!********************************!!!!初始化分析FINI/CLEARSPAN=3 !定义连续梁跨数L=20 !定义单跨跨径/FILNAME,MODEL/TITLE,The %SPAN%*%L%M Continuous Bridge Analysis/NOPR/PREP7*AFUN,DEG/VIEW,1,0,0,1!!!! 初始化结束!!!!********************************!!!!********************************!!!!定义相关参数SEGMENT=5 !每米单元个数NMAX=SEGMENT*L*SPAN+1 !计算最大节点号X0=0.0Y0=0.0 !定义原点SEC_H=L/20SEC_W=L/10 !计算截面高、宽!!!!定义相关参数定义结束!!!!********************************!!!!********************************!!!!建立有限元模型ET,1,BEAM3MP,EX,1,3.5E7MP,PRXY,1,0.167 !定义单元和材料属性R,1,SEC_W*SEC_H,SEC_H**3*SEC_W/12,SEC_H !定义梁截面N,1,X0,Y0N,NMAX,X0+L*SPAN,Y0FILL,1,NMAX !定义节点TYPE,1MAT,1REAL,1ESYS,0 !定义单元属性*DO,I,1,NMAX-1E,I,I+1*ENDDO !生成单元*DO,J,1,NMAX,SEGMENT*LD,J,UY*IF,J,EQ,1,THEND,J,UX*ENDIF*ENDDO !对节点施加约束ALLS/PBC,ALL,,1EPLOTSA VE !存储模型!!!!模型建立结束!!!!********************************!!!!********************************!!!!模型求解/SOLU*DO,I,1,NMAXF,I,FY,-1*IF,I,GT,1,THENFDELE,I-1,FY*ENDIF !对节点施加单元荷载LSWRITE,I !存储载荷步*ENDDOANTYPE,0OUTRES,ALL,LAST,OUTPR,BASIC,ALL,TIME,1AUTOTS,-1NSUBST,1, , ,1KBC,0 !定义有关求解参数ALLS,ALLLSSOLVE,1,NMAX !求解所有载荷步!!!!模型求解结束!!!!********************************!!!!********************************!!!!进入后处理器计算影响线/POST1*DIM,NODE_X,ARRAY,NMAX !定义节点X坐标存储数组*DIM,N_QY,TABLE,NMAX,NMAX !定义QY 影响线存储表*DIM,N_MZ,TABLE,NMAX,NMAX !定义MZ 影响线存储表*DIM,QY_EXTR,ARRAY,4,NMAX !定义QY 影响线极值存储数组*DIM,MZ_EXTR,ARRAY,4,NMAX !定义MZ 影响线极值存储数组*DIM,TRANS_V,ARRAY,NMAX-1 !定义中间传递数据向量ESEL,ALL*DO,I,1,NMAXN_QY(0,I)=IN_MZ(0,I)=I*ENDDO !给N_QY和N_MZ表的0行赋值(节点号)*VGET,NODE_X,NODE,ALL,LOC,X !给NODE_X赋值(节点X坐标)*ABSET,'Creating Efficacy Data ......',BAR !初始化状态条*DO,I,1,NMAX*ABCHECK,NINT(100*I/NMAX) !更新状态条SET,IETABLE,QYI,SMISC,2ETABLE,QYJ,SMISC,8ETABLE,MZI,SMISC,6ETABLE,MZJ,SMISC,12 !建立Beam3的单元表数据N_QY(I,0)=NODE_X(I,1)N_MZ(I,0)=NODE_X(I,1) !给N_QY和N_MZ的0列赋值(节点X坐标)*VGET,TRANS_V,ELEM,ALL,ETAB,QYI !从读取各单元I端剪力QYI赋予TRANS_V *MFUN,N_QY(I,1),TRAN,TRANS_V !将TRANS_V中的值赋予N_QY的第一列*GET,N_QY(I,NMAX),ELEM,NMAX-1,SMISC,8 !读取最后一个单元的J端剪力QY*VGET,TRANS_V,ELEM,ALL,ETAB,MZI !从读取各单元I端弯矩MZI赋予TRANS_V *MFUN,N_MZ(I,1),TRAN,TRANS_V !将TRANS_V中的值赋予N_MZ的第一列*GET,N_MZ(I,NMAX),ELEM,NMAX-1,SMISC,12 !读取最后一个单元的J端弯矩MZ*ENDDO*ABFINISH !终止状态条(*ABSET *ABCHECK *ABFINISH须联用)TRANS_V(0)=!!!!QY和MZ的影响线建立结束!!!!********************************!!!!********************************!!!!计算影响线的最大、最小值并决定其位置*DIM,COLUMN_V,ARRAY,NMAX !定义中间临时数组*ABSET,'Geting Extremum ......',BAR !初始化状态条*DO,I,1,NMAX*ABCHECK,NINT(100*I/NMAX) !更新状态条*VCOL,1*MFUN,COLUMN_V(1),COPY,N_QY(1,I) !从N_QY中读取第1列数据给COLUMN_V *VSCFUN,INDEX,LMAX,COLUMN_V !从COLUMN_V中提取最大值所处位置序号QY_EXTR(1,I)=NODE_X(INDEX) !根据序号从NODE_X中提取坐标值*VSCFUN,QY_EXTR(2,I),MAX,COLUMN_V !从COLUMN_V表中提取QY最大值*VSCFUN,INDEX,LMIN,COLUMN_V !从COLUMN_V中提取最小值所处位置序号QY_EXTR(3,I)=NODE_X(INDEX) !根据序号从NODE_X中提取坐标值*VSCFUN,QY_EXTR(4,I),MIN,COLUMN_V !从COLUMN_V表中提取QY最小值*VCOL,1*MFUN,COLUMN_V(1),COPY,N_QY(1,I) !从N_MZ中读取第1列数据给COLUMN_V *VSCFUN,INDEX,LMAX,COLUMN_V !从COLUMN_V中提取最大值所处位置序号MZ_EXTR(1,I)=NODE_X(INDEX) !根据序号从NODE_X中提取坐标值*VSCFUN,MZ_EXTR(2,I),MAX,COLUMN_V !从COLUMN_V表中提取MZ最大值*VSCFUN,INDEX,LMIN,COLUMN_V !从COLUMN_V中提取最小值所处位置序号MZ_EXTR(3,I)=NODE_X(INDEX) !根据序号从NODE_X中提取坐标值*VSCFUN,MZ_EXTR(4,I),MIN,COLUMN_V !从COLUMN_V表中提取MZ最小值*ENDDO*ABFINISH !终止状态条COLUMN_V(0)=!!!!计算影响线的最大、最小值结束!!!!********************************/eof !结束该宏的执行,以下可以选择执行/AXLAB,X,Span_X/XRANGE,0,SPAN*L/GROPT,DIVX,12/GROPT,CURL,1/AXLAB,Y,V ALUE*VPLOT,N_QY(1,0),N_QY(1,1), 151*VPLOT,N_MZ(1,0),N_MZ(1,1),51,101,151!!!!利用图表画出影响线命令示例,!!!!********************************3.4 文件说明影响线的最终求解结果放在N_QY和N_MZ两个数据表中,每一列对应某一位置的某个自由度的影响线。