ansys疑难问题解析

更新时间:2023-10-05 09:04:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

ANSYS使用经验

[b]ANSYS使用经验[/b]

1,如何定制Beam188/189单元的用户化截面 2,ANSYS 查询函数(Inquiry Function) 3,ANSYS是否具有混合分网的功能? 4,机器人结构的优化分析

5,利用ANSYS随机振动分析功能实现随机疲劳分析 6,耦合及约束方程讲座一、耦合

7,耦合及约束方程讲座二、约束方程 8,巧用ANSYS的Toolbar

9,如何得到径向和周向的计算结果? 10,如何加快计算速度

11,如何考虑结构分析中的重力

12,如何使用用户定义用户自定义矩阵 13,如何提取模态质量

14,ANSYS的几种动画模式

Q: ANSYS中有好几种动画模式,但并非同时可用。那么有哪几种类型,何时可用呢?

Q: 这些动画模式的区别是什么?

Q: 如何存储在ANSYS中创建的动画?

Q: A用Bitmap模式存储的.avi文件与用AVI模式存储的.avi文件有何不同? Q: UNIX上制作的动画能否在PC上播放? Q: ANIMATE是否能读入所有的动画文件? 15,如何正确理解ANSYS的节点坐标系

16,为什么在用BEAM188和189单元划分单元时会有许多额外的节点?可不可以将它们删除?

17,应用ANSYS软件进行钢板弹簧精益设计 18,用ANSYS分析过整个桥梁施工过程

Q: I must build the whole model and kill the elements that don't take part in the analysis of certain erection stage, so i think the multiple steps is not a useful way to solve the problem

19,在ANSYS5.6中如何施加函数变化的表面载荷

20,在ANSYS中怎样给面施加一个非零的法向位移约束? 21,在任意面施加任意方向任意变化的压力 22,ANSYS程序的二次开发

23,参数化程序设计语言(APDL) 24,用户界面设计语言(UIDL) 25,用户程序特性(UPFs) 26,ANSYS数据接口 27,解析UIDL篇 28,UIDL实例解析一 29,UIDL实例解析二

来自中国有限元联盟

全文:

如何定制Beam188/189单元的用户化截面

ANSYS提供了几种通用截面供用户选用,但有时不能满足用户的特殊需求。为此,ANSYS提供了用户创建截面(库)的方法。如果你需要创建一个非通用横截面,必须创建一个用户网格文件。具体方法是,首先创建一个2-D实体模型,然后利用SECWRITE命令将其保存(Main Menu>Preprocessor>Sections> -Beam-Write Sec Mesh)。该过程的细节如下: 1. 创建截面的几何模型(二维面模型)。

2. 对所有线设置单元份数或者单元最大尺寸 (Main Menu>Preprocessor> -Meshing-Size Cntrls>-Lines-Picked Lines或使用MeshTool)。记住:保证模型中的区格(cell)数目不能超过250个。

3. 选择菜单Main Menu>Preprocessor>Sections>-Beam-Write Sec Mesh,弹出一个拾取窗口,单击Pick All拾取包含区格的所有面。

4. ANSYS自动在所有面上创建区格。在划分网格时,ANSYS可能显示单元形状差的消息,也可以被忽略不显示,但是总能看到一条消息“Unable to mesh area....”。如果已经完成上述工作,你清除所有面上的单元(Main Menu>Preprocessor>-Meshing-Clear> Areas),并重复第2、3、4步,即必须重新控制网格密度。

5. 如果第4步成功则弹出Write Section Library File对话框,File Name域填入一个未用过SECT文件名,Drives域指定一个截面文件存放驱动器,Directories域指定一个截面文件存放目录,然后单击按钮OK,完成用户截面文件建立。如果在第3步中给线指定太多单元份数,区格和节点的数目可能超过限制范围,必须清除所有面上的单元2~4步,直到获得合适数量的区格和节点。

一旦完成上述工作,用户可以在以后分析中读取用户网格文件 (Main Menu > Preprocessor > Sections > -Beam-Read Sect Mesh),定义成适当的截面ID号,就与通用梁完全一致。要想检查用户截面,只要绘制截面(网格)图(Main Menu>Preprocessor>Sections>Plot Section)或者列表截面属性(Main Menu>Preprocessor>Sections>List Sections)。

ANSYS 查询函数(Inquiry Function) 在ANSYS*作过程或条件语句中,常常需要知道有关模型的许多参数值,如选择集中的单元数、节点数,最大节点号等。此时,一般可通过*GET命令来获得这些参数。现在,对于此类问题,我们有了一个更为方便的选择,那就是查询函数 - Inquiry Function。

Inquiry Function类似于ANSYS的 *GET 命令,它访问ANSYS数据库并返回要查询的数值,方便后续使用。ANSYS每执行一次查询函数,便查询一次数据库,并用查询值替代该查询函数。

假如你想获得当前所选择的单元数,并把它作为*DO循环的上界。传统的方法是使用*GET命令来获得所选择的单元数并把它赋给一个变量,则此变量可以作为*DO循环的上界来确定循环的次数 *get, ELMAX,elem,,count

*do, I, 1, ELMAX ? ? *enddo

现在你可以使用查询函数来完成这件事,把查询函数直接放在*DO循环内,它就可以提供所选择的单元数 *do, I, ELMIQR(0,13) ? ? *enddo

这里的ELMIQR并不是一个数组,而是一个查询函数,它返回的是现在所选择的单元数。括弧内的数是用来确定查询函数的返回值的。第一个数是用来标识你所想查询的特定实体(如单元、节点、线、面号等等),括弧内的第二个数是用来确定查询函数返回值的类型的(如选择状态、实体数量等)。

同本例一样,通常查询函数有两个变量,但也有一些查询函数只有一个变量,而有的却有三个变量。

查询函数的种类和数量很多,下面是一些常用、方便而快速快捷的查询函数 1 AREA-arinqr(areaid,key)

areaid-查询的面,对于key=12,13,14可取为0; key-标识关于areaidr的返回信息 =1, 选择状态 =12,定义的数目 =13,选择的数目 =14,定义的最大数 =-1,材料号 =-2,单元类型 =-3,实常数 =-4,节点数 =-6,单元数 ?

arinqr(areaid,key)的返回值 对于key=1

=0, areaid未定义 =-1,areaid未被选择 =1, areaid被选择 ?

2 KEYPOINTS-kpinqr(kpid,key)

kpid-查询的关键点,对于key=12,13,14为0 key -标识关于kpid的返回信息 =1,选择状态 =12,定义的数目 =13,选择的数目 =14,定义的最大数目 =-1,数料号

=-2,单元类型 =-3,实常数

=-4,节点数,如果已分网 =-7,单元数,如果已分网 kpinqr(kpid,key)的返回值 对于key=1 =-1,未选择 =0,未定义 =1, 选择

3 LINE-lsinqr(lsid,key)

lsid-查询的线段,对于key=12,13,14为0 key-标识关于lsid的返回信息 =1, 选择状态 =2, 长度

=12,定义的数目 =13,选择的数目 =14,定义的最大数 =-1,材料号 =-2,单元类型 =-3,实常数 =-4,节点数 =-6,单元数 ?

4 NODE-ndinqr(node,key)

node-节点号,对于key=12,13,14为0 key-标识关于node的返回信息 =1, 选择状态 =12,定义的数目 =13,选择的数目 =14,定义的最大数 =-2,超单元标记 =-3,主自由度 =-4,激活的自由度 =-5,附着的实体模型 ndinqr(node,key)的返回值 对于key=1 =-1,未选择 =0,未定义 =1, 选择

5 VOLUMES-vlinqr(vnmi,key)

vnmi-查询的体,对于key=12,13,14为0 key-标识关于vnmi的返回信息

=1,选择状态 =12,定义的数目 =13,选择的数目 =14,定义的最大数目 =-1,数料号 =-2,单元类型 =-3,实常数 =-4,节点数 =-6,单元数 =-8,单元形状 =-9,中节点单元 =-10,单元坐标系

vlinqr(vnmi,key)的返回值 对于key=1 =-1,未选择 =0,未定义 =1, 选择

ANSYS是否具有混合分网的功能?

ANSYS具有混合网格剖分的功能。例如两个粘在一起的面,可以对一个面进行三角形划分,再对另一个面进行四边形划分。过程见下列命令: /prep7 et,1,42 rect,,1,,1 rect,1,2,,1 aglue,all mshape,0,2d amesh,1 mshape,1,2d amesh,3

