利用APDL命令提取单元面积

问题描述

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

01.png

建立上图模型的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命令将数组写入文本文件;
本例写出的单元编号和单元面积结果如下

02.png

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

小结

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

默认 最新
当前暂无评论,小编等你评论哦!
点赞 3 评论 收藏 1
关注