ANSYS结果用APDL输出问题

标签:
apdl结果输出 |
分类: 问答环节 |
有同学在ANSYS结果自动导出遇到问题,对此稍作说明。
一个简单的模型求解,结果显示如下图,下图为第一主应力结果,想要输出3号线上每一步节点的最大主应力,3号线是最上面的一条线,求解单元为183,属于二次单元,有中间节点。
求解过程一共有三步,仅针对其中一步以说明,其他一样,加个循环即可。
!选择3号线上的所有节点
alls,all
lsel,r,,,3
nsll
!获取3号线的节点总数,node_num
*get,node_num,node,0,count
!获取目前节点集中最小节点号,node_min
*get,node_min,node,,num,min
!定义一维数组,维度为节点数目node_num
*dim,A,,node_num
!将最小节点号赋值给一个临时变量
temp_node=node_min
!数组的第一个数为最小节点号
A(1)=temp_node
!循环,利用ndnext函数,逐步获取节点号,存储
*do,i,2,node_num
temp_node=ndnext(temp_node)
A(i)=temp_node
*enddo
!此时数组A存储了该节点集的所有节点号
!后续只需循环遍历该数组即可得到每个节点号
!!!!!!获取最大第一主应力的值
!定义一个用于比较的初值temp_max
!同时还定义s1_max初值为0,目的是为了避免获取二次单元中间应力值时出现问题,因为二次单元的中间节点是没有应力值的,只有位移值。
temp_max = 0
s1_max = 0
!循环遍历,获取数组A的每一个节点号,继而通过*get获取该节点的S1应力值
*do,i,1,node_num,1
node_num = A(i)
*get,s1_max,node,node_num,s,1
s1_max = abs(s1_max)
*if,s1_max,gt,temp_max,then
temp_max = s1_max
*endif
*enddo
最终,s1_max保存的便是3号线上节点中最大第一主应力值。
在此基础上,还可以获取对应的节点号,以及利用*cfopen和*vwrite函数将结果写入文件,不作展示。