机器人结构的优化分析

摘要 机器人结构的有限元优化设计中,需要对设计方案多次修改、计算。除了计算工作以外,结构的修改工作通常是由手工完成,在整个设计工作量中所占比重是比较大的。本文给出一种利用ANSYS软件提供的APDL语言对设计方案进行优化的方法。利用这种方法,结构的修改不再需要人工干预,整个优化过程在使用APDL语言编写的用户优化程序的控制下自动进行,能够有效地提高优化工作的效率和可靠性。关键词:有限元,结构优化1. 问题的提出 工业机器人是计算机技术出现后发展起来的一种新型机械结构,工作效率和机动性比传统机械高很多。随之而来的是,机器人的结构设计在减少质量、提高刚度方面比传统机械结构有更高的要求。在设计工作中,结构的最优化显得更为重要。 在结构的优化设计中,有限元法是一个比较有效的方法。通常,建立模型和模型的修改都是手工完成的。对于结构比较复杂或者需要修改的地方很多的情况下,优化的时间比较长。其中计算时间相对较少,建模和结构修改所占比重较大。如何减少建

4. 在减缩自由度分析中,如果主自由度要从耦合自由度集中选取,只有主节点的自由度才能被指定为主自由度。

5. 在结构分析中,耦合自由度以生成一刚体区域有时会引起明显的平衡破坏。不重复的或不与耦合位移方向一致的一个耦合节点集会产生外加力矩但不出现在反力中。

耦合及约束方程讲座二、约束方程

约束方程提供了比耦合更通用的联系自由度的方法。有如下形式: 这里U(I)是自由度,N是方程中项的编号。如何生成约束方程1. 直接生成约束方程 o 直接生成约束方程:命令:CEGUI: Main Menu>Preprocessor>Coupling / Ceqn>Constraint Eqn下面为一个典型的约束方程应用的例子,力矩的传递是由BEAM3单元与PLANE42单元(PLANE42单元无平面转动自由度)的连接来完成的: 图12-1建立旋转和平移自由度的关系如果不用约束方程则节点2处表现为一个铰链。下述方法可在梁和平面应力单元之间传递力矩,自由度之间满足下面的约束方程:ROTZ2 = (UY3 - UY1)/100 = UY3 - UY1 - 10*ROTZ2 相应的ANSYS命令为:CE,1,0,3,UY,1,1,UY,-1,2,ROTZ,-10 o 修改约束方程在PREP7或SOLUTION中修改约束方程中的常数项:命令:CECMODGUI: Main Menu>Preprocessor>Coupling / Ceqn>Modify ConstrEqnMain Menu>Preprocessor>Loads>Other>Modify ConstrEqnMain Menu>Solution>Other>Modify ConstrEqn如果要修改约束方程中的其它项,必须在求解前在PREP7中用使CE命令(或相应GUI途径)。 2. 自动生成约束方程 o 生成刚性区域CERIG命令通过写约束方程定义一个刚性区域。通过连接一主节点到许多从节点来定义刚性区。(此*作中的主自由度与减缩自由度分析的主自由度是不同的)命令:CERIGGUI: Main Menu>Preprocessor>Coupling / Ceqn>Rigid Region将CERIG命令的Ldof设置为ALL(缺省),此*作将为每对二维空间的约束节点生成三个方程。这三个方程在总体笛卡尔空间确定三个刚体运动(UX、UY、ROTZ)。为在二维模型上生成一个刚性区域,必须保证X─Y平面为刚性平面,并且在每个约束节点有UX、UY和ROTZ三个自由度。类似地,此*作也可在三维空间为每对约束节点生成六个方程,在每个约束节点上必须有(UX、UY、UZ、ROTX、ROY和ROTZ)六个自由度。输入其它标记的Ldof域将有不同的作用。如果此区域设置为UXYZ,程序在二维(X,Y)空间将写两个约束方程,而在三维空间(X、Y、Z)将写三个约束方程。这些方程将写成从节点的平移自由度和主节点的平移和转动自由度。类似地,RXYZ标记允许生成忽略从节点的平移自由度的部分方程。其它标记的Ldof将生成其它类型的约束方程。总之,从节点只需要由Ldof标记的自由度,但主节点必须有所有的平移和转动自由度(即二维的UX、UY和ROTZ;三维的UX、UY、UZ、ROTX、ROTY、ROTZ)。对由没有转动自由度单元组成的模型,应当考虑增加一个虚拟的梁单元以在主节点上提供旋转自由度。 o 将疏密不同的已划分网格区域连在一起可将一个区域(网格较密)的已选节点与另一个区域(网格较稀)的已选单元用CEINTF命令(菜单途径Main Menu>Preprocessor>Coupling / Ceqn>Adjacent Regions)连起来生成约束方程。 这项*作将不相容网格形式的区域“系”在一起。在两区域的交界处,从网格稠密的区域选择节点A,从网格粗糙区域选择单元B,用区域B单元的形函数,在相关的区域A和B界面的节点处写约束方程。ANSYS允许这些节点位置使用两公差准则。节点在单元之外超过第一公差就认

为节点不在界面上。节点贴近单元表面的距离小于第二公差则将节点移到表面上,见下图。 对CEINTF命令有些限制:应力或热通量可能会不连续地穿过界面。界面区域的节点不能指定位移。可用每节点有六个自由度的单元接合6自由度实体。 o 从已有约束方程集生成约束方程集可用CESGEN命令从已有约束方程集生成约束方程。那么已有约束方程集内的节点编号将增加以生成另外的约束方程集。另外约束方程集的标记和系数保持与原集的一致。命令:CESGENGUI: Main Menu>Preprocessor>Coupling / Ceqn >Gen w/same DOF 使用约束方程的注意事项· 所有的约束方程都以小转动理论为基础。因此,它应用在大转动分析中〔NLGEOM〕应当限制在约束方程所包含的自由度方向无重大变化的情况。 · 约束方程的出现将产生不可预料的反力和节点力结果。 · 由于相邻区域网格疏密不同,边界上的相容性仍然存在。但是当网格越密,这种不相容的危害就越小。

巧用ANSYS的Toolbar

ANSYS在图形界面方面的最大特点是用户可以根据自己的目的定制自己的图形界面。尽管ANSYS提供了专门的菜单开发工具UIDL语言,但毕竟只有少数熟练的用户能很好地使用。但有一种方法特别适合初学者使用,那就是通过ANSYS提供的Toolbar,把ANSYS常用的命令和宏定制成按钮,这样需要反复地点取菜单来执行的常用命令,通过点击一次Toolbar按钮就可以完成了。

定制按钮的方法有两种:菜单方式与命令方式。菜单方式就是直接点菜单Utility Menu>Macro>Edit Abbreviations ?或Utility Menu>Macro>Edit Toolbar ?;而命令方式就是直接执行命令*ABBR(Abbreviation的缩写)。ANSYS的db文件自动保存你所增加的按钮,但是每次重新开始新的分析,都需要重新定义每个按钮。如果想要在每次启动ANSYS或开始新的分析时都能自动加载这些快捷按钮,通常是把这些按钮对应的*ABBR命令放在ANSYS的启动文件star56.ans(对ANSYS5.6)中,ANSYS在每次启动时会自动加载这些命令。ANSYS的启动文件star56.ans在ANSYS安装目录下的DOCU目录中,如c:\\ansys56\\docu\\star56.ans,它是一个文本文件,可以用通用的文本编辑器打开和编辑它。其实该文件提供了一个内容很丰富的模板,它收集了许多ANSYS常用命令的缩略,只不过都把它们注释掉了,你只需去掉前面的注释符(!),就可以在进入ANSYS后在Toolbar中看到它们。你也可以把所有的*ABBR命令放在一个单独的文件中,然后在启动文件中加入一条命令ABBRES,用ABBRES命令的好处是你在任何时候都可以加载这些快捷按钮,这对于你如果使用由别人建的模型,而他用的是不同的Toolbar,这是因为Toolbar是保存在模型文件中(jobname.db),你可以发现采用这样的方法给你带来很大的方便。

