利用APDL命令提取单元面积

问题描述​


如下图的2D平面网格模型,如何一次性提取所有单元的面积,并将单元编号和对应的面积写出到文本文件。

建立上图模型的APDL命令流如下

/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


方法一

*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、采用单元个数作为循环控制变量;

*do, i, 1, ENUM

2、采用 elnext() 函数获取下一个单元编号;3、将单元编号和单元面积存入数组后,采用*vwrite命令将数组写入文本文件;本例写出的单元编号和单元面积结果如下

特别说明:*vwrite命令不能在命令流窗口中运行,而必须在ANSYS Batch模式下运行。


小结

经笔者改进的方法二,可在ANSYS中一次性提取任意数量、编号不连续平面单元的面积,并将结果保存到文本文件,方便后续的绘图或是统计工作。


说明:文章转到新浪博客排版格式有点乱,要求更好的阅读体验可直接查看博客原文,链接如下。

https://yaoboli.me/2019/04/20/APDL-get-element-area/#more

你可能感兴趣的:(利用APDL命令提取单元面积)