问题描述
如下图的2D平面网格模型,如何一次性提取所有单元的面积,并将单元编号和对应的面积写出到文本文件。
建立上图模型的APDL命令流如下1
2
3
4
5
6
7
8
9
10/prep7
et, 1, shell63 !定义单元类型
rectng, 0, 20, 0, 20 !建立一个正方形,边长20
lesize, 1, , , 2, 1 !设置边的网格数
lesize, 4, , , 2, 1
lesize, 2, , , 4, 1
lesize, 3, , , 4, 1
amesh, 1 !面网格划分
/pnum, elem, 1
/replot
方法一
1 | *get, ENUM, elem, 0, count !获取单元个数,置于参数ENUM |
但是此方法存在一个问题,命令流将提取单元编号从EMIN到EMAX的所有单元面积,而不能保证单元编号对应的单元属于当前选择的单元集合。例如,本例中选择单元1、2和12,执行上述命令流时,程序仍然会提取单元编号从1到12一共12个单元的面积。
方法二
针对方法一存在的不足,笔者进行了改进,整体思路如下:
1、采用单元个数作为循环控制变量;1
*do, i, 1, ENUM
2、采用 elnext() 函数获取下一个单元编号;
3、将单元编号和单元面积存入数组后,采用*vwrite命令将数组写入文本文件;
本例写出的单元编号和单元面积结果如下
特别说明:*vwrite命令不能在命令流窗口中运行,而必须在ANSYS Batch模式下运行。
小结
经笔者改进的方法二,可在ANSYS中一次性提取任意数量、编号不连续平面单元的面积,并将结果保存到文本文件,方便后续的绘图或是统计工作。