我承认我是一个Toolbar迷,把许多命令和宏放在Toolbar中使我的工作更快和更有效率。在我的Toolbar中,大多数按钮是直接执行ANSYS命令和宏,其中也有一些按钮是用来调入新的Toolbar实现一些新的功能。通过将一个Toolbar嵌入到另一个Toolbar中,可以将Toolbar分成前处理和后处理等大类,也可以列出一些特别的信息有助于工作。不过我个人的倾向不赞成用太多的嵌套Toolbar,因为点三到四层按钮与点三到四级菜单差不多。宁可在一个Toolbar中有许多按钮,也不要有许多嵌套Toolbar。 包含43个按钮的toolbar 减少了11个按钮的toolbar

尽管最好能把所有需要的按钮一次全部调进来,但有时发现这也不是好事。有一天我数了一下Toolbar中的按钮,竟然发现有43个按钮,尽管这不是一个世界记录,但这确实太多了,此时我才意识到我这个toolbar迷困扰于过多的按钮混乱中。得想办法结束这种状态。我决定摆脱这种按钮迷的状态,开始精简我的toolbar,去掉那些不太常用的按钮。我开始研究toolbar,结果发现没有一个按钮在工作中不太常用。我几乎每天都要用到所有这些命令,少了任何一个,我都要花时间到菜单堆里去找这些命令。我想保持原有toolbar中的所有功能,但我要把按钮数减下来,我能做得到吗? 再瞧一下toolbar,我发现打开和关闭六种实体(keypoints,lines,areas,volumes,和elements)的编号显示共用了12个按钮,此外,还有许多按钮用来打开和关闭显示节点和单元坐标系,线的方向和局部坐标系等;还有我用单独的按钮控制矢量模式和光栅模式显示。结果发现有22个按钮用来决定实体的编号和符号以及显示模式的开关。如果我能把每组开和关的按钮用一个按钮来代替,那么我可以把按钮数减少11个,这是一个很可观的数字。我决定写一个宏,它能够确定当前的设置,然后翻转该设置,我给它取名叫numtog.mac。在确定了程序的框架后,我开始查看关于*GET命令的帮助文档,看看是否能得到/PNUM,/PSYMB和显示模式的设置状态。令我失望的是,我发现尽管*GET命令可以设置显示模式,但不能得到关于/PNUM和/PSYMB的设置,没有它我就无法实现我的宏,失望之感油然而生。非常时候会有非常手段,文档中没有说明由*GET得到的量并不表示一定不可以获得,也许通过我的努力可以得到。我决定从其它地方找,在这以前我经常用此办法找到其它信息,我想到了控制ANSYS菜单系统的文件,因为ANSYS在建立关于/PNUM和/PSYMB的设置时也需要相关的信息,也许它以未公开的方式使用。我开始查找UIFUNC1.GRN和UIFUNC2.GRN,果然在UIFUNC2.GRN文件中找到了我要的信息,在该文件中我找到了控制编号和符号显示的命令,它也是由*GET命令获得,只不过时以一种特殊的方式,我就把相关的命令拷贝和粘帖到我的宏文件中,以节省时间。 尽管不推荐使用此类*GET命令,但有些高级的APDL编程人员经常使用。问题是未公开的*GET命令在5.6中能使用,但不能保证在5.7中也一定能使用,这只有等你试了以后才知道。 让我们来看一个例子,它用来确定keyponits编号的设置状态,格式如下: *get,ar20,common,,d3com,,int,104从这个命令格式我们可以推断一些信息:其中的“Common”是指储存在公共数据块中的数据,“D3com”是该公共数据块的名字,“Int”指数值数据以整数格式存储,“104”是我们所要数据存储的位置。所以上面这条命令是告诉ANSYS提取在公共数据块“D3com”104位置的整型数据,并把它赋给变量ar20,通过试验知道,当keypoints编号显示为关闭时ar20为0,而开时为1,即用1和0表示开和关。 我的新toolbar已用了几星期了,很方便,它比旧的toolbar减少了25%的按钮。现在我的toolbar小多了,我还可以增加其它一些命令,如控制/EDGE的开和关等等。相信你会得到一些收益。

如何得到径向和周向的计算结果?

在圆周对称结构中,如圆环结构承受圆周均布压力。要得到周向及径向位移,可在后处理/POST1中,通过菜单General Postproc>Options for Outp>Rsys>Global cylindric 或命令Rsys,1 将结果坐标系转为极坐标,则X方向位移即为径向位移,Y向位移即为周向位移。

如何加快计算速度 在大规模结构计算中,计算速度是一个非常重要的问题。下面就如何提高计算速度作一些建议: 1. 充分利用ANSYS MAP分网和SWEEP分网技术,尽可能获得六面体网格,这一方面减小解题规模,另一方面提高计算精度。 2. 在生成四面体网格时,用四面体单元而不要用退化的四面体单元。比如95号单元有20节点,可以退化为10节点四面体单元,而92号单元为10节点单元,在此情况下用92号单元将优于95号单元。 3. 选择正确的求解器。对大规模问题,建议采用PCG法。此法比波前法计算速度要快10倍以上(前提是您的计算机内存较大)。对于工程问题,可将ANSYS缺省的求解精度从1E-8改为1E-4或1E-5即可。

如何考虑结构分析中的重力 在结构分析中,如何模拟结构自重和设备重量是一个经常遇到的问题,对于结构自重有两点要注意:

1. 在材料性质中输入密度,如果不输入密度,则将不会产生重力效果。

2. 因为ANSYS将重力以惯性力的方式施加,所以在输入加速度时,其方向应与实际的方向相反。

对于结构上的设备重量可以用MASS21单元来模拟,该单元为一个空间“点”单元。设备重量可通过单元实常数来输入。下面附上一个小例子(设重力方向向下)。 /prep7 et,1,42 et,2,21

r,2,10,10,10 mp,ex,1,2e5 mp,nuxy,1,0.3 mp,dens,1,1 rect,,10,,1 esize,.5 amesh,all type,2 real,2

e,node(5,1,0) fini /solu dk,1,all dk,2,uy, acel,,10 solve fini /post1

plnsol,u,sum,2

如何使用用户定义用户自定义矩阵

Matrix 27用户定义用户自定义矩阵,由单元选项控制定义质量、刚度或阻尼矩阵,你只要在同一组接点,分别定义三次MATRIX27单元(KEYOPT(2)分别为2,4,5)即可,然后在定义实常数时,分别定义三种单元对应的质量、刚度、阻尼矩阵系数。

如何提取模态质量

模态分析过程中打开振型型则化开关(MODOPT命令的Nrmkey设置为ON),ANSYS程序将自动将每阶模态的最大位移单位化,就可以提取模态质量。计算方法如下:

1、利用SSUM对ETABLE 动能数据求和获得结构总动能( ); 2、将结构总动能除以 得到 ,其中 是系统的角频率。

下面是《ANSYS Verification Manual》中VM89.DAT稍加修改后提取模态质量的例子:

/PREP7

/TITLE, VM89, NATURAL FREQUENCIES OF A TWO-MASS-SPRING SYSTEM C*** VIBRATION THEORY AND APPLICATIONS, THOMSON, 2ND PRINTING, PAGE 163,EX 6.2-2 ET,1,COMBIN14,,,2 ET,2,MASS21,,,4

R,1,200 ! SPRING CONSTANT = 200 R,2,800 ! SPRING CONSTANT = 800 R,3,.5 ! MASS = .5 R,4,1 ! MASS = 1 N,1 N,4,1 FILL

E,1,2 ! SPRING ELEMENT (TYPE,1) AND K = 200 (REAL,1) TYPE,2 REAL,3

E,2 ! MASS ELEMENT (TYPE,2) AND MASS = .5 (REAL,3) TYPE,1 REAL,2

E,2,3 ! SPRING ELEMENT (TYPE,1) AND K = 800 (REAL,2) TYPE,2 REAL,4

E,3 ! MASS ELEMENT (TYPE,2) AND MASS = 1 (REAL,4) TYPE,1 REAL,1

E,3,4 ! SPRING ELEMENT (TYPE,1) AND K = 200 (REAL,1) M,2,UX,3

OUTPR,BASIC,1 D,1,UY,,,4 D,1,UX,,,4,3

能,从这里你将能看到我们能用APDL干些什么。

还记得UIDL实例解析二中的一个例子巴,这里我们有必要重温一下:

如图1一所示,一带孔薄板,长4000mm,宽2000mm,顶部中心部分1800mm处承受42MP的压力,左右两个长圆孔中心分别踞四周1000mm,长圆孔的具体形式如图1所示,上下分别为半圆,中部用直线衔接。这里假设长圆长轴与水平方向夹角为α。

