8.
9. 10.
11.
:E End
―――――――――――――――――
构建帮助文件的控制文件头,把它存储为control_other: ――――――――――――――――― :F OTHER.HLP :D Modified on 1/17
:I 0, 0, 0 :!
――――――――――――――――― 构建总的帮助文件OTHER.HLP
%cat control_other head_other hlp_other end >OTHER.HLP
把我们构建好的帮助文件OTHER.HLP加入menulist55.ans中去。 最后menulist55.ans显示内容如下: ――――――――――――――――― ./UIMENU.GRN ./UIFUNC1.GRN ./UIFUNC2.GRN
/ansys55/docu/UICMDS.HLP /ansys55/docu/UICMDS.HPS /ansys55/docu/UIELEM.HLP /ansys55/docu/UIELEM.HPS /ansys55/docu/UIGUID.HLP /ansys55/docu/UIGUID.HPS /ansys55/docu/UITHRY.HLP /ansys55/docu/UITHRY.HPS /ansys55/docu/UIOTHR.HLP /ansys55/docu/UIOTHR.HPS ./OTHER.HLP
―――――――――――――――――
在我们的函数定义DoProject中加入联机帮助信息.
编辑UIFUNC2.GRN中的DoProject函数定义,由于我们定制的帮助文件名为Hlp_0_Contents,我们把它加入到函数定义中去,编辑完后该函数定义内容结果如下:
――――――――――――――――――――― :N Fnc_DoProject
:S 396, 147, 242 :T Command
:A Optimize my Project
:D Please Input Custom Information :C )*Set,My_H,150 :H Hlp_0_Contents Inp_NoApply Cmd_)*Cset,1,1 Fld_0
16
Typ_Lab
Prm_Custom the Geographic Information Fld_2
Prm_ Please Input the H for Analysis(100~200) Typ_INT
Def_*PAR(My_H) Cmd_)/Go Cmd_)fini Cmd_)/clear
Cmd_)*GET,My_H,CPAR,1 Cmd_)/Input,create,inp :E END :!
――――――――――――――――――――――――- 12. 万事具备,测试一下你自己构建的帮助文档把。
3几点说明
从前面可以看到,一个帮助文件一般有文件控制头和若干帮助文件结构块组成,对帮助文件结构块来说,其包含四个部分:头部分,数据控制部分,帮助内容部分和尾部分。与函数说明不同的是它增加了帮助内容部分,这里存放各种格式的帮助文档,其次它需要提供许多帮助内容部分的字节信息。所以构建帮助文件的时候一般都是分块构建,不断用wc或者ls命令观看字节信息,最后生成完善的帮助文件。感兴趣的同学可以自己生成强大的帮助文档信息,由于这一部分不是二次开发的重点,我们在这里也不详细讨论其细节了,利用上面的知识我们已经足以构建任何复杂的ASCII文档信息。
4 结束语
到这里为止,我们已经对UIDL的所有功能都基于例子进行了详细描述,讲到这里大家已经有足够的UIDL知识构建比较专业化的基于GUI界面的参数化建模本领了。在后续章节,我们将基于APDL和UPF知识对这一例子进行优化处理实现,希望大家保持充足的兴趣继续向下学习。
17
解析APDL
1 熟悉新朋友—APDL
APDL是我们即将结识的第二个强大二次开发工具。它的全称是ANSYS Parametric Design Language。APDL可以帮助你更加有效的进行分析计算,可以让你轻松自动化你的工作(循环、分支、宏等结构),并是一种高效的参数化建模手段。很多情况下,APDL主要用在优化设计或者自适应网格划分中。但在日常分析中如果你知道善用,APDL也将发挥其强大的优势,让你的工作变的生动起来。
2 二次开发工具之间的比较
APDL所能实现的功能通俗的说来应该是次于UPF而强与UIDL,但实际上是由于三者具体侧重点不同造成的:UIDL主要控制GUI界面的各类二次开发方法,涉及的分析部分就要少一些,APDL可以称其为和分析部分频繁打交道的一组小型工具,功能强大,但不和UIDL一样能够非常具体的针对某一两方面的二次开发处理,通常情况下的他融合在分析的角角落落中。UPF是三者之间的最强者,他能完成最复杂的二次开发工作,比如说构建新单元,复杂数据库交互,外围命令定制等,但UPF在很多情况下也借助了APDL命令来完全实现其功能。同样我们也能在UIDL中欠入APDL命令,来构建比较复杂的GUI二次开发工作。 一句话,UIDL、APDL和UPF三者各有所长,密不可分。结合使用三者,我们将能够实现任何强大的分析功能。
3 结束语
我们这里对APDL的介绍将着重于它的一些基本功能,而不会象UIDL那样用一组实例来完整的描述他的所有功能,当然其间也会夹杂讲述一些例子,来加强大家对APDL工具应用技巧。
APDL综合实例
1 问题说明
本章在阐明APDL技术时本想也采取实例的方式,把APDL的各个细节都用一个个详细的实例说清楚,无奈APDL细节内容比较繁复,而且不和UIDL那样各成体系,APDL的应用很多情况下都是和UIDL、UPF结合在一起应用的,它甚至渗透到基础分析中的各个环节中,可以说也是ANSYS的脚本基础。考虑到大家都不会有兴趣来聆听枯燥的数组构建法,宏函数的参元特性等罗嗦的APDL语法,这里我们打算用一个比
18
较大的综合实例来想大家描述一部分APDL的功能,从这里你将能看到我们能用APDL干些什么。
还记得UIDL实例解析二中的一个例子巴,这里我们有必要重温一下:
r
α 图1
H
(a) (b)
如图1(a)一所示,一带孔薄板,长4000mm,宽2000mm,顶部中心部分1800mm处承受42MP的压力,左右两个长圆孔中心分别踞四周1000mm,长圆孔的具体形式如图1(b)所示,上下分别为半圆,中部用直线衔接。这里假设长圆长轴与水平方向夹角为α。
为了使得孔边缘应力集中最小,这里拟调整α的大小(α∈[-π/2, π/2]),以便在固定的H情况下达到长圆孔周围应力集中最小。
在UIDL实例二的部分我们只是在GUI界面下实现了它的参数化建模,这部分工作在本章的综合实例中仍然有效,下面我们将一步步完全实现这一问题。
2 解题思想
本问题是在用户给定H的情况下求得α角的最优解,使得孔边最大拉应力最小(这是因为材料抗拉性能比较弱)。这里我们的想法是把α取每一个角度时候得到的孔边最大拉应力都求出,比较一下,得到孔边拉应力最小情况下对应的α取值。现在的问题是,我们只能够对每一离散的α值求取其孔边最大拉应力,让α在[0°~360°]之间连续取值不仅是无法做到的,而且在工程中也没有必要,这里我们拟每隔一定角度计算一下孔边最大拉应力,最终在这些有限的角度中求取出最佳的α值。因此我们还需要用户自定义求解的精度参数,即我们每隔多少角度来计算一次(决定了结果精确到什么程度)。比方说我们定义每隔5°计算一次的话,整个优化过程需要进行180/5=36次求解运算。
3 构建步骤
下面说明一下在构建过程中的一些全局参数: My_H:用户输入的H参数值
My_sita:每次计算对应的α参数值
My_dsita:每两次计算之间间隔的角度值(用户输入的参数)。 My_N:总共需要分析计算的次数。My_N=180/My_dsita My_sita0:初始α值,这里统一定义为0°。 My_MinS1:最优化位置处的最大拉应力值。(计算完以后才是)
19
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和对应的角
20