ANSYS二次开发

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第七章 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_dsita

My_sita0:初始α值,这里统一定义为0°。

My_MinS1:最优化位置处的最大拉应力值。(计算完以后才是)

My_Msita:最优化位置处对应的α值。

Mysmin:每次分析计算得到对应特定α角时的孔边最大拉应力。(一般都是孔边产生应力集中,所以也是整个板料内部的最大拉应力处)_s1数组:对应特定α时求解得到各个节点上的最大拉应力值。

1.首先我们重新构建一比较完善的参数话建模脚本,取名为

modaling.mac,该脚本针对固定的My_H和My_sita将构建整个几何模

型,加好载荷和约束,具体细节请参看附录。

2.构建脚本mysolve.mac:

――――――――――――――――――――――

My_sita0=0

My_N=180/My_dsita

*do,I,0,My_N-1

parsav,all,mypar

fini

/clear,start

parres,new,mypar

My_sita=My_sita0+My_dsita*I

modaling

/solu

solve

/post1

ar11=ndinqr(0,14)

_s1=

*dim,_s1,,ar11

*vget,_s1(1),node,1,s,1

*vscfun,mysmin,max,_s1(1)

*if,I,eq,0,then

My_MinS1=mysmin

My_Msita=My_sita

*ELSE

*IF,mysmin,lt,My_MinS1,then

My_MinS1=mysmin

My_Msita=My_sita

*ENDIF

*ENDIF

parsav,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

相关文档
最新文档