为了使得孔边缘应力集中最小,这里拟调整α的大小(α∈[-π/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:最优化位置处的最大拉应力值。(计算完以后才是) 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

――――――――――――――――――――――――― 下面是几点说明:

u 程序整个框架是先根据用户输入的参数定制好一些解题环境,比方说求出需要重复计算的次数My_N,然后用APDL的*do循环结构繁复执行My_N次,每次求得对应角度的孔边最大拉应力值,不断积累出这些对应角度孔边最大拉应力值的最小结果。完成了My_N次结果后,最优结果My_MinS1和对应的角度My_Msita也就求出来了。

u 不同次分析计算过程前必须对ANSYS环境中的现有模型清零,用到/clear命令,但该命令会使用户参数同时清零,这里用到parsav和parres技术,在每次清零过程前先把当前工作区的参数保存起来,清模型结束后再调入工作区,这样就实现了只清模型、不清参数的效果。

u 解题结束后,我们先用ndinqr(0,14)这一UPF命令求取模型中的节点总数。然后用*vget命令把所有节点上的最大拉应力都保存到_s1数组中,最后用*vscfun函数得到_s1数组中的最大值。

u 注意每次求解完提取数据时都要重新定义_s1数组的大小(因为每次划分单元后总节点数不同),这时候每次ANSYS都回出现让你确认是否把已经存在的_s1数组结构改变的对话框,这将导致自动化求解中断,这里我们采用的一个技巧是每次重新定义_s1数组前先清掉_s1数组(用_s1=命令行)。这样救避免了Ansys的询问。同样解决/clear命令的Ansys询问方法就是写全/clear命令:/clear,start。注意这里我们是必须要用start参数的,它表面我们在新建模型时读入start55.ans文件,我们必须在工作目录中构建一个我们自己的start55.ans文件,里面添加上

PI参数的说明(因为modaling.mac宏文件中将利用这一参数,如果系统环境中没有这一参数的说明,将产生建模错误)。

u 解决完一次运算,保存完数据后记得用parsav函数保存环境参数。 3. 完善GUI参数化界面

这里我们要比上次UIDL实例二中多增加一个参数My_dsita,为此我们修改UIFUNC2.GRN函数中DoProject函数: ――――――――――――――――――― :N Fnc_DoProject 0, 0, 0

:T Command

:A Optimize my Project

Please Input Custom Information :C )*Set,My_H,150 :C )*Set,My_dsita,90 :H Hlp_0_Contents Inp_NoApply Cmd_)*Cset,1,2 Fld_0 Typ_Lab

Prm_Custom the Geographic Information Fld_2

Prm_ Please Input the Dsita for Analysis(1~90) Typ_INT

Def_*PAR(My_dsita) Fld_3

Prm_ Please Input the H for Analysis(100~200) Typ_INT

Def_*PAR(My_H) Cmd_)/Go

Cmd_)*GET,My_H,CPAR,2 Cmd_)*GET,My_dsita,CPAR,1 Cmd_)mysolve :E END :!

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

这里可以看到和UIDL篇中的实例相比,多加了参数My_dsita的用户化输入。最后的命令修改成直接用文件名调用(这是因为我们把文件名后缀改为了.mac,它标志着标准的宏文件)。 最后的对话框显示如下:

用户定制好分析精度和H值后,点击OK就开始了完整的分析过程。 4. 求解结果

最后求解完毕后得到了一些最优化结果:用*status命令可以看到所有参数结果(这里我用每隔5度进行一次分析求解):

My_Msita=40°,用该最优化建模图形为:

这里由于实常数对应力集中的效应没有影响,我们就不再给出具体计算结果来了。有效的仅是在同样的载荷条件下不同角度的孔上最大拉应力的情况。 4 几点说明

APDL中的参数化建模、优化涉及是十分复杂有效的,这里我们只是给出了一个小小的例子,用来举一反三。套用同样的方法和机制,我们可以完成更加复杂的问题。

这里我们仅仅用到了APDL功能中的一小部分,我们完全可以想象一下UIDL+APDL+UPF能够完成什么样复杂程度的功能-几乎是任何功能! 5 结束语

这里结合APDL,UIDL和UPF讲述了一个比较综合的例子,在以后描述了UPF功能后,大家将更加为UPF功能的强大而神往不已。

附录:

modaling.mac:

―――――――――――――――――――――――――――――― !This is a script which can create the modal with a parameter sita. !Parameter Setting sita=My_sita/180*PI r=0.2

H=My_H/1000

!Customize the Environment keyw,pr_struc,1 /prep7

et,1,shell63

r,1,0.12,0.12,0.12,0.12

uimp,1,ex,dens,nuxy,2.1e9,1.2,0.375

!Modeling !Create plate k,1,0,0 k,2,2,0 k,3,2,2 k,4,0,2 k,5,0.9,2 k,6,1,1 l,1,2 l,2,3 l,3,5 l,5,4 l,4,1

al,1,2,3,4,5

!Create hole

!Create my coordinate

k,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,8 csys,11

!Create Hole k,9,H,r l,7,9 l,7,6

adrag,6,,,,,,7

arotat,6,,,,,,7,10,-90 arsys,y,2,3,1 arsym,x,2,5,1

aadd,2,3,4,5,6,7,8,9 asba,1,10

csys,0

arsym,x,2, , , ,0,0 nummer,all, , , ,low aadd,1,2

/auto,1 gplot

!Meshing the plane smrt,6 amesh,all

!Add DOF

DK,2,UX,0, ,,UY DK,14,UX,0,,,UY

!Add Pressure SFL,4,PRES,42 SFL,11,PRES,42

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

中华钢结构论坛 www.okok.org

良好的开放性,用户可以根据自身的需要在标准ANSYS版本上进行功能扩充和系统集成,生成具有行业分析特点和符合用户需要的用户版本的ANSYS程序。开发功能包括四个组成部分: 参数化程序设计语言(APDL) 用户界面设计语言(UIDL) 用户程序特性(UPFs) ANSYS数据接口

参数化程序设计语言(APDL)

参数化程序设计语言实质上由类似于FORTRAN77的程序设计语言部分和1000多条ANSYS命令组成。其中,程序设计语言部分与其它编程语言一样,具有参数、数组表达式、函数、流程控制(循环与分支)、重复执行命令、缩写、宏以及用户程序等。标准的ANSYS程序运行是由1000多条命令驱动的,这些命令可以写进程序设计语言编写的程序,命令的参数可以赋确定值,也可以通过表达式的结果或参数的方式进行赋值。从ANSYS命令的功能上讲,它们分别对应ANSYS分析过程中的定义几何模型、划分单元网格、材料定义、添加载荷和边界条件、控制和执行求解和后处理计算结果等指令。 用户可以利用程序设计语言将ANSYS命令组织起来,编写出参数化的用户程序,从而实现有限元分析的全过程,即建立参数化的CAD模型、参数化的网格划分与控制、参数化的材料定义、参数化的载荷和边界条件定义、参数化的分析控制和求解以及参数化的后处理。

宏是具有某种特殊功能的命令组合,实质上是参数化的用户小程序,可以当作ANSYS的命令处理,可以有输入参数或没有输入参数。

缩写是某条命令或宏的替代名称,它与被替代命令或宏存在一一对应的关系,在ANSYS中二者是完全等同的,但缩写更符合用户习惯,更易于记忆,减少敲击键盘的次数。ANSYS工具条就是一个很好的缩写例子。

用户界面设计语言(UIDL)

标准ANSYS交互图形界面可以驱动ANSYS命令,提供命令的各类输入参数接口和控制开关,用户在图形驱动的级别上进行有限元分析,整个过程变得直观轻松。用户图形界面设计语言(UIDL)就是编写或改造ANSYS图形界面的专用设计语言,主要完成以下三种图形界面的设计: 主菜单系统及菜单项 对话框和拾取对话框 帮助系统

通过用户界面设计语言(UIDL),用户可以在扩充ANSYS功能的同时建立起对应的图形驱动界面,如在主菜单的某位置增加菜单项,设计对应的对话框、拾取对话框,实现参数的输入和其它程序运行的控制,同时提供相应的联机帮助,使*作者能方便地获取系统帮助。

用户程序特性(UPFs)

