Ansys Workbench 估计圆柱面受力变形后的圆柱度
问题:
仿真过程中有时会遇到要求提取圆柱面在受力变形后的圆柱度。若此时圆柱面有刚体偏移等,就无法直接在workbench界面中通过创建圆柱坐标系而读取圆柱度信息。

解决方案:
通过apdl后处理命令,提取待评估圆柱面的几何信息和变形信息。利用matlab强大的优化计算功能,评估圆柱面在变形后的圆柱度。

matlab评估圆柱度大致过程为,根据圆柱面节点,确定中心轴线,测量每个节点到中心轴线的距离,获得最大、最小距离差,即为圆柱度。
• 依据初始圆柱面确定中心点O,作为圆柱面的初始中心点;
• 以中心点O,计算O点到壁面的最小距离点A;
• 参考O、A点筛选合适的点B,要求点B尽可能在圆柱面轴线垂直的法平面附近,且∠BOA近似90°;(要求圆柱面圆周方向大于25个节点,轴向大于20层节点)
• 以O、A、B三个点为平面,提取法向向量,作为圆柱面的初始轴线;
• 根据初始中心点和初始轴线,结合圆柱度定义,构建目标函数;
• 利用matlab的优化极值功能,优化和中心点和轴线方向,使得目标函数获得极小值。此时中心点和轴线方向即为变形后所有节点的理想圆柱中心线;
操作方法:
首先,需要利用APDL后处理命令,在仿真模型计算后,提取待评估圆柱面的几何信息和变形信息。
1、 在named Selection中选择要评估的圆柱面,并命名为cyFace1、cyFace2、cyFace3…等。每个圆柱面单独命名。

2、 在求解Solution下插入Command命令,将附录1的APDL命令复制进来。并根据上一步补创建的cyFace数量,在command的属性栏ARG1内,填写数值。

3、 求解计算。计算完成后会在对应的目录文件夹下生产cyFace#.txt文档。

至此仿真计算工作已经完成,下步需要借助matlab(R2021B)软件完成圆柱度的估计。
利用matlab的自动优化求解极值的强大计算能力,构建圆柱度目标函数,评估原始圆柱面和变形后圆柱面的,圆柱度。
1、 打开matlab后将工作目录选择到附件的matlabProcess文件夹,选择mainProcess.m右键“运行”。

2、 运行程序后弹出txt文件选择框,选取仿真求解后处理生成的cyFace1.txt文件,即可。

3、 稍等片刻即可在命令栏内显示圆柱度评估结果。Output值共两行,第一行为初始圆柱面在变形前评估的圆柱度结果。第二行为cyFace面在受力变形后评估的圆柱度结果。并且显示两个散点图,左侧图为初始圆柱面(红色和绿色线表示选定A/B点);右侧图为变形后的圆柱面,中心黑色线,为程序估计的圆柱面中心轴线。

附录1:Command命令,在结果后处理中,提取cyFace#面的每个节点的原始坐标和变形量。(每次APDL命令内容无需更改,计算完成后会在对应的目录文件夹下生产cyFace#.txt文档)
!*******选择圆柱面组******导出节点编号,坐标位置,变形量,变形后的节点位置
!*******圆柱面组命名规则cyFace(NUM)*******
!*******设定face面的个数faceCount
*set,faceCount,ARG1 !由属性栏参数定义监测面的个数
!*set,faceCount,2
!*******main process
finish
/post1
set,last
*do,iFace,1,faceCount
*set,surfaceName,'cyFace%iFace%'
!*set,surfaceName,'face1'
allsel
cmsel,s,%surfaceName% !选取自定面,nameselection为cyface1、cyface2..。
*get,nodeCount,node,0,count !节点个数
*dim,nodeLoc,array,nodeCount,3,1 !三维数组
*dim,nodeDir,array,nodeCount,3,1
*dim,nodeTotal,array,nodeCount,3,1
*dim,nodes,array,nodeCount,1,1
*get,nodeMin,node,0,num,min !最小节点编号
*do,i,1,nodeCount
nodes(i)=nodeMin !最小节点编号开始循环,提取坐标,方向变形量,并求和
*get,nodeLoc(i,1),node,nodes(i),loc,x
*get,nodeLoc(i,2),node,nodes(i),loc,y
*get,nodeLoc(i,3),node,nodes(i),loc,z
*get,nodeDir(i,1),node,nodes(i),u,x
*get,nodeDir(i,2),node,nodes(i),u,y
*get,nodeDir(i,3),node,nodes(i),u,z
nodeTotal(i,1)=nodeLoc(i,1)+nodeDir(i,1)
nodeTotal(i,2)=nodeLoc(i,2)+nodeDir(i,2)
nodeTotal(i,3)=nodeLoc(i,3)+nodeDir(i,3)
nodeMin=ndnext(nodeMin) !循环至下一个节点
*enddo
*cfopen,%surfaceName%,txt !导出至txt文件
*vwrite,nodes(1),nodeLoc(1,1),nodeLoc(1,2),nodeLoc(1,3),nodeDir(1,1),nodeDir(1,2),nodeDir(1,3),nodeTotal(1,1),nodeTotal(1,2),nodeTotal(1,3)
(f9.1,' ',f16.6,' ',f16.6,' ',f16.6,' ',f16.8,' ',f16.8,' ',f16.8,' ',f16.8,' ',f16.8,' ',f16.8)
*cfclose
*enddo
以下内容为付费内容,请购买后观看
工程师必备
- 项目客服
- 培训客服
- 平台客服
TOP




















