一、前言
最近参与了一个小项目,负责软件开发中的有限元计算部分,需要用ANSYS APDL进行参数化建模,但是实验室没有人用ANSYS APDL的,于是自学了一个月的APDL代码,磕磕绊绊总算到了项目收尾阶段,我也抽空写了一点新手的使用总结,留作纪念。
新手建议先看一遍《ANSYS工程结构数值分析》这本书,对APDL能办到什么有一个基础的了解,之后可以看看《ANSYS APDL参数化有限元分析技术及其应用实例》,该书是相对进阶的APDL使用指南。在看的过程中和ANSYS帮助文档对照着看效果更好,当对APDL指令较为熟悉后,ANSYS帮助文档就是主要的参考了。
二、APDL代码总结
下面是我对项目中使用的一些重要APDL指令的个人总结:
NSEL,TYPE,Item,Comp,VMIN,VMAX,VINC,KABS
选择一组节点
ANSYS APDL操作方式与现在的通用有限元软件的可视化操作有很大的区别,导致新手往往会很不适应。比如选择元素的方式,用APDL就比较繁琐,让人又爱又恨,但是这类指令是必须熟练使用的,因为ANSYS APDL大量的操作是建立在当前被选择集合上。建议在进行选取操作前,需要仔细阅读该指令的注释,明白每种选取方式的含义。
首先,ANSYS对几何元素和网格元素的选取方式都是类似的,使用KSEL、ASEL、NSEL、ESEL等等进行调用,不同元素的当前选择集合是互相独立的。例如使用以下指令:
NSEL,S,LOC,X,-10,10
ESEL,S,CENT,X,-5,5
软件会选取x坐标-10~10内的节点和x坐标-5~5内的单元。两者互不干涉。如果忘记这点,那么在使用多种选择元素的方式时可能会犯错。例如在《ANSYS APDL参数化有限元分析技术及其应用实例》的例16.7中,指令如下:
*DO,I,1,ECOUNT
ESEL,S,,,ENUM(I)
NSLE,R
…..
*ENDDO
此例先选择了单元号为ENUM(I)的单元,接着想选择该单元关联的节点,但是犯了错误,由于重新选择ELEM的集合并不会改变NODE的集合,所以NSEL后不应该是“R”,而应该是“S”,或空格。
需要注意,如果通过坐标方式选取节点,当VMAX=VMIN,那么选择容差为±0.005×VMIN,这在mm建模的模型选择时影响较大,例如,模型的边界坐标是220000mm,那么就不能用NSEL,S,LOC,X,220000来对边界进行选取,会选到附近的节点。
NUMMRG, Label, TOLER, GTOLER, Action, Switch
合并相同或等价的项
浮箱的模型在PATRAN中建模,通过FEM transfer在线转换模型网站生成.cdb文件,之后在浮箱上建立支撑船体的墩木模型,需要用到合并节点的代码:NUMMRG,NODE,1
值得注意的是,NUMMRG这个指令是合并当前选择集内的元素,所以未被选择的节点不会被合并。因此,若模型存在相距很近而不应被合并的节点,就可以精准的选择需要被合并的节点所在区域进行节点合并。
ACEL, ACEL_X, ACEL_Y, ACEL_Z
指定用于分析的全局笛卡尔坐标系的线性加速度。
在考虑浮箱自身的重力时,需要通过惯性效应模拟重力,即假设物体的重力向Z轴负方向,则需要给物体一个沿Z轴正向的加速度。加速度大小与重力加速度一致。即ACEL,0,0,9.8
注意,重力加速度的大小要与当前使用的单位制保持一致,ANSYS软件不进行计算单位的换算,默认用户使用的单位制时统一的,只要用户使用的单位制可以逻辑自洽就能得到正确的结果。例如我在使用ANSYS时用到的单位有N、mm、kg,这不是一个常规的单位制,因为国际单位为长度m、质量kg、时间s,重力加速度应该用m/s^2,或mm/s^2来表示,此时由F=ma可以得到N和kg·m/ s^2,10^-3N和kg·mm/ s^2,又或是N和t·m/ s^2是自洽的。但是我同时使用了N、mm、kg。所以当我设置重力加速度时,就不能用9800 mm/ s^2,而是9.8N/kg,最后也能得到正确的重力,当然,最终我还是使用了ton-mm-s的标准单位制来规范物理量的单位。
/SHOW,JPEG,,0
JPEG,QUAL,100,
JPEG,ORIENT,HORIZ
JPEG,COLOR,2
JPEG,TMOD,1
/GFILE,900,
PLETAB,TOPEQV,AVG !输出总体平均应力
/SHOW,CLOSE
这串代码是ANSYS输出图片的指令,在操作输出云图时,大家可能会发现只输出了单元节点图,网上未找到该问题的解决办法,其实只要在关键语句是/SHOW,JPEG$/SHOW,CLOSE之间插入你想输出的图的语句描述就可以了,比如像输出网格单元图,那就在中间插入EPLOT即可。
三、其他
网格模型镜像,参照https://www.leanwind.com/archives/2564.html进行GUI操作,在进行镜像时,可以用ESEL,U等指令将不需要镜像的部分去除。
宏是ANSYS APDL中非常实用的功能,能被不同主程序调用,减少大量代码描述,但需要注意,当循环中引用宏且宏中也有循环时,循环控制变量不能用同一个,因为该变量在宏内外都是一个变量。