用户程序特性(UPFs)向用户提供丰富的FORTRAN77用户程序开发子程序和函数,用户利用它们从开发程序源代码的级别上扩充ANSYS的功能。使用这些子程序和函数,编写用户功能的源代码程序,在与ANSYS版本要求匹配的

FORTRAN或C++编译器上重新编译和连接,生成用户版本的ANSYS程序。另外,还提供了外部命令功能,允许用户创建ANSYS可以利用的共享库。用户可以开发下列方面的功能程序:

开发用户子程序实现从ANSYS数据库中提取数据或将数据写入ANSYS数据库。该种子程序可以编译连接到ANSYS中,此时ANSYS提供了10个数据库*作命令;如果作为外部命令处理,可以在ANSYS的任何模块中运行;

利用ANSYS提供的子程序定义各种类型的载荷,其中包括BF或BFE载荷、压力载荷、对流载荷、热通量和电荷密度等;

利用ANSYS提供的子程序定义各种材料特性,包括塑性、蠕变、膨胀、粘塑性、超弹、层单元失效准则等;

利用ANSYS提供的子程序定义新单元和调整节点方向矩阵; 利用ANSYS提供的子程序修改或控制ANSYS单元库中的单元;

利用UEROP创建用户优化程序;ANSYS程序作为子程序在用户程序中调用。

ANSYS数据接口

ANSYS程序在分析过程中存在大量的设计分析数据,一部分在运行时置于计算机的内存之中,一部分以文件的形式存放在工作目录中。除LOG文件和出错文件等文本文件之外,其它文件都是二进制文件,分别以不同的格式进行写入,如:数据库文件、结果文件、模态结果文件、单元矩阵文件、子结构矩阵文件、对角化刚度矩阵文件、缩减位移矩阵文件、缩减频率矩阵文件和完整的刚度-质量矩阵文件等等。ANSYS数据接口详细地阐述每种二进制文件的格式,然后介绍从这些数据文件提取各种数据的子程序或函数,从而实现对二进制数据的读写和修改。显然,它满足了用户以下三种基本需要:检查或观察过程数据或结果数据;通过修改ANSYS的数据文件达到控制或修正计算;提取结果数据进行分析处理。 ANSYS数据接口提供了两条模型和数据库信息的转换和传递命令,即CDREAD和CDWRITE,前者将一个符合ANSYS读入或写出格式的模型和数据库文件信息读入到ANSYS数据库中,后者的作用正好相反。同时,为了减少转换或传递的时间,提高效率,还提供重定向自由度映射关系和其它数据库代码化的辅助命令,如/DFLAB、NBLOCK、EBLOCK、EN等等。该功能大大提高了ANSYS与其它有限元程序之间的模型数据的传递和转换,也实现了ANSYS自身数据库文件代码化后便于存储或机器之间的传递。

ANSYS数据接口还阐述了图形文件的格式,帮助用户将ANSYS图形文件转换成其它格式,如AI等。

解析UIDL篇 1结识UIDL

UIDL是什么?Ansys二次开放语言的一种。

OK,那么它能带给我们什么?很多很多,如果你想让你在Ansys中制作的用户界面具有专业水准的话,请来结识一下我们的UIDL把。 l 全称:

UIDL的全名是User Interface Design Language,是Ansys中二次开发工具方面的三大金刚之一。GUI方面几乎全部的二次开发功能都将由它运筹帷幄。 l 功用:

n 组织我们自己强大的菜单系统。想象一下我们在Ansys中也能轻松做出可以和

VC,VB之类主流GUI开发工具媲美的菜单响应效果,Ansys的世界将是多么的亲切、友好。

n 构建功能繁复的对话框。Ansys中美观易用的ContactWizard对话框级联界面一定让你印象很深把,有了它,即使是最菜鸟的门外汉也能构建一流的工程算例,Ansys5.7中的DesignSpace应该就是无可争辩的例证之一。虽然从UNIX内核上讲(Windows下的东西是Ansys的后期移植,很多技术还不成熟,这里就不加讨论了),它们多构建在繁复的TCL编程基础上,但我们利用强大的UIDL工具,也能轻松架构起我们自己的实用对话框向导。 n 建立自己的联机帮助

Ansys中的联机帮助(尤其是UNIX下的搜索引擎)非常实用,可以说是我所接触过许多有限元平台中最为好用的几种帮助平台之一。UNIX下的关键字查询简直是帅呆了,想构建自己完善的帮助系统吗?UIDL同样是这方面不可或缺的理想开发工具。

2看看UIDL的模样

认识了这位Ansys二次开发中的大侠了巴,现在我们就来进一步和它交流交流,把我们的感性认识上升到理性层次中。 2.1 UIDL控制文件总结构

一个完整的UIDL控制文件大致如一下结构: 控制文件头 结构块结构 ????? 说明:

任何一个UIDL控制文件开头都是一个控制文件头,其后接一个或多个结构块结构。

2.2控制文件头结构

为避免鄙人在这里滔滔不绝,而读者在台下不知所云的尴尬,我们在以后的讲解中都将从一些典型结构例子入手,剖析清楚其各个部分的详细结构,当然这里从例子入手的剖析手段只能做到抛砖引玉,要想熟悉的了解各个命令的详细信息,请参阅UIDL手册:

一个典型的控制文件头如下所示:

--------------------------------------------------------------------------------------------- :F UIMENU.GRN

Modified on %E%, Revision (SID) = 5.181.1.67 - For use with ANSYS 5.5 :I 0, 0, 0 :!

--------------------------------------------------------------------------------------------- 几点说明:

1. 控制文件头第一行必须有:F filename,filename是UIDL控制文件名。

2. 控制文件头第二行必须有 description,description是对本文件的一些说明。注意到description中有时能带%E%扩展,但只有当你拥有类似SCCS的系统(含一源码控制系统),ANSYS才能 有效的进行%E%扩展,否则请手动把这些说明替代%E%写入description中。

3. 控制文件第三行必须有:I 0, 0, 0,各个0必须出现在第9、18、27行。用户只需要在这些位置填入0,ANSYS在调用该文件后会自动在这些位置填入GUI界

面的位置信息。

4. :!这一行通常是用来在UIDL控制文件中做分隔标记的,可有可无,这里用来分隔控制文件头和结构块结构,建议在控制文件头和结构文件块之间,以及各个控制文件块之间都加一行:!加以间隔。 2.3结构块结构

结构块结构是一个UIDL控制文件的核心,它涵盖了菜单信息,命令信息,以及帮助文件信息,按照其不同的类型可划分为菜单结构块,命令结构块和帮助结构块。一般来说函数结构块还都伴随着构建一个对话框结构。 1. 结构块结构基本框架

麻雀虽小,五脏俱全,让我们先看一看结构块的基本结构: 头部分

数据控制部分 尾部分

2. 例子说明

这里基于一个菜单结构块描述一下这些基本结构的细节,让大家有一个感性认识:

-------------------------------------------------------------------------------------- 头部分

:N Men_Add 0, 0, 0 :T Menu :A Add :C Add

数据控制部分 Fnc_VADD Fnc_AADD Fnc_LCOMB 尾部分 :E END 分隔 :!

---------------------------------------------------------------------------------------- 几点说明: l 头部分

u :N行定义一唯一的结构控制块名。

u 行定义结构控制块位置信息。用户只需在第9、16、23行输入0即可,ANSYS在调用该文件中将自动为这些域填入合适的值。

u :T行定义该结构控制块的类型,可选类型有Menu、Cmd或者Help。 u :A行对不同类型的结构控制块有不同的功用,在Menu块中通常用来定义出现在GUI菜单上的名字。

u 行通常用来描述该结构块的信息。 u 头部分中还可以带许多其他命令,例如ANSYS内部命令等,这里就不详述了,我们将在例子中看到其具体用法。

l 数据控制部分

数据控制部分根据不同的结构控制块有不同的写法,但必须至少有一个数据控制行。例如在菜单结构块中我们可以在其中使用Men_String来调用其他菜单项,还可以使用Fnc_String命令调用一些命令。String对应于特定的菜单名部分或者命令名部分。其他具体细节这里就不详述了。我们将在具体实例中看到他们是如何构建实现的。 l 尾部分

:E END标志着一个结构块的结束。 l 分隔(可选)

一般说来,我们将在结构块和结构块之间加入:!来间隔(可选)。 3 Ansys调用UIDL的过程

