ANSYS使用经验
ANSYS使用经验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. 问题的提出 工业机器人是计算机技术出现后发展起来的一种新型机械结构,工作效率和机动性比传统机械高很多。随之而来的是,机器人的结构设计在减少质量、提高刚度方面比传统机械结构有更高的要求。在设计工作中,结构的最优化显得更为重要。 在结构的优化设计中,有限元法是一个比较有效的方法。通常,建立模型和模型的修改都是手工完成的。对于结构比较复杂或者需要修改的地方很多的情况下,优化的时间比较长。其中计算时间相对较少,建模和结构修改所占比重较大。如何减少建模和结构修改的的时间,是提高结构优化效率的关键。 APDL语言 是ANSYS软件提供给用户的一个依赖于ANSYS程序的交互式软件开发环境。APDL语言具有类似一般计算机语言的常见功能 ,如类似于常数定义、变量定义和赋值的参数定义,分支和循环控制语句,类似于子程序调用的宏调用等功能。除此以外,还包含有比较强的数学运算能力,如算术运算、比较、取整和标准FORTRAN的三角函数、指数函数、双曲函数等。利用APDL语言还可以读取ANSYS程序数据库中的数据进行数学运算,以及建立分析模型,控制ANSYS程序的运行过程等功能。
图1所示是一个三杆并联的机器人结构的原始设计方案。机器人的机座采用门式结构,三个驱动杆的长度可变,使得末端件能够完成指定的运动。由于采用三个驱动杆,上横梁的核心部分呈等边三角形,如图2所示。结构沿立柱平面无法设计成对称形式,横梁在两个立柱之间沿x方向的位置难以确定。而且,原始设计方案的有限元分析结果表明,横梁与1驱动杆相联的悬伸端沿z向变形比较大,刚性比与2、3杆相联的部分弱很多,约为其它两个杆所在部位刚度的十分之一。这种刚度的不一致性给末端件在高工作载荷下的运动精度带来一定的影响。确定上横梁沿x方向的位置是很有必要的。对于上述问题,一般的优化策略是不断地改变上横梁的位置,经多次试算,最终找到一个合适的位置。每次试算,都要根据计算结果修改模型,重新建模。手工*作迭代过程,如果迭代次数比较多,很难避免出现失误,优化失败的几率比较高。模型修正以后,上横梁的壁板和筋板形状会发生变化。由于上横梁的内部结构形状比较复杂,壁板和筋板形状的变化对上横梁刚度的影响难以预测,试算的次数比较多,修改模型的工作量也相应比较大。 图1 原始设计方案
本文利用ANSYS程序的APDL语言对上述的横梁位置优化问题给出了一个优化策略。在第一次的分析模型建立起来后,利用命令记录文件中生成的建模指令构造用户的优化控制程序,后续的迭代优化过程都由APDL语言编写的用户控制程序完成,不再需要人工干预。对图1所示的模型进行修改所需的时间减少到可以忽略的程度,整个优化过程的效率有很大提高。
2. 分析模型的建立
图1所示结构由三部分组成:两个立柱,一个横梁和三个驱动杆。立柱和横梁通过图1所示立柱上部第一个水平筋板处的螺钉联接。由于主要考虑横梁的变形,驱动杆部分可以略去,在联接部位代之以等效力。 横梁部分的核心是三个与驱动杆联接的部位和中间的有特殊用途的孔,尺寸必须保证。其它部分则与立柱能有效联接即可。为建模的方便,在ANSYS程序中将横梁的核心部分做成一个元件(component)。在优化过程中,这一部分几何形状保持不变,只改变它与立柱沿x轴的相对位置,即只改变联接部分的几何形状。需要注意的是,联接部分在优化迭代过程中只改变几何尺寸,不改变拓扑结构,可以通过程序自动完成。 图2 横梁的核心部分
横梁与每个立柱通过六个螺栓联接。在螺栓联接部位,结点应当耦合。在非螺栓联接部位,结合面不能承受拉应力,应设置接触单元。模型中包含接触单元以后,求解过程需要大量的非线性迭代计算,机时增加很多。将横梁与立柱作为一体进行的试算表明,立柱的外侧受拉,内侧受压。考虑到主要分析对象是上横梁与三个驱动杆处的联接刚度,可以将接触单元略去,在立柱外侧建立图2所示的联接面几何模型。横梁与立柱的联接处,有螺栓的部位,上下面共享一个关键点,没有螺栓的部位,上下面各自拥有一个关键点。这样做的好处是,网格剖分时,在公共关键点处自动生成一个结点,建立起立柱和横梁之间的耦合关系。在非公共关键点处,横梁和立柱上的结点则不会有这种耦合关系。在立柱的内侧,立柱与横梁在接触面上联成一体,所有结点都将是耦合的,立柱和横梁共享这些结点,而不仅仅是在螺栓联接处。这样做的好处是,既省去了接触单元,又能反映螺栓联接的特点。 立柱底部与基础的联接处理成刚性的全约束。分析的主要目标是横梁的刚性,可以认为上横梁在与三个驱动杆的联接处承受相同的载荷。这样可以根据计算得到的变形结果,直接评价三个联接部位的刚度。结构采用薄壁铸件,在分析模型中采用板壳单元shell63模拟。结构的外壁与筋板厚度不同,需要为板壳单元设置两组不同的实常数(real constant)。同样,为了建模的方便,将两个立柱做成另一个元件。进而将立柱核心部分建立的元件与立柱元件做成一个部件(assembly)。这样,在修改模型的时候,可以很容易地将立柱与横梁的联接部分选择出来,完成修改过程。 经过上述的处理,可以建立类似图1所示的分析模型。由于模型和载荷的对称性,实际计算可以只取一半,总的单元数就只有8927个,总结点数为4341个,全部使用三角形网格剖分。 3. 优化策略
优化过程本质上是一个试算-修改的迭代过程。以原始设计方案作为迭代计算的初始条件,迭代过程结束的条件是:三个驱动杆联接处的刚度接近相等或者迭代次数过多。对于这个具体问题,可以预知三个联接部位刚度相等时的横梁位置是存在的,如果迭代不收敛,只能是移动量不合适或者初始位置不合适。为了迭代过程能够快速有效地收敛,采用对分搜索的变步长算法,自动修正移动量。算法稍微复杂一些,但是对初值的要求不高,有比较好的通用性。 图3 立柱外侧与横梁的几何联接
下面给出优化策略的控制流程。1. 从备份文件中读出横梁在初始位置时的模型数据;2. 修改横梁的位置;3. 求解修改后的模型;4. 读出与三个驱动杆联接部位的变形;5. 判断是否满足收敛条件,不满足,修改移动量后返回3,满足,则退出循环;6. 存储求解结果后退出。下面是程序的主要控制代码及其功能的注释。其中具体的建模指令被省略,代之以省略号,为了便于同控制流程对照,加了部分必要的注释。/BATCH ANSYS的批处理文件标记RESUME,,robbak,db,,0 从备份文件robbak.db中读入原始数据/PREP7 进入前处理器,。。。 删除横梁与立柱的联接部分。。。 将横梁核心元件移动一个初始step。。。 在几何模型上施加载荷和约束。。。 网格划分FINISH 退出前处理器/SOLU 进入求解器SOLVE 求解FINISH 退出求解器/POST1 进入后处理器*GET,front,NODE,2013,U,Z 读第一个驱动杆联接处的结点变形至front*GET,back,NODE,1441,U,Z 读第二个驱动杆联接处的结点变形至backlastdif=1 上一次front与back差值的绝对值flag=-1 优化结果可行性的标记step=0.05 从初始位置到最优位置的移动量初值*DO,I,1,10,1 迭代循环开始,循环变量I,取值范围1~10,步长1dif=abs(front-back) 本次计算结果中front和back的差的绝对值*IF,dif,LE,1.0E-6,THEN 判断差值dif是否满足要求flag=1 满足,则标记置1*EXIT 退出迭代计算*ELSEIF,dif,GE,lastdif,THEN 判断差值dif是否变大flag=2 差值变大,标记置2。。。 对分法修改step。。。 继续以前一次位置作起点,以修改后的step为当前step,开始新一轮 迭代计算*ELSE 差值不小于期望值,且逐渐变小,需继续移动上横梁。。。 从备份文件中读入初始状态数据。。。 进入前处理器AGEN, ,P51X, , , ,step, , , ,1 移动上横梁的核心部分,移动量step。。。 构造横梁和立柱的联接部分。。。 施加载荷和约束。。。 网格划分FINISH 退出前处理器/SOLU 进入求解器SOLVE 求解FINISH 退出求解器/POST1 退出后处理器*GET,front,NODE,2013,U,Z 给front赋值*GET,back,NODE,1441,U,Z 给back赋值lastdif=dif 更新lastdif*ENDIF if-else 语句的结尾*ENDDO *DO 循环语句的结尾
上面这个文件比较长,约1000行。主要目的是为了使程序的结构清晰。有很多代码是复用的,如一些建模指令和后处理指令。使用时,可以将这些指令构成相应的宏在主程序中调用,能有效地缩短主程序的长度。此外,文件中多数具体的建模指令是从ANSYS程序的命令记录文件中复制过来的,包含很多在图形界面下才用到的指令。以ANSYS的批处理方式使用时,可以将这些命令删除,也能缩短文件长度。 在上述程序中,模型指定部位的变形是通过结点读取的。在网格剖分中,为了确保剖分成功,并且不产生形状恶劣的单元,不得已使用了三角形网格。优化过程的每一步迭代,模型的立柱和横梁核心联接部分的几何形状都会不同,这会使剖分出来的网格数量有所不同,指定位置处的结点编号就有可能不同。依据结点编号从数据库中读取的数据就有可能不是指定位置的数据。为此,需要首先剖分横梁的核心部分,这样,横梁上的结点编号在每次迭代过程中都是固定的。 迭代的最终结果是否是一个可行的结果,需要通过查看参数flag判定。只有flag=1,计算结果才是可行的,否则表示迭代过程并没有找到最佳位置。横梁的移动量存储在参数step中。如果计算结果是可行的,step的值就是横梁从原始设计位置到最优位置的移动量。总的迭代次数存放在参数I中,通过I的最终值,可以估计分析结果的可行性和初始条件是否合适。 4. 分析结果 优化过程总共进行了7次迭代,耗费机时约2小时37分钟,找到了最优位置。由于机器读入指令的过程比人工修改模型的速度快得多,修改模型的时间基本可以忽略。优化过程所需时间取决于求解时间。与人工完成的优化过程相比,效率有了较大提高,而且避免了复杂模型在建模过程中容易出现的人为失误导致后续迭代计算出错或偏离优化目标等问题。5. 结论 分析结果表明,本文给出的优化方法是有效的,达到了预期的优化目的。该方法的优点是可靠性高,优化过程不易出错。其次是通用性比较好,在类似的结构优化设计中,文中给出的控制代码无需作大的改动即可移植使用。缺点是在优化过程中不能改变优化对象的拓扑结构。在不改变拓扑结构的条件下,修改模型的工作量越大,越能体现出该方法的优越性。另外,对于需要改变拓扑结构的优化问题,可以使用ANSYS程序提供的拓扑优化功能。如果将本文的方法与之结合,可以取得更好的优化效果。参考文献 ANSYS Advanced Analysis Techniques, 3 rd Edition, SAS, IP, Inc.@ ANSYS Commands Reference, Tenth Edition, SAS, IP, Inc.@ APDL Programmer's Guide, Third Edition, SAS, IP, Inc.@Optimization for Robot StructureDepartment of Mechanical Engineering, Xi’an University of TechnologyAbstractIn optimal design for robot structures, design model need to be modified and computed time after time. Becauese modifying usually can not automatically be run, it comsumes a lot of time. This paper gives a method that uses APDL language of ANSYS software to make optimal control program, which make optimal procedure run automatically and optimal efficiency be improved.Key word: finite element, structural optimization
此文由西安理工大学机械与精密仪器学院王世军老师提供特此表示感谢 利用ANSYS随机振动分析功能实现随机疲劳分析
ANSYS随机振动分析功能可以获得结构随机振动响应过程的各种统计参数(如:均值、均方根和平均频率等),根据各种随机疲劳寿命预测理论就可以成功地预测结构的随机疲劳寿命。本文介绍了ANSYS随机振动分析功能,以及利用该功能,按照Steinberg提出的基于高斯分布和Miner线性累计损伤定律的三区间法进行ANSYS随机疲劳计算的具体过程。 1.随机疲劳现象普遍存在 在工程应用中,汽车、飞行器、船舶以及其它各种机械或零部件,大多是在随机载荷作用下工作,当它们承受的应力水平较高,工作达到一定时间后,经常会突然发生随机疲劳破坏,往往造成灾难性的后果。因此,预测结构或零部件的随机疲劳寿命是非常有必要的。 2.ANSYS随机振动分析功能介绍 ANSYS随机振动分析功能十分强大,主要表现在以下方面: 1. 具有位移、速度、加速度、力和压力等PSD类型; 2. 能够考虑a阻尼、b阻尼、恒定阻尼比和频率相关阻尼比; 3. 能够定义基础和节点PSD激励; 4. 能够考虑多个PSD激励之间的相关程度:共谱值、二次谱值、空间关系和波传播关系等; 5. 能够得到位移、应力、应变和力的三种结果数据: 1s位移解,1s速度解 和1s加速度解;
3.利用ANSYS随机振动分析功能进行疲劳分析的一般原理 在工程界,疲劳计算广泛采用名义应力法,即以S-N曲线为依据进行寿命估算的方法,可以直接得到总寿命。下面围绕该方法举例说明ANSYS随机疲劳分析的一般原理。 当应力历程是随机过程时,疲劳计算相对比较复杂。但已经有许多种分析方法,这里仅介绍一种比较简单的方法,即Steinberg提出的基于高斯分布和Miner线性累计损伤定律的三区间法(应力区间如图1所示):
应力区间 发生的时间
-1s ~+1s 68.3%的时间
-2s ~+2s 27.1%的时间
-3s ~+3s 4.33%的时间
99.73%
大于3s的应力仅仅发生在0.27%的时间内,假定其不造成任何损伤。在利用Miner定律进行疲劳计算时,将应力处理成上述3个水平,总体损伤的计算公式就可以写成: 其中:
:等于或低于1s水平的实际循环数目(0.6831 );
:等于或低于2s水平的实际循环数目(0.271 );
:等于或低于3s水平的实际循环数目(0.0433 );
, , :根据疲劳曲线查得的1s、2s和3s应力水平分别对应许可循环的次数。
综上所述,针对Steinberg提出的基于高斯分布和Miner线性累计损伤定律的三区间法的ANSYS随机疲劳分析的一般过程是:(1) 计算感兴趣的应力分量的统计平均频率(应力速度/应力);(2) 基于期望(工作)寿命和统计平均频率,计算1 ,2 和3 水平下的循环次数 、 和 ;(3) 基于S-N曲线查表得到 、 和 ;(4) 计算疲劳寿命使用系数。显然,根据其他随机疲劳分析方法和ANSYS随机振动分析结果,我们还可以进行许多类似的疲劳分析计算。
膜元Shell41是否能作大变形分析?
膜元Shell41可以用于大变形分析。但是膜元shell41在处理大变形问题时必须采用三角形单元,因为四边形单元会产生跷曲(warping),所以在划分网格时请选Tri。
耦合及约束方程讲座一、耦合
当需要迫使两个或多个自由度取得相同(但未知)值,可以将这些自由度耦合在一起。耦合自由度集包含一个主自由度和一个或多个其它自由度。
典型的耦合自由度应用包括:
· 模型部分包含对称;
· 在两重复节点间形成销钉、铰链、万向节和滑动连接;
· 迫使模型的一部分表现为刚体。
如何生成耦合自由度集
1. 在给定节点处生成并修改耦合自由度集
命令:CP
GUI: Main Menu>Preprocessor>Coupling / Ceqn>Couple DOFs
在生成一个耦合节点集之后,通过执行一个另外的耦合*作(保证用相同的参考编号集)将更多节点加到耦合集中来。也可用选择逻辑来耦合所选节点的相应自由度。用CP命令输入负的节点号来删除耦合集中的节点。要修改一耦合自由度集(即增、删节点或改变自由度标记)可用CPNGEN命令。(不能由GUI直接得到CPNBGEN命令)。
2. 耦合重合节点。
CPINTF命令通过在每对重合节点上定义自由度标记生成一耦合集而实现对模型中重合节点的耦合。此*作对“扣紧”几对节点(诸如一条缝处)尤为有用。
命令:CPINTF
GUI: Main Menu>Preprocessor>Coupling / Ceqn>Coincident Nodes
3. 除耦合重复节点外,还可用下列替换方法迫使节点有相同的表现方式:
o 如果对重复节点所有自由度都要进行耦合,常用NUMMRG命令(GUI:Main Menu>Preprocessor>Numbering Ctrls>Merge Items)合并节点。
o 可用EINTF命令(GUI:Main Menu> Preprocessor>Create> Elements >At Coincid Nd)通在重复节点对之间生成2节点单元来连接它们。
o 用CEINTF命令(GUI:Main Menu>Preprocessor> Coupling/Ceqn >Adjacent Regions)将两个有不相似网格模式的区域连接起来。这项*作使一个区域的选定节点与另一个区域的选定单元连接起来生成约束方程。
生成更多的耦合集
一旦有了一个或多个耦合集,可用这些方法生成另外的耦合集:
1. 用下列方法以相同的节点号但与已有模式集不同的自由度标记生成新的耦合集。
命令:CPLGEN
GUI: Main Menu>Preprocessor>Coupling / Ceqn>Gen w/Same Nodes
2. 用下列方法生成与已有耦合集不同(均匀增加的)节点编号但有相同的自由度标记的新的耦合集:
命令:CPSGEN
GUI: Main Menu>Preprocessor>Coupling / Ceqn>Gen w/Same DOF
使用耦合注意事项
1. 每个耦合的节点都在节点坐标系下进行耦合*作。通常应当保持节点坐标系的一致性。
2. 自由度是在一个集内耦合而不是集之间的耦合。不允许一个自由度出现在多于一个耦合集中。
3. 由D或共它约束命令指定的自由度值不能包括在耦合集中。
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
FINISH
/SOLU
ANTYPE,MODAL
MODOPT,subspa,2,,,2,ON
MXPAND,2,,,YES
SOLVE
FINISH
/post1
set,1,1
etabl,kene,kene
ssum
*get,keneval1,ssum,,item,kene
*get,freqval1,mode,1,freq
eigen1=(2*3.14159*freqval1)**2
pmass1=2*keneval1/eigen1
set,1,2
etabl,kene,kene
ssum
*get,keneval2,ssum,,item,kene
*get,freqval2,mode,2,freq
eigen2=(2*3.14159*freqval2)**2
pmass2=2*keneval2/eigen2
finish
ANSYS的几种动画模式
Q: ANSYS中有好几种动画模式,但并非同时可用。那么有哪几种类型,何时可用呢?
A: ANSYS中有四种动画模式:Bitmap,AVI,Display List,Pixmap。该种模式是否可用取决于运行环境是UINX还是PC,以及是使用二维还是三维显示设备。可以通过选择菜单Utility Menu>PlotCtrls>Device Options(或键入适当的命令)来制作动画。下面是该命令选项的小结:
二维显示设备的PC: Bitmap(命令-/device,anim,bmp)
AVI(命令-/device,anim,avi)
三维显示设备的PC: Bitmap(命令-/dv3d,anim,1)
AVI(命令-/dv3d,anim,2)
Display List(命令-/dv3d,anim,0)
二维显示设备的UNIX:Pixmap(缺省,无相应命令)
三维显示设备的UNIX:Pixmap(命令-/dv3d,anim,1) Display List(命令-/dv3d,anim,0)
Q: 这些动画模式的区别是什么?
A: Display List选项(三维设备可用)与其他方式的不同在于:
Display List允许在播放动画的过程中对模型进行动态*作(如放大缩小等),而其它模式不能;
播放器不同:Bitmap,Display List,Pixmap动画模式在ANSYS图形窗口进行播放,可以通过ANSYS动画控制器面板控制动画;AVI(只在PC上)用WINDOWS媒体播放器播放。
需注意在ANSYS5.5中缺省的动画模式为AVI,播放器为媒体播放器。而在ANSYS5.6中二维设备的缺省动画模式为Bitmap,三维设备的缺省动画模式为Display List,动画在ANSYS图形窗口播放。
Q: 如何存储在ANSYS中创建的动画?
A: 对于PC环境,Bitmap或AVI模式的动画会自动存储为jobname.avi(jobname是你指定的分析名称)。Display List动画在PC上不会自动存储,必须通过菜单Utility Menu> PlotCtrls >Animate>Save Animation指定存储,典型格式为jobname.anim。
对于UNIX环境,Pixmap及Display List都只能按ANSYS指定的格式进行存储,方法同上。
Q: A用Bitmap模式存储的.avi文件与用AVI模式存储的.avi文件有何不同?
A: Bitmap模式的文件比AVI模式的文件要小,因为采用Bitmap模式存储的 .avi文件不包括回放的画面,它在ANSYS动画控制器中播放,可以向前或向后显示。而WINDOWS媒体播放器没有forward/backward选项,回放的画面必须包括在AVI动画文件中,因此文件较大。
Q: UNIX上制作的动画能否在PC上播放?
A: 可以。可以使用ANSYS ANIMATE程序(ANIMATE.exe)在PC上播放.anim或.avi文件。还可以将.anim文件转变为.avi文件。所有的ANSYS产品都提供 ANIMATE程序,该程序位于ANSYS安装盘的根目录中。
Q: ANIMATE是否能读入所有的动画文件?
A: 不能。ANIMATE程序接受UNIX上的Pixmap模式的.anim文件或PC上的Bitmap或AVI模式的.avi文件。
如何正确理解ANSYS的节点坐标系
节点坐标系用以确定节点的每个自由度的方向,每个节点都有其自己的坐标系, 在缺省状态下,不管用户在什么坐标系下建立的有限元模型,节点坐标系都是与总 体笛卡尔坐标系平行。有限元分析中的很多相关量都是在节点坐标系下解释的,这些量包括:
输入数据:
1 自由度常数
2 力
3 主自由度
4 耦合节点
5 约束方程等
输出数据:
1 节点自由度结果
2 节点载荷
3 反作用载荷等
但实际情况是,在很多分析中,自由度的方向并不总是与总体笛卡尔坐标系平行,比如有时需要用柱坐标系、有时需要用球坐标系等等,这些情况下,可以利用ANSYS的“旋转节点坐标系”的功能来实现节点坐标系的变化,使其变换到我们需要的坐标系下。具体*作可参见ANSYS联机帮助手册中的“分析过程指导手册->建模与分网指南->坐标系->节点坐标系”中说明的步骤实现。
为什么在用BEAM188和189单元划分单元时会有许多额外的节点?可不可以将它们删除?
BEAM188和189是ANSYS从5.5版本开始起增加的新的梁单元,它的最大特点是支持梁截面形状显示,可以考虑剪切变形和翘曲,同时也支持大转动和大应变等非线性行为,而且也可以直接显示梁截面上的应力和变形。在用BEAM188和189建模时必须先定义截面形状,而且必须指定一个方向点,在形成的每个梁单元中都会生成一个方向节点(即额外节点),它是梁单元的组成部分,所以不能被删除。
应用ANSYS软件进行钢板弹簧精益设计
[提要] 汽车钢板弹簧是重要的高负荷安全部件。实际工作中,钢板弹簧同时存在大变形、预应力和各叶片间的接触等多种非线性响应。传统的设计计算方法,是基于材料力学线性梁理论,设计计算中进行了过多的简化,不能确切地反映其力学本质。在实践上,汽车钢板弹簧也确实常常发生一些传统的设计计算方法不能解释的问题。因此汽车钢板弹簧呼唤精益设计的呼声高。 本文提出应用ANSYS技术对汽车钢板弹簧进行精益设计计算方法,可以精确计算由单片自由曲率和形状组装后各片预应力响应和叶片间的接触状态、接触压力以及钢板弹簧装配后大变形工作时各片的应力响应、叶片间接触状态及接触压力。从而可以实现钢板弹簧的精益设计。一 前 言 钢板弹簧几何形状简单,传统的计算方法应用材料力学线性梁理论,简单地看来是合理的。但是,实际上远不如此,例如传统的计算方中使用的“共同曲率法”和“集中载荷法”。前者假定钢板弹簧在任何载荷下,钢板弹簧各片彼此沿整个长度无间隙接触,在同一截面上各片具有相同的曲率。于是将之简化为梯形单片弹簧进行计算。而“集中载荷法”的假定正好相反,他假定各片只在端点接触。显然,上面两个假定都不符合实际。组装过程的预应力响应更是应用近似方法。估算结果和实际相差大。不能满足现代汽车设计需要。 事实上,弹簧各片的接触状态与各片本身的和同组其他叶片的自由曲率、弧高、厚度、长度等几何形状;装配及工作负荷等多种因素有关。他是多个弹性体的组合件承受工作载荷条件下的一个非线性接触响应问题。不可能服从一个事先的“假定”。应用CAE技术则无须任何假定,完全按各片的几何结构和材料条件,同时考虑其大变形,接触和摩擦情况进行计算分析,求得刚度、应力响应、接触状态及接触压力。这就可能设计出各片合理的几何尺寸和整体刚度。取得精益设计效果。并且应用他解释异常损环问题。 应用CAE技术对汽车钢板弹簧进行精益设计计算的思想,并不是现在产生的。问题是这种需要同时考虑大变形、柔性面对柔性面的接触和分有预负荷及工作负荷等多个载荷步条件、多工况的非线性问题的计算工作,技术难度大。同时,一般的CAE 软件在结构分析模块中,虽然可能有一定的非线性功能,但是还不能胜任这类复杂的非线性问题求解,需要应用专门的非线性软件。这就要求用户追加软件投资,同时这类非线性分析需要有较高的计算技巧和分析策略,一般工程设计用户掌握有一定困难,同时,显式非线性求解技术软件主要应用于碰撞,冲压等高度非线性仿真,对钢板弹簧这类大位移小应力工作部件,计算的应力响应精度低。这是应用CAE技术于汽车钢板弹簧精益设计计算迟迟没有开展起来的原因。 当前,CAE技术进步十分快,例如ANSYS 5.6 普通结构分析模块的隐式非线性功能,可以胜任钢板弹簧的全部非线性计算任务,她有很方便的非线性分析参数设置导航功能,使得分析工作技术减化,由于计算技术的进步,全部分析工作在PC机上就可以完成。这为CAE技术应用于钢板弹簧精益计算打开了新局面。当前,国内业界已经有应用CAE技术于钢板弹簧分析的内部报告,但是工作中没有分析装配过程的预应力或因为应用显式软件而降低了应力响应精度。 本文应用ANSYS 5.7 普通结构分析模块,对少片和普通叠片(十片)两种钢板弹簧的装配过程和工作过程进行了计算分析。在完成特定产品精益设计的同时,讨论了柔性面接触计算的关键技术问题。同时,分析工作应用二 计算模型建立 钢板弹簧的几何简单,实体建模一般没有困难,建议的单元厚度方向尺寸取单片弹簧厚度的二到四分之一,纵、横方向应用10到 15毫米网格,就可以保证工程要求。再密集的网格可能增加计算时间。据对称性质,模型可取其组件的四分之一,以减少计算时间。如果为了加快计算,还可以先取一单位宽度建模型。钢板弹簧模型可以方便的应用参数建模。本研究工作就是应用ANSYS 5.7的参数化(APDL语言)建模的,可以非常方便地应用于不同产品分析和优化设计。
图一 四叶片弹簧模型 图二 十片弹簧模型、和变形
图一为四片变断面弹簧、图二为十片圆弧形叠片弹簧的模型和装配及工作状态的变形。模型中没有考虑卡子、川钉等连接件,因此叶片在自由状态下是离散的,为了不出现机动自由度,需要在片间加附加弱连接。计算实践表明,这个附加连接太弱,可能会产生最方程组“病态”而影响计算收敛。如果附加连接刚度过大,可能要影响计算结果的精度,因此附加弱连接是建模的一个关键。本计算使用在对称的中部有强制位移部位加附加弱连接,避免了对计算结果的影响。 模型使用八或二十节点三维实体单元模拟弹簧本体和尼龙垫片,接触对则用ANSYS软件中的 Conta170 和Conta174来模拟其柔对柔面的接触,并注意每个接触对都定义唯一的实常数。本计算题目对于四片结构有六个面-面接触对,十片结构有九个面-面接触对。三 加载和边界条件 本文的计算只报告垂直主载荷,没有涉及横方向和扭转工作力,因此加载分两个载荷步组成。第一个载荷步模拟应用中间螺栓(也可以是骑马螺栓)夹紧各叶片时弹簧的变形、应力响应和接触情况及接触压力。因此在最下叶片的底面中央定义垂直位移为零;同时定义第一片上面中央有压方向垂直位移,数值等于各叶片间的间隙之和。不定义任何力条件。并注意提供对称条件。第二个载荷步模拟在吊耳环内在向下偏外45度方向加弹簧载荷作用力时,弹簧总成工作情况。他是在第一个载荷步基础上开始工作的。因此第二个载荷步在吊耳内环相应的面上加了工作压力,数值相当于销子对弹簧的工作力作用压力。四 计算控制和计算技巧 周知,CAE分析的非线性计算求解是需要一定技巧的。为此,ANSYS软件对非线性分析中最困难的接触问题设计了面对工程用户的导航引导,这极大的方便了分析经验少的用户。但是,还有些数据需要用户定义,不单是计算控制参数,某些模型数据都有可能造成无法收敛,因此在缺少经验时,常常提倡试计算,这当然是一个有益的建议。但是,试计算也不能太盲目,同时因为计算时间长,完全靠试计算在实践上也有难处。因此本文通过例题给出主要控制参数,基本上可以满足同类分析的要求。他们主要为:l 在定义接触对时,应该将尼龙面或小面定义为接触面,钢板面定义为目标面。l 摩擦有可能会使得收敛困难,在一般钢板弹簧分析中可以先不考虑摩擦,必要时再加入摩擦另行分析。本分析没有考虑摩擦。l 接触刚度(FKN)定义的大,可以得到小的穿透量(FTOLN)结果,有利于解的精度提高,但是可能有收敛困难问题。在一般分析只,建议FKN取 0.8试计算。不能得到收敛解时,可以根据穿透量情况,再下调它。l 最大穿透量FTOLN建议定义为 0.1-0.2 。l 初始靠近因子ICONT和其他参数,一般可以应用其缺席值,不必特别定义。l 分析选项中需要将大变形开关(NLGEOM)打开。l 在第一个,夹紧载荷步中,定义20 叠代步就足够了。在第二个工作载荷步中建议定义30 至40个叠代步。 在应用ANSYS 结构分析模块做钢板弹簧分析时,上面这些参数一般可以完成计算,因为是大变形非线性,但是,是小应力响应,所以材料是弹性的,不需特别定义非线性材料。五 例题分析结果 图一和二为 分别为十片和少片例题在自由态、夹紧态、最大负荷工作态时变形计算结果。 对于少片例题,第一叶片自由弧高为 72 毫米,组装后自由弧高为 81.75 毫米 ,说明组装后,第一叶片自由弧高加大了9.72 毫米。加载荷后弧高为 38.5 毫米 ,在第二个载荷步中,加在吊耳内环下外四分之一面上压力为 6.2 N/mm2 ,通过方向和对称条件的换算,相当于在全弹簧上加 13511 牛顿载荷。钢板弹簧组的平均工作刚度为 156.2 牛顿/毫米。比传统设计方法计算精度明显提高。十片数据不再重复介绍。 在最大工作力作用下,各对叶片纵方向相对滑动量分别为 2.18;2.53和2.86毫米。(见图三)这是在没有考虑摩擦情况下结果。
图四为工作态十片弹簧接触面压力分布,调整自由各片的自由弧高,和各叶片初始几何数据,可以达到改变接触状态和接触压力的目的,取得精益设计结果。从本例题数据可见,他更接近集中载荷假定。图五为装配后各片预应力响应,从中可见,第一片有一个和工作应力响应方向相反的预应力而第四片有和工作应力响应方向相同的预应力,通过ANSYS分析可以合理地调整预应力数据,对于保证各片有合理的最终应力响应,达到弹簧精益设计目的是有效的。 对比 图五和图六,我们可以见到,该弹簧最大应力响应在中部骑马螺栓外,首片组装后有120 MPa和工作应力反方向预应力,而三 四叶片有和工作应力同方向预应力,其中最后片数值最大,为100 MPa。在最大工作负荷时,预应力和工作应力叠加,产生如图七所示的应力响应,最大应力发生在第四片,数值为 -519 和 +461兆帕。 图三 各对叶片纵方向相对滑动量
图四 工作态十片弹簧接触压力分布 图五 装配后弹簧各片预应力响应
图六 为最大工作负荷时的应力响应分布 图七 第一叶片卷耳部位的应力响应分布
图七为 第一叶片卷耳部位的应力响应分布,他是因为卷耳的工作压力面和拖板有45 度时计算得到的,不同的拖板角度,应该有不同的应力响应。对于十片叠片弹簧,不再说明具体数据。但图八给出第一、二片在装配和工作时的应力响应。
图八 多片叠片弹簧应力响应结果六 结 语上面这些数据只是本算例的结果,不一定是一个最理想的设计,但是通过本文介绍的方法,说明了,应用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程序是一个功能强大、通用性好的有限元分析程序,同时它还具有良好的开放性,用户可以根据自身的需要在标准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
%cat 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的功能,从这里你将能看到我们能用APDL干些什么。
还记得UIDL实例解析二中的一个例子巴,这里我们有必要重温一下:
如图1一所示,一带孔薄板,长4000mm,宽2000mm,顶部中心部分1800mm处承受42MP的压力,左右两个长圆孔中心分别踞四周1000mm,长圆孔的具体形式如图1所示,上下分别为半圆,中部用直线衔接。这里假设长圆长轴与水平方向夹角为α。
为了使得孔边缘应力集中最小,这里拟调整α的大小(α∈[-π/2, π/2]),以便在固定的H情况下达到长圆孔周围应力集中最小。
在UIDL实例二的部分我们只是在GUI界面下实现了它的参数化建模,这部分工作在本章的综合实例中仍然有效,下面我们将一步步完全实现这一问题。
2 解题思想
本问题是在用户给定H的情况下求得α角的最优解,使得孔边最大拉应力最小(这是因为材料抗拉性能比较弱)。这里我们的想法是把α取每一个角度时候得到的孔边最大拉应力都求出,比较一下,得到孔边拉应力最小情况下对应的α取值。现在的问题是,我们只能够对每一离散的α值求取其孔边最大拉应力,让α在之间连续取值不仅是无法做到的,而且在工程中也没有必要,这里我们拟每隔一定角度计算一下孔边最大拉应力,最终在这些有限的角度中求取出最佳的α值。因此我们还需要用户自定义求解的精度参数,即我们每隔多少角度来计算一次(决定了结果精确到什么程度)。比方说我们定义每隔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 非常感谢 好东西啊,谢谢楼主了 真辛苦楼主了,好东东,谢谢