1、APDL编程教程第一章 APDL是什么?APDL即ANSYS参数化设计语言(ANSYS Parametric Design Language),它是一种解释性语言,可用来自动完成一些通用性强的任务,也可以用于根据参数来建立模型。APDL还包括其它许多特性,诸如重复执行某条命令,宏,if-then-else分支,do循环,标量、向量及矩阵操作等。APDL不仅是设计优化和自适应网格划分等经典特性的实现基础,而且它也为日常分析提供了很多便利。本指南介绍了APDL的基本特性-参数,宏,分支,循环,重复和参数数组,并包含有一些简单的例子。一旦你很好地掌握了这种语言,你将会发现APDL无所不能。第二章 在
2、工具条上添加命令可以随时利用ANSYS函数和宏往工具条上添加命令(在4 .1部分讲述如何生成宏)。通过定义缩写来达到这一目的。缩写就是ANSYS命令、GUI函数名或宏名的化名(最多可包含8个字符)。例如,MATPROP可以是一个列出材料特性的宏的缩写,SAVE_DB是SAVE 命令的缩写,QUIT是函数Fnc_/EXIT(调出Exit from ANSYS对话框)的缩写。ANSYS程序提供了两种途径来利用缩写:1.在命令行的起始处键入缩写(执行缩写代表的宏、命令等)。2.通过ANSYS GUI中工具条上的按钮来执行宏或命令。下图中的工具条包含代表已存在缩写的按钮。图2-1 显示缺省按钮的工具条
3、一旦缩写,如SAVE_DB,已预先被定义,那么在工具条中该缩写及其执行的功能就可用了。一个工具条最多可包含100个缩写(可嵌套工具条来扩展这一数目)。可以根据需要重新定义或删除缩写,但是缩写不能自动保存,必须明确地保存到一个文件中,并且每次执行ANSYS任务时都要重新加载。2.1 修改工具条生成缩写的途径有:通过*ABBR命令;通过Utility Menu Macro Edit Abbreviations或Utility Menu MenuCtrls Edit Toolbar菜单项。最好通过菜单项生成缩写,原因是:单击OK按钮就自动更新工具条(若用*ABBR命令,则还需要用Utility Me
4、nu MenuCtrls Update Toolbar菜单项来使新的缩写显现在工具条上)。可以很方便地按需要编辑缩写。*ABBR命令的语法及相应的对话框是:*ABBR, Abbr, String 其中:Abbr 表示将要显示在工具条上的缩写名,最多可包含8个字符。String 为Abbr所代表的宏或命令的名称。如果String是一个宏的名称,该宏必须在宏的搜索路径之中。有关宏的更多信息在4.1部分。如果String涉及到ANSYS的拾取菜单或对话框(通过UIDL),就需要指定为Fnc_string。例如,在定义上图QUIT, POWRGRPH, 和 ANSYSWEB缩写中,Fnc_/QUIT,
5、 Fnc_/GRAPHICS, 和 Fnc_HomePage都是唯一的UIDL函数名,用来确定与QUIT, POWRGRPH,和 ANSYSWEB缩写对应的ANSYS的拾取菜单或对话框。有关UIDL的更多信息在5.6部分。String最多可包含60个字符,但不能含有以下字符:字符 $ ,命令C*, /COM, /GOPR, /NOPR, /QUIT, /UI, 或 *END 。缺省的ANSYS工具条包含如下预定义的缩写:*ABBR, SAVE_DB, SAVE*ABBR, RESUM_DB, RESUME*ABBR, QUIT, Fnc_/EXIT*ABBR, POWRGRPH, Fnc_/G
6、RAPHICS*ABBR, ANSYSWEB, Fnc_HomePage例如,要加一个按钮到工具条中来调用宏文件mymacro.mac,如下图所示在Utility Menu MenuCtrls Edit Toolbar对话框中输入值。图 2-2 加新缩写新按钮被添加到如下图所示的工具条按钮条中。图 2-3 新缩写的按钮 当执行的ANSYS任务发生改变时,工具条按钮也会改变。但是,工具条按钮被保存在数据库中,因此在ANSYS任务中执行任何一条resume命令都将仍然包含原来的工具条按钮。要保存定制的按钮定义,必须通过Utility Menu MenuCtrls Save Toolbar菜单项明确
7、地把它们保存到文件中,并通过Utility Menu MenuCtrls Restore Toolbar菜单项(*ABBRES命令)在每个ANSYS任务中进行恢复。可以在宏中编程完成这项功能。注意如果在同名文件中已经存在某些缩写,*ABBSAV命令将覆盖它们。缩写文件的格式就是一些用来产生缩写的APDL命令序列。因此,如果要编辑很多按钮或要改变其顺序,通过一个文本编辑器来实现是最方便的了。例如,下面的文件就是由保存缺省工具条按钮而产生的:/NOPR*ABB,SAVE_DB ,SAVE *ABB,RESUM_DB,RESUME *ABB,QUIT ,Fnc_/EXIT *ABB,POWRGRPH
8、,Fnc_/GRAPHICS *ABB,ANSYSWEB,Fnc_HomePage /GO *ABB命令(*ABBR的缩写形式)定义按钮。第一行的/NOPR使下面的操作不被写入log文件,最后一行的/GO使后面的操作被写入log文件。 2.2 嵌套工具条缩写上面讲的保存-恢复特性使嵌套缩写成为可能。通过在一个按钮下嵌套缩写,可以定义专用的工具条(假如有很多缩写放在一个工具条下,将会引起混乱,很难找到正确的按钮)。为了嵌套缩写,可以简单地定义一个恢复缩写文件的缩写。例如,下面的命令定义PREP_ABR作为一个缩写,该缩写从文件prep.abbr中恢复缩写。*ABBR,PREP_ABR,ABBRE
9、S,PREP,ABBRPREP_ABR 将作为一个按钮显示在工具条上。单击它,现在的按钮将被文件prep.abbr中所定义的那套按钮代替。通过定义缩写来恢复文件,并在这些文件中包含缩写,就可以在某个特定的ANSYS任务中定义不受数目限制的缩写。甚至可以通过嵌套一些缩写文件把这一方法扩展到产生自己的菜单层次。在实现菜单层次的过程中,最好在每一个文件中添加一个return按钮的缩写以通过菜单返回。第三章 使用参数3.1 参数参数是APDL的变量(它们更象Fortran变量,而不象Fortran参数)。不必明确声明参数类型。所有数值变量(整形或实形)都以双精度数储存。被使用但未声明的参数都被赋一个接
10、近0的值,或极小值,大约为。例如,若参数A被定义为A=B,但B没被定义,则赋给A一个极小值。ANSYS包含两种类型的参数:标量和数组。本章前一部分的内容适用于这两种类型。3.11后的内容只适用于数组类型的参数。 括在单引号中的字符串(最多8个字符)可以赋给参数。APDL提供的数组参数的类型有:数值,字符和表(一种特殊的数值数组,能自动产生插值)。可以用一个参数(代替数值或字符串)作为任何一个ANSYS命令的变量,该参数被求值并被赋给命令变量。例如,把值2.7赋给参数AA,然后执行命令:N,12,AA,4ANSYS程序将把该命令解释为:N,12,2.7,4 (定义节点12为点X=2.7,Y=4)
11、。3.2 参数命名规则参数名称必须以字母开头,且只能包含字母、数值和下划线。下面列出一些有效和无效的参数名: 有效参数名:ABCPIX_OR_Y无效参数名:NEW_VALUE (超过8个字符)2CF3 (以数值开头)M&E (含非法字符&)在命名参数时,注意以下几点:要避免参数名与经常使用的ANSYS标识字相同,如:自由度(DOF)标识字(TEMP, UX, PRES等);常用标识字(ALL, PICK, STAT等);用户定义标识字(如用ETABLE命令定义的标识字);数组类型标识字(如CHAR, ARRAY, TABLE等) 记住,名称为从ARG1 到 ARG9 和从AR10 到 AR99
12、的参数被保留为局部参数。通常,局部参数用于宏中(见4.4)。参数名不能与用*ABBR命令定义的缩写相同。有关缩写的更多内容在2.1中。参数名不能以下划线(_)开头。这类参数名只能用于GUI 和应用于ANSYS的宏中。 3.2.1 从*STATUS命令中隐藏参数3.3.4部分讲述了通过*STATUS命令列表显示参数。可以通过参数的命名约定来从*STATUS命令中隐藏参数:名称中以下划线(_)结束的任何参数,在执行*STATUS命令都将不被显示。 当为很多其他用户开发APDL宏时,这一功能是十分有用的。可以用这一功能来建立宏,而ANSYS用户和其它的宏编程人员不能列表显示你定义的参数。3.3 定义
13、参数除非特别说明,以下几节的内容对标量和数组类型参数都适用。从3.11后的内容只适用于数组类型的参数。定义参数的方法主要有:可以把值赋给参数,也可以提取ANSYS提供的值,再把这些值赋给参数。还可以用*GET命令或各种内嵌获取函数从ANSYS中提取值。下面的部分对其进行详细说明。3.3.1 在运行过程中给参数赋值可以用*SET命令定义参数。如下面的例子:*SET,ABC,-24*SET,QR,2.07E11*SET,XORY,ABC*SET,CPARM,CASE1也可以用=作为一种速记符来调用*SET命令(这更方便),其格式为Name=Value,这里Name是指参数名,Value是指赋给该参
14、数的数值或字符。对于字符参数,赋给的值必须被括在单引号中,并不能超过8个字符。下面的例子说明=的用法: ABC=-24QR=2.07E11XORY=ABCCPARM=CASE1在GUI中,可以直接在ANSYS输入窗口或标量参数对话框的Selection域(通过Utility MenuParametersScalar Parameters菜单项访问)中输入=。3.3.2 在启动时给参数赋值当从操作系统的命令行启动ANSYS时,可以定义参数作为变量:仅仅只需在ANSYS的运行命令(与系统有关)之后按-Name Value的格式输入参数定义即可。例如,下面定义了两个参数(parm1 and parm
15、2),分别赋值89.3 和 -0.1: ansys55 -parm1 89.3 -parm2 -0.1最好不要在启动时指派一个或两个字符参数名,以避免与ANSYS命令行选项发生冲突。 注意 UNIX操作系统把单引号和有些非文字数字字符作为专用符号。定义字符参数时,必须在单引号前插入后斜线()以免误会。例如,下面定义两个字符参数,分别赋值filename 和 200 :ansys55 -cparm1 filename -cparm2 200如果不是用命令行形式启动ANSYS,可以通过Interactive 或 Batch菜单项(仍采用上面描述的-Name Value格式)来定义参数。假如在启动时
16、要定义很多参数,更加方便的做法是在start5x.ans文件中或一个能用/INPUT命令加载的单独文件中进行参数定义。3.3.3 赋ANSYS 提供的值给参数ANSYS提供了两种方法来从ANSYS中提取数据:1.*GET命令,从某个特定的项目中提取数据并赋给某个特定的参数;2.内嵌获取函数,可在运行时使用。每个获取函数从某个特定的项目中提取特定的数据。3.3.3.1 *GET命令的用法*GET命令(Utility MenuParametersGet Scalar Data)从某个特定的项目(一个点、一个单元、一个面等)中提取ANSYS提供的数据并赋给某个用户命名的参数。各种关键词、标识字和数字
17、结合在一起来确定被提取的项目。例如,*GET,A,ELEM,5,CENT,X返回单元5的质心的X坐标值并赋给参数A。*GET命令的使用格式为:*GET,Par,Entity,ENTNUM,Item1,IT1NUM,Item2,IT2NUM这里,Par是将被赋值的参数名;Entity是被提取项目的关键词,有效的关键词是NODE, ELEM, KP, LINE, AREA, VOLU等,在ANSYS Commands Reference(ANSYS命令参考手册)中的*GET部分对之有完整的说明;ENTNUM是实体的编号(若为0指全部实体);Item1是指某个指定实体的项目名。例如,如果Entity
18、 是 ELEM, 那么Item1 要么是 NUM (选择集中的最大或最小的单元编号) ,要么是COUNT (选择集中的单元数目)。在ANSYS Commands Reference(ANSYS命令参考手册)中的*GET部分对每种实体的Item1值有完整的说明。可以把*GET命令看成是对一种树型结构从上至下的路径搜索,即从一般到特殊的确定。可用下面的例子来说明*GET命令的用法。下面的第一条命令用于获得单元97的材料属性(MAT参考号)并赋给单元BCD:*GET,BCD,ELEM,97,ATTR,MAT ! BCD = 单元97的材料号*GET,V37,ELEM,37,VOLU ! V37 =
19、单元37的体积*GET,EL52,ELEM,52,HGEN ! EL52 = 在单元52生成的热值*GET,OPER,ELEM,102,HCOE,2 ! OPER =单元102面2上的热系数*GET,TMP,ELEM,16,TBULK,3 ! TMP = 单元16面3上的体积温度*GET,NMAX,NODE,NUM,MAX ! NMAX = 最大激活节点数*GET,HNOD,NODE,12,HGEN ! HNOD = 在节点12生成的热值*GET,COORD,ACTIVE,CSYS ! COORD = 激活的坐标系值3.3.3.2 内嵌获取函数的用法对于某些项目,可以用内嵌的获取函数来代替*G
20、ET命令。获取函数返回项目的值并直接用于当前运行之中。这样就不必先把值赋给参数,然后再在运行中调用该参数,从而可以省去起中间作用的参数。例如,要计算两个节点的X坐标的平均值,可以采用*GET函数:1.使用下面的命令来把节点1的X坐标值赋给参数L1: *GET,L1,NODE,1,LOC,X2. 再使用*GET命令来把节点2的X坐标值赋给参数L2;3. 计算中间值MID=(L1+L2)/2.。更简便的方法是使用节点坐标的获取函数NX(N),该函数返回节点N的X坐标值。这样就可以不用中间参数L1 和 L2。如下所示:MID=(NX(1)+NX(2)/2获取函数的参数可以是参数也可以是其它的获取函数
21、。例如,获取函数NELEM(ENUM,NPOS)返回在单元ENUM上NPOS处的节点编号,则联合函数NX(NELEM(ENUM,NPOS)返回该节点的X坐标值。下面的表总结了所有可用的获取函数: 获取函数提取值实体状态:NSEL(N)节点N的状态(-1=未被选择, 0=未定义, 1=被选择) ESEL(E)单元E的状态(-1=未被选择, 0=未定义, 1=被选择) KSEL(K)关键点K的状态(-1=未被选择, 0=未定义, 1=被选择)LSEL(L)线L的状态(-1=未被选择, 0=未定义, 1=被选择)ASEL(A) 面A的状态(-1=未被选择, 0=未定义, 1=被选择)VSEL(V)
22、体V的状态(-1=未被选择, 0=未定义, 1=被选择)选择下一个实体:NDNEXT(N) 选择节点编号大于N的下一个节点ELNEXT(E) 选择单元编号大于E的下一个单元KPNEXT(K) 选择关键点编号大于K的下一个关键点LSNEXT(L) 选择线编号大于L的下一条线ARNEXT(A) 选择面编号大于A的下一个面VLNEXT(V) 选择体编号大于V的下一个体定位:CENTRX(E)单元E的质心在总体笛卡儿坐标系中的x坐标值CENTRY(E) 单元E的质心在总体笛卡儿坐标系中的y坐标值CENTRZ(E) 单元E的质心在总体笛卡儿坐标系中的z坐标值NX(N) 节点N在当前激活坐标系中的x坐标值
23、NY(N) 节点N在当前激活坐标系中的y坐标值NZ(N) 节点N在当前激活坐标系中的z坐标值KX(K) 关键点K在当前激活坐标系中的x坐标值KY(K) 关键点K在当前激活坐标系中的y坐标值KZ(K) 关键点K在当前激活坐标系中的z坐标值LX(L,LFRAC) 线L的长度百分数为LFRAC (0.0 to 1.0)处的X坐标值LY(L,LFRAC) 线L的长度百分数为LFRAC (0.0 to 1.0)处的Y坐标值LZ(L,LFRAC) 线L的长度百分数为LFRAC (0.0 to 1.0)处的Z坐标值就近定位:NODE(X,Y,Z)距点X,Y,Z最近的被选择的节点的编号(在当前激活坐标系中;符
24、合条件的关键点中编号最小者)KP(X,Y,Z) 距点X,Y,Z最近的被选择的关键点的编号(在当前激活坐标系中;符合条件的关键点中编号最小者)距离:DISTND(N1,N2) 节点N1 和节点N2之间的距离DISTKP(K1,K2) 关键点K1 和关键点K2之间的距离DISTEN(E,N) 单元E的质心和节点N之间的距离。质心由单元上选择的节点确定。角度:ANGLEN(N1,N2,N3) 两条线之间的夹角(由三个节点确定,其中N1为顶点)。单位缺省为弧度。ANGLEK(K1,K2,K3) 两条线之间的夹角(由三个关键点确定,其中K1为顶点)。单位缺省为弧度。离某实体最近:NNEAR(N) 最接近
25、节点N的节点KNEAR(K) 最接近关键点K的关键点ENEARN(N) 最接近节点N的单元。单元位置由选择的节点确定。面积:AREAND(N1,N2,N3)由节点N1, N2, 和 N3围成的三角形的面积AREAKP(K1,K2,K3) 由关键点K1,K2, 和 K3围成的三角形的面积ARNODE(N) 与节点N相连的被选择单元在节点N上分配的面积。对于二维平面实体,返回与节点N相连边界的面积;对于轴对称实体,返回与节点N相连边表面的面积;对于三维体实体,返回与节点N相连面的面积。法向:NORMNX(N1,N2,N3) 节点N1, N2, 和N3确定平面的法线与X轴的夹角的余弦值NORMNY(
26、N1,N2,N3) 节点N1, N2, 和N3确定平面的法线与Y轴的夹角的余弦值NORMNZ(N1,N2,N3) 节点N1, N2, 和N3确定平面的法线与Z轴的夹角的余弦值NORMKX(K1,K2,K3) 关键点K1,K2, 和K3确定平面的法线与X轴的夹角的余弦值NORMKY(K1,K2,K3) 关键点K1,K2, 和K3确定平面的法线与Y轴的夹角的余弦值NORMKZ(K1,K2,K3) 关键点K1,K2, 和K3确定平面的法线与Z轴的夹角的余弦值关联:ENEXTN(N,LOC) 与节点N相连的单元。若有很多单元与节点N相连,则由LOC定位。列表结束时返回零。NELEM(E,NPOS) 单
27、元E中在NPOS (1-20)位置上的节点号。表面:ELADJ(E,FACE) 与单元E的某个表面号(FACE)邻近的单元。面号与面载荷关键号相同。仅仅考虑那些有相同维数和形状的单元。若邻近的单元多于一个,则返回-1,若无邻近单元,返回0。NDFACE(E,FACE,LOC) 单元E的某个表面(FACE)上的LOC处的节点。面号与面载荷关键号相同。LOC指表面上的节点位置(对于IJLK表面,LOC=1指节点I,2指节点J等)NMFACE(E)包含选定节点的单元E的表面号。面号输出就是面载荷关键号。如果一个面上出现多个载荷关键号(例如线单元和面单元), 该面上的最小载荷关键号将被输出。ARFAC
28、E(E) 对于二维平面实体和三维体实体,返回包含选定节点的单元E的表面面积。对于轴对称单元,返回总表面积(360度)。自由度结果:UX(N) 节点N在X向的结构位移UY(N) 节点N在Y向的结构位移UZ(N) 节点N在Z向的结构位移ROTX(N) 节点N绕X向的结构转角ROTY(N) 节点N绕Y向的结构转角ROTZ(N)节点N绕Z向的结构转角TEMP(N) 节点N上的温度PRES(N)节点N上的压力VX(N)节点N在X向的流动速度VY(N)节点N 在Y向的流动速度VZ(N)节点N 在Z向的流动速度ENKE(N)在节点N上的湍流动能 (FLOTRAN)ENDS(N)在节点N上的湍流能量耗散 (F
29、LOTRAN)VOLT(N)节点N处的电压MAG(N)在节点N上的磁标势AX(N)在节点N上的X向磁矢势AY(N)在节点N上的Y向磁矢势AZ(N)在节点N上的Z 向磁矢势3.3.4 排列显示参数一旦定义了参数,就可以用*STATUS命令把它们排列显示出来。如果仅用*STATUS命令(没有附加参数),将列表显示目前所有已定义的参数。下面的例子说明了该命令的用法及典型的排列显示:*STATUSPARAMETER STATUS- ( 5 PARAMETERS DEFINED)NAME VALUE TYPE DIMENSIONSABC -24.0000000 SCALARHEIGHT 57.00000
30、00 SCALARQR 2.070000000E+11 SCALARX_OR_Y -24.0000000 SCALARCPARM CASE1 CHARACTER通过Utility MenuListOtherParameters 或 Utility MenuListStatusParametersAll Parameters菜单项也可以得到参数的列表显示。注意以下划线(_)开头或结尾的参数不能由*STATUS命令显示出来。可以通过给*STATUS命令定义附加参数来单独显示某些参数。下面的例子说明了如何显示参数ABC的状态:*STATUS,ABCPARAMETER STATUS- abc ( 5 PARAMETERS DEFINED)NAME VALUE TYPE DIMENSIONSABC -24.0000000 SCALAR也可以通过Utility MenuListOtherNamed Parameter 或 Utility MenuListStatus ParametersNamed Parameters菜单项指定参数的列表显示。注意虽然ANSYS最多允许有1000个参数,但是由于GUI和ANSYS宏需要用到一些参数,所以用户可用参数不到1000个。用户界面定义的参数(内部参数)数目可由*STATUS命令列出
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1