上面我们已经熟悉了整个UIDL控制文件的结构,可惜我们还是空有武器,鲜有用武之地,Ansys到底是怎么使用UIDL的呢?搞清楚这一点,我们才能够游刃有余的控制整个GUI界面的定制,在这部分里我们将描述一下Ansys控制UIDL文件的过程。

下面的一些设置情况都是基于工作站版本的ANSYS5.5,其他版本的ANSYS的设置处理也类似,这里就不加赘述了。

ANSYS在调用GUI界面时会自动调用menulist55.ans文件,该文件中描述了UIDL前处理器到哪里去寻找UIDL控制文件。ANSYS在其docu/目录中有一个基本的menulist55.ans文件和对应的基本UIDL控制文件。默认情况下,ANSYS就调用这一menulist55.ans文件。

下面是这一基本menulist55.ans文件的内容: ---------------------------------------------------------- /ansys55/docu/UIMENU.GRN /ansys55/docu/UIFUNC1.GRN /ansys55/docu/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

---------------------------------------------------------- 可见,正是因为这一menulist55.ans文件的指定,ANSYS系统将默认调用对应的基本UIDL控制文件。 由此,我们可以产生一个想法:只要我们改变这一基本menulist55.ans中的指定,就能使用我们自己的UIDL控制文件。

但其实我们有更加好的方法,一般来说我们不建议改变系统ansys55目录里任何文件内容,以避免不必要的失误。ANSYS本身在调用menulist55.ans文件的方式上就提供了便于进行UIDL开发的机制:

通常ANSYS按照以下顺序寻找menulist55.ans文件: 用户工作目录(可以在Interactive启动方式中设定)->用户根目录->/ansys/docu目录,可见只要我们在用户工作目录中编辑自己的menulist55.ans文件,ANSYS将优先使用我们自己的menulist55.ans文件。如果生成了自己的UIDL控制文件,并在我们自己的menulist55.ans文件中指向它们,我们就能实现对UIDL的全控制。以后的实例中我们将看到通用的UIDL开发过程。

最后要指出的是,UIDL前处理器在处理UIDL控制文件后,将自动在:I行(控制文件头部分)和行(结构块的头部分)中填入相应的位置信息,并在整个文件最后写入一系列:X行(索引行)。

UIDL实例解析一 1问题描述:

任何一个级联菜单的最底级总是调用命令,在这个实例里我们试着添加一个菜单联结,指向一个我们自己构建的命令。这个命令的构建方式我们将在实例二中给出。为方便起见,我们将在主菜单下添加一个MyProject菜单项,调用MyProject子菜单。MyProject子菜单中含有一个DoProject命令,该命令对一个实际问题进行优化设计,我们将在以后的实例中实现它。 2环境准备:

1. 配置好ANSYS环境,这里略过。

2. 在当前用户目录下建立一个子目录UIDL ---------------------------- %mkdir ~/UIDL

----------------------------

3. 拷贝相应文件进入该子目录

------------------------------------------------------- %cp /ansys55/docu/menulist55.ans . %cp /ansys55/docu/UIMENU.GRN . %cp /ansys55/docu/UIFUNC1.GRN . %cp /ansys55/docu/UIFUNC2.GRN .

------------------------------------------------------- 4. 编辑该子目录下文件menulist55.ans

前面我们已经看到了这个基本menulist55.ans的内容,这里我们想使用自己的UIDL控制文件,而不用默认目录/ansys55/docu下的UIDL控制文件,因此我们把该文件修改成如下内容:

------------------------------------------------------- ./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

--------------------------------------------------- 5. 运行测试是不是能够正常启动ANSYS

以Interactive方式启动,设置工作目录为刚刚创建的UIDL目录,并设置初始工作名为uidl,启动ANSYS,这是ANSYS的GUI界面应该和默认情况下启动,只不过不同的是调用的UIDL控制文件是当前UIDL目录下的了(只不过两者内容相同而已)。 3添加菜单:

ANSYS的浮动根菜单名字叫MenuRoot,我们将在根菜单下添加一个菜单项MyProject,点击这个菜单项自动调用MyProject子菜单。MyProject子菜单中我们将放入一个命令DoProject,点击这个命令,将进入我们的问题处理。 1. 定制DoProject命令

这里我们把DoProject命令的定义写入UIFUNC2.GRN中,编辑UIFUNC2.GRN文件,在其中两个结构块之间加入一个DoProject命令结构块: ------------------------------------------- :N Fnc_DoProject 86, 73, 6 :T Cmd

:A DoProject Let's go Inp_P :E END :!

-------------------------------------------

当然这样一个结构块什么也不干,只是一个虚块,在以后的实例中我们将完成这个命令的功能。

2. 定制MyProject子菜单

这一步中我们把MyProject子菜单的定制写入UIMENU.GRN中,编辑UIMENU。GRN文件,在其中两个结构块之间加入一个MyProject菜单结构块: ------------------------------------------- :N Men_MyProject 120, 88, 25 :T Menu :A MyProject

Optimize the structure -Optimize- Fnc_DoProject :E END :!

--------------------------------------------

这里-Optimize-是出现在菜单上的静态文本,Ansys对任何寻找不到定义的调用

均当做静态文本处理。如果某子菜单中只有静态文本的话,Ansys一般情况下将不显示这个子菜单。

3. 将MyProject子菜单加到根菜单下

这里我们再次编辑UIMENU.GRN文件,在MenuRoot菜单结构块中添加到MyProject的链接。最后UIMENU.GRN的MenuRoot菜单结构块定义类似如下写法:

-------------------------------------------- :N MenuRoot 433, 76, 350 :T Menu

:A Main Menu

ANSYS ROOT MENU Men_UVBA_Main_T1 Men_UVBA_Main_T2 Men_UVBA_Main_T3 Fnc_Preferences Sep_

Men_Preproc Men_Solution Men_GenlPost Men_TimePost Sep_

Men_MyProject Sep_

K_LN(alpha) Men_DesOpt ??

----------------------------------------------

可见我们把Men_MyProject子菜单链接加入到基于时间历程后处理的菜单项后。当我们重新启动ANSYS时看到的主菜单应该如下图(a)所示,点击MyProject菜单项将出现图(b)的情形。

4结束语

上面我们看到了怎么在浮动菜单中简单添加自己定制子菜单的方法,但这个时候我们点击DoProject命令什么也不发生,因为我们在命令定制中就是这么设定的。以后我们将完善这个命令,让它逐渐强大起来。

大家也许会问,既然定义的这个命令是空命令,那能不能索性不定义呢。答案应该是不可以,大家可以试一试删去UIFUNC2.GRN中DoProject函数的定义,当你点击根菜单中的MyProject菜单链接,MyProject应该都不会弹出。

UIDL实例解析二 1问题描述:

如图1一所示,一带孔薄板,长4000mm,宽2000mm,顶部中心部分1800mm

处承受42MP的压力,左右两个长圆孔中心分别踞四周1000mm,长圆孔的具体形式如图1所示,上下分别为半圆,中部用直线衔接。这里假设长圆长轴与水平方向夹角为α。

为了使得孔边缘应力集中最小,这里拟调整α的大小(α∈[-π/2, π/2]),以便在固定的H情况下达到长圆孔周围应力集中最小。

本章中,我们将仅仅限于UIDL部分完成这个问题,即实现如下功能:通过菜单和对话框,用户输入参数H的大小,我们让Ansys自动生产整个分析模型。 2环境准备及构建对话框:

1. 基于上一个实验的环境,在~/UIDL目录下构建一个输入脚本,这里我们权且称其为create.inp,该脚本能针对固定的r、H、α来构建出分析模型。Create.inp脚本文件可以参看附录。

2. 在文件UIFUNC2.GRN中任意两个结构块之间添加函数DoProject的定义: -------------------------------------------------------------- :N Fnc_DoProject 0, 0, 0

:T Command

:A Optimize My Project

Please Input the Custom Information :C )*SET,My_H,150 Inp_NoApply Cmd_)*Cset,1,1 Fld_0 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 :!

------------------------------------------------------------------

这里我们可以清晰的看到,在命令结构块中,:A命令后的说明将出现在调用该函数的菜单项中,如图2所示,命令后的说明将出现在我们定制的对话框标题上。 几点说明:

u 这里我们定制了一个对话框(无拾取点线等的功能),在任何一个自定义的对话框中,至少应该有一个Typ_命令,但不能有Inp_P命令。

