第七章 APDL 综合实例7.1 问题说明本章在阐明APDL 技术时本想也采取实例的方式,把APDL 的各个细节都用一个个详细的实例说清楚,无奈APDL 细节内容比较繁复,而且不和UIDL 那样各成体系,APDL 的应用很多情况下都是和UIDL 、UPF 结合在一起应用的,它甚至渗透到基础分析中的各个环节中,可以说也是ANSYS 的脚本基础。
考虑到大家都不会有兴趣来聆听枯燥的数组构建法,宏函数的参元特性等罗嗦的APDL 语法,这里我们打算用一个比较大的综合实例来想大家描述一部分APDL 的功能,从这里你将能看到我们能用APDL 干些什么。
还记得UIDL 实例解析二中的一个例子巴,这里我们有必要重温一下:如图1(a)一所示,一带孔薄板,长4000mm ,宽2000mm ,顶部中心部分1800mm 处承受42MP 的压力,左右两个长圆孔中心分别踞四周1000mm ,长圆孔的具体形式如图1(b)所示,上下分别为半圆,中部用直线衔接。
这里假设长圆长轴与水平方向夹角为α。
为了使得孔边缘应力集中最小,这里拟调整α的大小(α∈[-π/2,π/2]),以便在固定的H 情况下达到长圆孔周围应力集中最小。
在UIDL 实例二的部分我们只是在GUI 界面下实现了它的参数化建模,这部分工作在本章的综合实例中仍然有效,下面我们将一步步完全实现这一问题。
7.2 解题思想本问题是在用户给定H 的情况下求得α角的最优解,使得孔边最大拉应力最小(这是因为材料抗拉性能比较弱)。
这里我们的想法是把α取每一个角度时候得到的孔边最大拉应力都求出,比较一下,得到孔边拉应力最小情况下对应的α取值。
现在的问题是,我们只能够对每一离散的α值求取其孔图1 (b)H r边最大拉应力,让α在[0°~360°]之间连续取值不仅是无法做到的,而且在工程中也没有必要,这里我们拟每隔一定角度计算一下孔边最大拉应力,最终在这些有限的角度中求取出最佳的α值。
因此我们还需要用户自定义求解的精度参数,即我们每隔多少角度来计算一次(决定了结果精确到什么程度)。
比方说我们定义每隔5°计算一次的话,整个优化过程需要进行180/5=36次求解运算。
7.3 构建步骤下面说明一下在构建过程中的一些全局参数:My_H:用户输入的H参数值My_sita:每次计算对应的α参数值My_dsita:每两次计算之间间隔的角度值(用户输入的参数)。
My_N:总共需要分析计算的次数。
My_N=180/My_dsitaMy_sita0:初始α值,这里统一定义为0°。
My_MinS1:最优化位置处的最大拉应力值。
(计算完以后才是)My_Msita:最优化位置处对应的α值。
Mysmin:每次分析计算得到对应特定α角时的孔边最大拉应力。
(一般都是孔边产生应力集中,所以也是整个板料内部的最大拉应力处)_s1数组:对应特定α时求解得到各个节点上的最大拉应力值。
1.首先我们重新构建一比较完善的参数话建模脚本,取名为modaling.mac,该脚本针对固定的My_H和My_sita将构建整个几何模型,加好载荷和约束,具体细节请参看附录。
2.构建脚本mysolve.mac:――――――――――――――――――――――My_sita0=0My_N=180/My_dsita*do,I,0,My_N-1parsav,all,myparfini/clear,startparres,new,myparMy_sita=My_sita0+My_dsita*Imodaling/solusolve/post1ar11=ndinqr(0,14)_s1=*dim,_s1,,ar11*vget,_s1(1),node,1,s,1*vscfun,mysmin,max,_s1(1)*if,I,eq,0,thenMy_MinS1=mysminMy_Msita=My_sita*ELSE*IF,mysmin,lt,My_MinS1,thenMy_MinS1=mysminMy_Msita=My_sita*ENDIF*ENDIFparsav,all,mypar*enddo―――――――――――――――――――――――――下面是几点说明:◆程序整个框架是先根据用户输入的参数定制好一些解题环境,比方说求出需要重复计算的次数My_N,然后用APDL的*do循环结构繁复执行My_N次,每次求得对应角度的孔边最大拉应力值,不断积累出这些对应角度孔边最大拉应力值的最小结果。
完成了My_N次结果后,最优结果My_MinS1和对应的角度My_Msita也就求出来了。
◆不同次分析计算过程前必须对ANSYS环境中的现有模型清零,用到/clear命令,但该命令会使用户参数同时清零,这里用到parsav和parres技术,在每次清零过程前先把当前工作区的参数保存起来,清模型结束后再调入工作区,这样就实现了只清模型、不清参数的效果。
◆解题结束后,我们先用ndinqr(0,14)这一UPF命令求取模型中的节点总数。
然后用*vget命令把所有节点上的最大拉应力都保存到_s1数组中,最后用*vscfun函数得到_s1数组中的最大值。
◆注意每次求解完提取数据时都要重新定义_s1数组的大小(因为每次划分单元后总节点数不同),这时候每次ANSYS都回出现让你确认是否把已经存在的_s1数组结构改变的对话框,这将导致自动化求解中断,这里我们采用的一个技巧是每次重新定义_s1数组前先清掉_s1数组(用_s1=命令行)。
这样救避免了Ansys的询问。
同样解决/clear命令的Ansys询问方法就是写全/clear命令:/clear,start。
注意这里我们是必须要用start参数的,它表面我们在新建模型时读入start55.ans文件,我们必须在工作目录中构建一个我们自己的start55.ans文件,里面添加上PI参数的说明(因为modaling.mac宏文件中将利用这一参数,如果系统环境中没有这一参数的说明,将产生建模错误)。
◆解决完一次运算,保存完数据后记得用parsav函数保存环境参数。
3.完善GUI参数化界面这里我们要比上次UIDL实例二中多增加一个参数My_dsita,为此我们修改UIFUNC2.GRN函数中DoProject函数:―――――――――――――――――――:N Fnc_DoProject:S 0, 0, 0:T Command:A Optimize my Project:D Please Input Custom Information:C )*Set,My_H,150:C )*Set,My_dsita,90:H Hlp_0_ContentsInp_NoApplyCmd_)*Cset,1,2Fld_0Typ_LabPrm_Custom the Geographic InformationFld_2Prm_ Please Input the Dsita for Analysis(1~90)Typ_INTDef_*PAR(My_dsita)Fld_3Prm_ Please Input the H for Analysis(100~200)Typ_INTDef_*PAR(My_H)Cmd_)/GoCmd_)*GET,My_H,CPAR,2Cmd_)*GET,My_dsita,CPAR,1Cmd_)mysolve:E END:!――――――――――――――――――――――――这里可以看到和UIDL篇中的实例相比,多加了参数My_dsita的用户化输入。
最后的命令修改成直接用文件名调用(这是因为我们把文件名后缀改为了.mac,它标志着标准的宏文件)。
最后的对话框显示如下:用户定制好分析精度和H值后,点击OK就开始了完整的分析过程。
4.求解结果最后求解完毕后得到了一些最优化结果:用*status命令可以看到所有参数结果(这里我用每隔5度进行一次分析求解):My_Msita=40°,用该最优化建模图形为:这里由于实常数对应力集中的效应没有影响,我们就不再给出具体计算结果来了。
有效的仅是在同样的载荷条件下不同角度的孔上最大拉应力的情况。
7.4 几点说明APDL中的参数化建模、优化涉及是十分复杂有效的,这里我们只是给出了一个小小的例子,用来举一反三。
套用同样的方法和机制,我们可以完成更加复杂的问题。
这里我们仅仅用到了APDL功能中的一小部分,我们完全可以想象一下UIDL+APDL+UPF能够完成什么样复杂程度的功能—几乎是任何功能!7.5 结束语这里结合APDL,UIDL和UPF讲述了一个比较综合的例子,在以后描述了UPF功能后,大家将更加为UPF功能的强大而神往不已。
附录:modaling.mac:――――――――――――――――――――――――――――――!This is a script which can create the modal with a parameter sita.!Parameter Settingsita=My_sita/180*PIr=0.2H=My_H/1000!Customize the Environmentkeyw,pr_struc,1/prep7et,1,shell63r,1,0.12,0.12,0.12,0.12uimp,1,ex,dens,nuxy,2.1e9,1.2,0.375!Modeling!Create platek,1,0,0k,2,2,0k,3,2,2k,4,0,2k,5,0.9,2k,6,1,1l,1,2l,2,3l,3,5l,5,4l,4,1al,1,2,3,4,5!Create hole!Create my coordinatek,7,1+H*cos(sita),1+H*sin(sita)k,10,1+H*cos(sita),1+H*sin(sita),100 k,8,1+r*cos(sita+PI/2),1+r*sin(sita+PI/2) cskp,11,0,6,7,8csys,11!Create Holek,9,H,rl,7,9l,7,6adrag,6,,,,,,7arotat,6,,,,,,7,10,-90arsys,y,2,3,1arsym,x,2,5,1aadd,2,3,4,5,6,7,8,9asba,1,10csys,0arsym,x,2, , , ,0,0nummer,all, , , ,lowaadd,1,2/auto,1gplot!Meshing the planesmrt,6amesh,all!Add DOFDK,2,UX,0, ,,UYDK,14,UX,0,,,UY!Add PressureSFL,4,PRES,42SFL,11,PRES,42―――――――――――――――――――――――――――本人要分析一个小模型,需要不断改变其中某一个结构参数,然后重新建模,加载分析。