最近发现群里有不少同学在咨询ANSYS获取最值的问题,水哥这里就简单总结下常用的最值获取命令流,主要是利用*get命令,仅供大家参考。
问题描述:在参数化建模中,新建几何对象、或者节点单元的时候,需要知道当前模型中的元素编号的最值。
以关键点为例,其余类型替换成关键词即可,如查询单元最大编号,将KP换成Elem,查询节点最大编号,将Kp换为node。
*get,kpmaxd,kp,0,num,maxd
*get,kpmind,kp,0,num,mind
注意这里max、maxd和min、mind的区别,max和min分别是获取当前选择集中的最大或者最小编号,而maxd和mind则是获取当前模型中的最大或者最小编号,当采用Allsel,all命令选择全部时,两者等效。
!以关键点X方向坐标为例,其他对象替换方法可参考前文所述。
注意此处的坐标值是在当前激活坐标系下的坐标值,获取之前应首先用csys命令确定当前坐标系,除此之外,有些元素并无坐标值概念,例如Line。
问题描述:模型分析完毕之后为了评定模型状态,可能会需要获取结构在当前工况下的位移最大值以及相应的节点编号以便做下一步计算分析。
!首先将研究对象按照真实值或者绝对值升序或者降序排序
nsort,u,x,0,1 !可自行Help查看nsort使用方法
*get,Uxmax,sort,0,max !最大值获取
*get,Uxmaxd,sort,0,imax !最大值对应的编号获取
除此之外,还可以通过绘制云图后,在通过命令获取最大值,但相应的节点编号缺无法获取,命令如下:
注意上述值均为当前结果坐标系下的值,若要获取不同坐标系下的值,如想要获取周向、径向的值,需通过Rsys命令将结果坐标系进行转换,默认为笛卡尔坐标系。将上述命令中的max改为min即可获取最小值,将X改为其他标识符(如Y、Z、Sum)即可以获取在其他方向的值。
这里需要分两种类型来讲,一种是没有采用单元表,如实体单元、壳单元的应力;一种是采用了单元表,如杆单元和梁单元,两者区别主要在于对单元表的运用。
提取方法同上述位移最值,只是将标识符稍作改变即可,如下:
!首先将研究对象按照真实值或者绝对值升序或者降序排序
nsort,s,eqv,0,1 !可自行Help查看nsort使用方法
*get,Semax,sort,0,max !最大值获取
*get,Semaxd,sort,0,imax !最大值对应的编号获取
对于梁单元、杆单元,除了位移结果外,其余大部分结果都需要通过单元表获取,例如弯矩、轴力、剪力、应力等,在提取相应结果的最大值最小值时命令流略有不同,总的说来,对于采用单元表提取最值,主要有两种情况:
1)单元表项中不分I节点和J节点,如link180中的轴力Force
Etable,Zforce,smisc,1 !采用单元获取轴力
Esort,etab,Zforce,0,1 !对单元表进行排序
*get,Zforce_max,sort,0,max !最大值获取
*get,Zforce_maxd,sort,0,imax !最大值对应的单元编号获取
2)单元表项中需要分I节点和J节点,如Beam189中弯矩、剪力等
对于此种情况,需要分别获取I节点和J节点的最大值,最后通过比较大小,获取最终最大值。有同学可能会有疑问为什么要比较I和J节点的最大值, 因为在一个结构连续体中,1号单元的J节点就是2号单元的I节点,那么是不是只需要提取I节点的最大值就可以了。
这里之所以要比较两者最大值,主要是考虑端部出现最大值的情况,例如悬臂梁受力情况,参考命令流如下,以提取beam189单元My最大值为例:
/post1
set,1,last !指定具体的荷载步
allsel,all
Etable,MYI,smisc,2 !采用单元获取I节点MY值
Etable,MYJ,smisc,15 !采用单元获取J节点MY值
Esort,etab,MYI,0,1 !对单元表MYI进行排序
*get,MYI_max,sort,0,max !最大值获取
Esort,etab,MYJ,0,1 !对单元表MYJ进行排序
*get,MYJ_max,sort,0,max !最大值获取
!获取绝对值
MYI_max=abs(MYI_max)
MYj_max=abs(MYJ_max)
!比较两者大小,取最大值
MYmax=MYI_max
*if,MYmax,le,MYJ_max,then
MYmax=MYJ_max
*endif
*status,MYmax
前面四种情况主要适用于通用后处理中,而对于时间历程后处理的变量情况,有时候也需要获取最大值最小值,如果打开时间历程后处理界面,可以直接看到最大值最小值,如下所示:
但如果需要采用命令获取最大值最小值,目前本人还没发现可以直接获取的命令,如果有同学知道,可以留言共享一下,目前本人的思路如下:
Nsol,2,230,u,x !获取230号节点X方向位移时程.
*get,WD,active,0,solu,ncmss
*dim,Ux2,array,WD
!将变量转为数组
VGET,Ux2(1),2
Ux2_max=Ux2(1)
Ux2_min=Ux2(1)
*do,i,1,wd
!最大值判定
*if,Ux2_max,le,Ux2(i),then
Ux2_max=Ux2(i)
*endif
!最小值判定
*if,Ux2_min,ge,Ux2(i),then
Ux2_min=Ux2(i)
*endif
*enddo
*status,Ux2_max !最大值
*status,Ux2_min !最小值
以上便为在ANSYS中常见的获取最值的命令流,仅供大家参考学习~!
祝好
ANSYS结构院
2020.10.27
暂无评论内容