u 本对话框由于比较简单,不需要Apply按钮(该按钮多用来处理复杂输入,动态刷新功能),因此我们设定为 Inp_NoApply命令。

u 下面的Fld_0,Fld_2什么的都是一个个对话框域。不同的数据输入域,比方说:输入框、多选框、列表框的都必须有独立的域号,象本例中一个数值输入框域代号为2。但所有静态文本都可以写在Fld_0域内,因为不会出现我们调用时的冲突。这里,我们的Fld_0域内是Typ_Lab的静态文本,内容书写在Prm_后。Fld_2域是一个整数输入对话框域(Typ_INT),前面Prm_后有一段文字说明,并设定默认值(Def_)。

u 下面的几行Cmd_)后跟的都是针对这一数值输入域处理的Ansys命令,主要功能是先清数据库,再取到域2内用户输入的H参数值,然后进行基于该参数的模型构建。 3. 输出结果:

这是α=π/4,H=150情况下自动生成的几何模型。虽然例子比较简单,但我们从中可以掌握一种GUI定制参数并运用到脚本建模中的技巧,掌握了这种技巧,我们就不难轻松的构建各种更加复杂的模型。 3参数提取杂谈

上面我们看到了一种比较简单有效的对话框参数提取、传递的技巧,其实在Ansys中参数的提取有好些方法。

通常的用户命令中(比方说设定实常数等),Ansys中由于有固定的命令与其对应,在GUI函数命令中Ansys是这样定制的,在对话框起始处给出一个Cmd_R命令(这里以提取实常数命令R为例),其后对应的Fld_2、Fld_3等域Ansys将自动拾取之并对应R命令的第二个参数、第三个参数等。但我们初学二次开发时不可能拥有自己的命令,因此这里我们弃而不用。等以后我们学习了UPF二次开发工具,能够定制自己的命令后,我们再来回顾一下这种参数话方法。

这里我们使用的是CSET命令和CPAR命令,也是一种比较简洁有效的方式。命令结构块头部分我们用:C )*SET,My_H,150命令在环境中设定一变量My_H,初值为150,并用Def_*PAR(MY_H)命令指定为数值域的初值。然后用Cmd_)*CSET,1,1命令把第一个数值域的内容指定存储到*CSET命令对应的一矢量数值中,其次在数值域中指定用Cmd_)*GET,My_H,CPAR,1命令让参数My_H再把用户输入的数值域内容从该矢量数组中读回来,这样我们就有了一个用户输入的参数值My_H,最后就可以直接调用脚本文件,生成需要得到的参数化建模结果。

在UIFUNC2.GRN中我们还可以看到其他一些参数化提取方式,比如说利用系统参数_z1~_z9?,用命令*GET,PAR,CMD,0,FIELD,2来拾取命令中域2中的内容到自己设定的参数中。以后我们可以对各种方法都练练手,这里就不再赘述了。 4结束语

上面我们用UIDL对话框的技术轻松实现了有用户化界面的参数化建模,在以后的例子中我们将对这个实例进行完善,并融入APDL和UPF的内容。 附录

create.inp清单:

----------------------------------------------------------------------------------------- !This is a script which can create the modal with a parameter sita.

!Clear the workspace !fini

!/clear,nostart

!Setup the Parameters PI=4*atan(1) sita=PI/4 r=200 !H=150 H=My_H

!Customize the Material Property keyw,pr_struc,1 /prep7

et,1,shell63

r,1,120,120,120,120

uimp,1,ex,dens,nuxy,2400,1.2,0.375

!Modeling !Create plate k,1,0,0 k,2,2000,0 k,3,2000,2000 k,4,0,2000 k,5,1800,0 k,6,1000,1000 l,1,5 l,5,2 l,2,3 l,3,4 l,4,1

al,1,2,3,4,5

!Create hole

!Create my coordinate

k,7,1000+H*cos(sita),1000+H*sin(sita)

k,10,1000+H*cos(sita),1000+H*sin(sita),100 k,8,1000+r*cos(sita+PI/2),1000+r*sin(sita+PI/2) cskp,11,0,6,7,8 csys,11

!Create Hole k,9,H,r l,7,9

l,7,6

adrag,6,,,,,,7

arotat,6,,,,,,7,10,-90 arsys,y,2,3,1 arsym,x,2,5,1

aadd,2,3,4,5,6,7,8,9 asba,1,10

UIDL实例解析三 1问题描述

本章我们我们将描述UIDL的最后一个功能-构建我们自己的联机帮助文档。 诚然联机帮助在一般的开发过程中有点无足轻重,但如果你想让你的工作更加完善、更加专业的话,建立起自己强大的帮助系统是必不可少的,这一个实例中我们将对UIDL实例二构建我们自己的联机帮助文档。构建完联机帮助文档后,在菜单中点击DoProject菜单项将显示如下对话框:

看到了把,现在这个对话框中增加了一个Help按钮,点击这个Help按钮看看效果把,显示结果如下:

这里的文字可以任意,轻松写入任何泥想写入的帮助信息巴。下面我们就详细的说明如何建立这样的一个联机帮助。 2环境准备及构建联机帮助:

Ansys中的联机帮助一般有三种形式:ASCII形式,ZBitmap形式,PostScript形式。PostScript形式的联机帮助多是在Unix下和打印功能有关的,我们这里就不加详述了。ZBitmap形式的联机文档应该是功能最强大的,应该类似于Windows下的PDF格式帮助文档把,可以在帮助文档中有图形或者文字的超级链接,构建这样的帮助文件我们得需要构建744pixels×925pixels的XWD格式图像,xwd格式是UNIX中用xwd工具抓图所得的一种图像格式,可惜的是这里我们崭时缺少这样能够生成固定尺寸格式的XWD图像文件的工具,所以这里我们也不准备仔细对它的构建方法进行描述(你可以试验用任意尺寸的XWD格式构建ZBitmap格式的帮助文档,正常情况下Ansys系统应该不加显示任何图片)。 这里我们在上一个实例的基础上描述一下如何建立ASCII形式的帮助文档。 1. 在Unix下,构建你的帮助文档文字信息,把它存成文件hlp_other2: ――――――――――――――――――― ZengP Work Group

This Project is designed by Heling. Enjoy it!

――――――――――――――――――― 2. 检查hlp_other2文件字节数:

Unix下可以用命令ls hlp_other2或者wc -c hlp_other2命令查看该文件的字节数,这里得出的字节数为63

3. 构建帮助文件的数据控制部分,把它存成hlp_other1 ――――――――――――――――――― Customized Help

Hlp_ Hlp_ ASCII 63

END_OF_HYPERLINKS

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

这里的数据控制部分是有固定格式的,第一行表示帮助对话框的标题。 第二行和第三行是描述该帮助文件的前端链接和后端链接。这里由于是我们自己定义的帮助文档,没有前端链接和后端链接,因此我们都把它写成Hlp_就可以了,第四行是描述帮助文件格式、字节信息的,这里我们是ASCII格式,字节数是上一步中得到的字节数63(对ZBitmap格式后面需要提供压缩后字节数和压缩前字节数两个信息,具体做法请自己参看UIDL帮助手册)。以下到最后一行的END_OF_HYPERLINKS之间是定义帮助文档之间超级链接的,由于我们这里是做ASCII的帮助信息,不是ZBitmap格式的,因此没有任何超级链接需要定义。

4. 把hlp_other1和hlp_other2合成一个文件hlp_other êt hlp_other1 hlp_other2 >hlp_other 5. 检查一下文件hlp_other的字节数 %wc -c hlp_other

这个例子中得到的字节数是116

6. 构建帮助文件的头信息,把它存储为head_other: ――――――――――――――――― :N Hlp_0_Contents 0, 0, 0 :T HELP 116

――――――――――――――――― 7. 构建帮助文件尾信息,把它存储为end: ――――――――――――――――― :E End

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

8. 构建帮助文件的控制文件头,把它存储为control_other: ――――――――――――――――― :F OTHER.HLP Modified on 1/17 :I 0, 0, 0 :!

――――――――――――――――― 9. 构建总的帮助文件OTHER.HLP

%cat control_other head_other hlp_other end >OTHER.HLP

10. 把我们构建好的帮助文件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

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

11. 在我们的函数定义DoProject中加入联机帮助信息.

编辑UIFUNC2.GRN中的DoProject函数定义,由于我们定制的帮助文件名为Hlp_0_Contents,我们把它加入到函数定义中去,编辑完后该函数定义内容结果如下:

