利用APDL命令提取单元面积
问题描述
如下图的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 2 3 4 5 6 7 8 9 10 11 12 13 |
*get, ENUM, elem, 0, count !获取单元个数,置于参数ENUM *get, EMIN, elem, 0, num, min !获取最小单元编号,置于参数 EMIN *get, EMAX, elem, 0, num, max !获取最大单元编号,置于参数 EMAX *dim, EAREA, array, ENUM, 2 !定义一个数组,用于存放单元的编号和面积 k = 1 *do, i, EMIN, EMAX *if, esel(i), eq, 1, then !判断单元编号对应的单元是否存在 *get, Ai, elem, i, area !获取单元i的面积(仅对面单元) EAREA(k,1) = i !将单元i的编号存入数组 EAREA(k,2) = Ai !将单元i的面积存入数组 k = k+1 *endif *enddo |
但是此方法存在一个问题,命令流将提取单元编号从EMIN到EMAX的所有单元面积,而不能保证单元编号对应的单元属于当前选择的单元集合。例如,本例中选择单元1、2和12,执行上述命令流时,程序仍然会提取单元编号从1到12一共12个单元的面积。
方法二
针对方法一存在的不足,笔者进行了改进,整体思路如下:
1、采用单元个数作为循环控制变量;
1 |
*do, i, 1, ENUM |
2、采用 elnext() 函数获取下一个单元编号;
3、将单元编号和单元面积存入数组后,采用*vwrite命令将数组写入文本文件;
本例写出的单元编号和单元面积结果如下
特别说明:*vwrite命令不能在命令流窗口中运行,而必须在ANSYS Batch模式下运行。
小结
经笔者改进的方法二,可在ANSYS中一次性提取任意数量、编号不连续平面单元的面积,并将结果保存到文本文件,方便后续的绘图或是统计工作。
点赞 3 评论 收藏 1