――――――――――――――――――――― :N Fnc_DoProject 396, 147, 242 :T Command

:A Optimize my Project

Please Input Custom Information :C )*Set,My_H,150 :H Hlp_0_Contents Inp_NoApply Cmd_)*Cset,1,1 Fld_0 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知识对这一例子进行优化处理实现,希望大家保持充足的兴趣继续向下学习。

解析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语法,这里我们打算用一个比较大的综合实例来想大家描述一部分APDL的功

图八 多片叠片弹簧应力响应结果六 结 语上面这些数据只是本算例的结果,不一定是一个最理想的设计,但是通过本文介绍的方法,说明了,应用CAE技术进行弹簧设计,完全跳出了传统设计方法中的人为假设和勉强的出自材料力学计算方法。计算几乎没有任何假定,他同时考虑到结构的大变形、接触状态和接触压力、组装时的预应力和工作应力的组合。这样我们就有可能在设计中调整各叶片形状尺寸,特别是初始弧高,取得理想的最优的精益设计。因为应用参数模型,我们可以方便地改变片长、自由弧高、片厚等数据,进行优化设计。

用ANSYS分析过整个桥梁施工过程

Q: I must build the whole model and kill the elements that don't take part in the analysis of certain erection stage, so i think the multiple steps is not a useful way to solve the problem

A: You may try to utilize multiple steps and set one load case a step. Meanwhile,large deformation effects option is recommended. 用单元死活模拟浇铸过程中的温度分布

要想对浇铸过程的温度场进行分析,必须熟悉下面两个方面的内容:1.瞬态温度场的分析,2.单元死活的应用。

瞬态温度场分析:在进行瞬态温度分析时,我们常遇到的一个问题是温度结果明显不合理,:计算得到的温度高于给定的最高温度或低于给定的最低温度。造成这种结果的原因有两个:1、单元不合理,网格太大。2、时间积分方法不恰当。针对上述两个原因,我们采取的措施是:1、细划网格。2、选择向后积分法(THETA=1)。

单元死活:应用单元死活进行分析时,需要用到多个载荷步。在不同的载荷步之间单元的死活状态不同,ANSYS的通用动画生成工具生成的动画无法表现单元状态随时间的变化,因此必须使用ANSYS的DISPLAY Utility来生成能够表现单元死活状态的动画。

下面是一个简单的模拟浇铸过程的例子,环境温度为70,浇铸温度为600,计算结果应是:最低温度不低于70,最高温度不高于600。如果我们划分的网格不适当,则会出现最低温度低于70或最高温度高于600的情况,因此必须细划网格并选择THETA=1。计算完成后使用ANSYS的DISPLAY Utility来生成动画文件。 fini /cle /prep7

et,1,55 et,2,55

KXX , 1,1.99/3600 DENS,1,0.00073 C ,1,0.100

KXX,2,7.38E-6 DENS,2,9.35E-5 c,2,1

k,1,-.5,-.5 k,4,6,-.5 k,12 k,13,5.5 k,21,-.5,6 k,22,,6 k,23,5.5,6 k,24,6,6

a,12,13,23,22 a,1,12,22,21 a,1,4,13,12 a,4,24,23,13 lsel,s,,,5,6 lsel,a,,,9,11,2 lesize,all,,,8 lsel,all

lesize,all,,,20 asel,s,,,1 aatt,2,2,2 asel,all amesh,all fini /solu

antype,tran !solc,on timint,off lsel,s,,,7,8 lsel,a,,,10 nsll,s

sf,all,conv,100,70 alls

esel,s,type,,2 nropt,full ekill,all alls

tunif,100 time,1

outres,all,all solve

dtop=0 tim=1 delt=.05

timint,on tintp,,,,1 *do,ii,1,20 ddele,all,temp esel,s,type,,2 nsle,s

tim=tim+delt time,tim

dtop=dtop+.3

nsel,r,loc,y,0,dtop esln,s,1 ealive,all

nsel,r,loc,y,dtop esln,s nsle,s,1

d,all,temp,600 esel,s,live nall eall solve *enddo fini

/show,tmpplt,f33 /post1 dtop=0 *do,ii,2,21 set,ii

dtop=dtop+.3 nsel,r,loc,y,0,dtop esln,s,1

esel,a,type,,1 nall plns,temp *enddo

在ANSYS5.6中如何施加函数变化的表面载荷

ANSYS5.7版本具有函数加载功能,可以很方便地在模型表面施加函数变化的各种载荷,在ANSYS5.6版本中,也可以通过变通的方式来实现此功能,其思路是: 首先选定所要施加函数变化表面载荷的表面上的节点,利用ANSYS的参数数组和嵌入函数知识写一简单的命令流,定义好相应节点位置的面载荷值,然后通过在节点上施加面载荷来完成。

下面以在一圆柱表面施加函数变化载荷为例: /prep7

et,1,45

cyl4,,,0.5,,,,3 vsweep,all

asel,s,loc,y,0.01,1 nsla !

*get,nmax,node,,num,max, *get,nmin,node,,num,min, *afun,deg

*dim,t1,array,nmax,1,1, csys,1

*do,k,nmin,nmax *if,nsel,eq,1,then t1=1000*sin(ny) *else t1=0 *endif *enddo !

sffun,pres,t1(1) sf,all,pres,0

在ANSYS中怎样给面施加一个非零的法向位移约束? 给面施加非零的法向位移约束的过程如下:

1) 在面上施加一个对称约束条件 (DA,2,SYMM)

2) 将实体模型上的载荷传递到有限元模型 (SBCTRAN) 3) 选择需要施加约束条件的面(ASEL,S,,,2) 4) 选择附在面上的节点 (NSLA,S,1)

5) 创建节点组元 (CM,AREA2_N,NODE)

6) 删除面上的对称约束条件 (DADELE,2,SYMM) 7) 删除节点上的零位移约束(DDELE,AREA2_N,UY)

8) 在节点组元上施加一个非零的法向位移约束(D,AREA2_N,UY,.05) 9) 图示节点验证约束是否正确 (NPLOT)

在任意面施加任意方向任意变化的压力 在某些特殊的应用场合,可能需要在结构件的某个面上施加某个坐标方向的随坐标位置变化的压力载荷,当然,这在一定程度上可以通过ANSYS表面效应单元实现。如果利用ANSYS的参数化设计语言,也可以非常完美地实现此功能,下面通过一个小例子描述此方法。 !!!

!!!在执行如下加载命令之前,请务必用选择命令asel将需要加载的几何面选择出来 !!!

finish /prep7

et,500,shell63 press=100e6 amesh,all esla,s nsla,s,1

! 如果载荷的反向是一个特殊坐标系的方向,可在此建立局部坐标系,并将 ! 所有节点坐标系旋转到局部坐标系下. *get,enmax,elem,,num,max dofsel,s,fx,fy,fz

fcum,add !!!将力的施加方式设置为\累加\而不是缺省的\替代\*do,i,1,enmax *if,esel,eq,1,then

*get,ae,elem,i,area !此命令用单元真实面积,如用投影面积,请用下几条命令 ! *get,ae,elem,i,aproj,x !此命令用单元X投影面积,如用真实面积,请用上一条命令

! *get,ae,elem,i,aproj,y !此命令用单元Y投影面积 ! *get,ae,elem,i,aproj,z !此命令用单元Z投影面积 xe=centrx !单元中心X坐标(用于求解压力值) ye=centry !单元中心Y坐标(用于求解压力值) ze=centrz !单元中心Z坐标(用于求解压力值)

! 下面输入压力随坐标变化的公式,本例的压力随X和Y坐标线性变化. p_e=(xe-10)*press+(ye-5)*press f_tot=p_e*ae esel,s,elem,,i nsle,s,corner

*get,nn,node,,count f_n=f_tot/nn *do,j,1,nn

f,nelem(i,j),fx,f_n !压力的作用方向为X方向 ! f,nelem(i,j),fy,f_n !压力的作用方向为Y方向 ! f,nelem(i,j),fz,f_n !压力的作用方向为Z方向 *enddo *endif esla,s *enddo aclear,all

fcum,repl !!!将力的施加方式还原为缺省的\替代\dofsel,all allsel

ANSYS程序的二次开发

标准ANSYS程序是一个功能强大、通用性好的有限元分析程序,同时它还具有

本文来源:https://www.bwwdw.com/article/ierd.html

Top