1、17.1 概述概述概要概要:v利用格式利用格式 Name=Value 定义参数定义参数v参数值可以是一个数值,一个以前定义过的参数,参数值可以是一个数值,一个以前定义过的参数,一个函数,一个参数表达式,或者一个字符串一个函数,一个参数表达式,或者一个字符串v利用利用 *GET命令或函数从命令或函数从ANSYS数据库中获取信息数据库中获取信息vANSYS存储的是参数的实际值存储的是参数的实际值(数字或字符串数字或字符串),而,而不是参数名不是参数名17.2 定义参数定义参数(续续)v以上例子是关于以上例子是关于标量参数标量参数的的, 它只有一个值它只有一个值 数字数字或者字符。或者字符。vANS
2、YS也提供数组参数也提供数组参数, 它有若干个值。数字数组它有若干个值。数字数组和字符数组都是有效的。和字符数组都是有效的。28.7-9.2-2.151.00.0 xvalues =job1job2job3job4job5 filnam =17.2 定义参数定义参数(续续)一些命名规则:一些命名规则:v参数名不超过参数名不超过8个字符,并以字母开头个字符,并以字母开头v参数名中只能出现字母,数字和下划线参数名中只能出现字母,数字和下划线v避免以下划线开头,这在避免以下划线开头,这在 ANSYS 中另有它用中另有它用v参数名不分大小写参数名不分大小写,如,如“RAD” 和和 “Rad” 是是一样
3、的。所有的参数都以大写形式存储一样的。所有的参数都以大写形式存储v避免使用避免使用ANSYS标识,如标识,如 STAT, DEFA, 和和 ALL17.3 使用参数使用参数v使用参数时,只需在对话框中或通过命令输使用参数时,只需在对话框中或通过命令输入参数名就行了。入参数名就行了。v例如例如, 利用参数定义一个利用参数定义一个 w=10,h=5的矩形的矩形,您可以使用以下菜单您可以使用以下菜单:Preprocessor Create Rectangle By 2 Corners +或命令或命令:/prep7blc4,w,h17.4 参数的用法参数的用法注意注意:v当使用参数时,当使用参数时,A
4、NSYS 将立刻把参数名换为它的将立刻把参数名换为它的值。值。上一个例子中的矩形将被存为上一个例子中的矩形将被存为105 , 而不是而不是 wh。也就是说,。也就是说,如果你在生成矩形后再改变如果你在生成矩形后再改变w或或h的值,矩形将不被修改。的值,矩形将不被修改。17.4 参数的用法参数的用法(续续)v其它一些关于参数用法的例子其它一些关于参数用法的例子:jobname=proj1/filnam,jobname! 作业名作业名/prep7youngs=30e6mp,ex,1,youngs! 杨氏模量杨氏模量force=500fk,2,fy,-force ! 2号关键点的力号关键点的力fk,
5、6,fx,force/2 ! 6号关键点的力号关键点的力17.5 从数据库中获取信息从数据库中获取信息v从数据库中获取信息并给参数赋值从数据库中获取信息并给参数赋值, 使用使用 *GET 命命令或令或 Utility Menu Parameters Get Scalar Data.v对获取大量信息是很有用的,包括模型和结果数据,对获取大量信息是很有用的,包括模型和结果数据,请参看请参看 *GET命令的详细资料。命令的详细资料。17.5 从数据库中获取信息从数据库中获取信息(续续)v例子例子:*get,x1,node,1,loc,x ! x1=节点节点1的的x坐标坐标 CSYS*/post1*g
6、et,sx25,node,25,s,x !sx25=节点节点25的的x方向应力方向应力 RSYS*get,uz44,node,44,u,z !uz44=点点44的的UZ方向的位移方向的位移RSYS*nsort,s,eqv !对节点的对节点的 von Mises 应力排序应力排序*get,smax,sort,max !smax = 排序的最大值排序的最大值etable,vol,volu !用用vol 存储单元体积存储单元体积ssum !对单元表的列求和对单元表的列求和*get,totvol,ssum,vol !totvol = 对对 vol 的列求和的列求和*CSYS = 激活坐标系激活坐标系
7、(CSYS) RSYS = 激活的结果坐标系激活的结果坐标系 (RSYS)17.5 从数据库中获取信息从数据库中获取信息(续续)v一些数据可以通过函数获取。一些数据可以通过函数获取。 例如例如:x1=nx(1) ! x1 = 节点节点1的的x坐标坐标 CSYS*nn=node(2.5,3,0) !nn=在在(2.5,3,0)处的节点处的节点CSYS*/post1ux25=ux(25) !ux25 = 25号节点的号节点的UX值值RSYS*temp93=temp(93) !temp93 = 节点节点93的温度值的温度值width=distnd(23,88) !width=23号节点和号节点和88
8、号节点号节点间的距离间的距离*CSYS = 激活坐标系激活坐标系 (CSYS) RSYS = 激或的结果坐标系激或的结果坐标系 (RSYS)17.5 从数据库中获取信息从数据库中获取信息(续续)v在一些地方您可以直接取函数值,就象用一个参数在一些地方您可以直接取函数值,就象用一个参数一样。例如:一样。例如:k,10,kx(1),ky(3) !10号关键点号关键点x坐标取坐标取1号关键点的号关键点的x坐标,坐标,y坐标取坐标取3号关键点的号关键点的y坐标坐标k,11,kx(1)*2,ky(3)! CSYS*f,node(2,2,0),fx,100!在节点在节点(2,2,0)施加力施加力FX CS
9、YS*CSYS = 激活坐标系激活坐标系 (CSYS)17.6 数组参数数组参数v数组参数数组参数 是能够容纳多个值的参数是能够容纳多个值的参数v数组参数可以是数组参数可以是 1-D, 2-D, or 3-D1-D: m 行行 1 列列2-D: m 行行 n 列列3-D: m 行行 n 列列 k 面面17.1-47.6-5.225.0107.9814173861057 -477041033 -523487141 25-666221071115x1 array5x3 arraymxnx3 arrayAA =BB =CC =17.6.1 数组参数的类型数组参数的类型v有三种数组参数类型有三种数组参
10、数类型:数值数组数值数组数据表数据表字符数组字符数组v数值数组数值数组 是标准的是标准的 1-D, 2-D, 或或 3-D 数值矩阵,如下面的数值矩阵,如下面的 BBBB(2,3) = 704BB(3,1) = 1033等等814 17 3861057 -47 7041033 -52 3487141 25 -66622 107 1115x3 arrayBB =17.6.1 数组参数的类型数组参数的类型(续续)v 数据表数据表 除了行、列、面可以是实数外,除了行、列、面可以是实数外,与数值数组类似。与数值数组类似。第零行、零列、零面必须填充数字。第零行、零列、零面必须填充数字。对定义随时间变化的
11、载荷和类似情况对定义随时间变化的载荷和类似情况非常有用非常有用例如:表例如:表FORCE可以表示力随时间的可以表示力随时间的变化关系,第零行表示时间值。变化关系,第零行表示时间值。vFORCE(0.4) = 279.9996vFORCE(6.5) = 560.0vFORCE(8.9) = 119.25v等等17.6.1 数组参数的类型数组参数的类型(续续)v一个字符型数组是一个字符型数组是 1-D, 2-D,或或 3-D 的字符串矩阵的字符串矩阵可用来存放文件名可用来存放文件名,自由度标识等自由度标识等每个字符串不超过每个字符串不超过8个字符。个字符。JOB1JOB2JOB3JOB4JOB5j
12、obs =UXUYUZROTYROTZdofs =17.6.2 怎样定义数组怎样定义数组定义数组的步骤定义数组的步骤:1. 指定类型和维数指定类型和维数Utility MenuParameters Array ParametersDefine/EditAdd或使用或使用 *DIM 命令,例如命令,例如:*dim,aa,array,4 !411 array*dim,bb,array,5,3 !531 array*dim,force,table,5 !511 table*dim,dofs,char,6 !611 character array17.6.2 怎样定义数组怎样定义数组(续续)2. 给数
13、组赋值给数组赋值Utility Menu Parameters Array Parameters Define/Edit Edit或使用或使用*VEDIT 命令命令或使用或使用“=”命令命令.例如例如:bb(1,1)=11,21,31,41,51bb(1,2)=12,22,32,42,52bb(1,3)=13,23,33,43,5317.6.2 怎样定义数组怎样定义数组(续续)v对于表型数组对于表型数组,必须定义第必须定义第0位置。位置。 否则,取缺省值否则,取缺省值 7.8886E-31例如例如:force(1,1)=0,560,560,238.5,0force(1,0)=1E-6,0.8,
14、 7.2,8.5,9.3force(0,1)=017.6.2 怎样定义数组怎样定义数组(续续)v对字符数组对字符数组, 不能以图形方式填充字符串不能以图形方式填充字符串使用使用 “=”命令键入值命令键入值, 接着用接着用 *STAT 显示字符显示字符串串 每个字符串必须用单引号括起来每个字符串必须用单引号括起来例如例如:dofs(1) = ux, uy, uz, rotx, roty, rotz*stat,dofs17.6.2 怎样定义数组怎样定义数组(续续)v给数组赋值的其他方法给数组赋值的其他方法:用用 *VFILL 命令或命令或 (Utility Menu Parameters Arra
15、y Parameters Fill)预定义函数赋值预定义函数赋值v跃阶函数跃阶函数v随机函数随机函数v等等从一个文件读入数据从一个文件读入数据:v*VREAD 用于数值数组用于数值数组v*TREAD 用于数据表用于数据表v或或 Utility Menu Parameters Read from File从数据库获取从数据库获取(下一步讨论下一步讨论)17.6.3 获取数据库信息获取数据库信息v正如正如 *GET 从数据库获取标量数据,可以用从数据库获取标量数据,可以用 *VGET 获取数组信息获取数组信息或或 Utility Menu Parameters Get Array Datav先定义
16、数组,然后获取数据先定义数组,然后获取数据v例如例如:*dim,dispval,array,20,3! 203 array*vget,dispval(1,1),node,1,u,x! UX of nodes 1-20 in column 1*vget,dispval(1,2),node,1,u,y! UY in column 2*vget,dispval(1,3),node,1,u,z! UZ in column 317.6.3 获取数据库信息获取数据库信息(续续)v其他可获取的数组信息类型其他可获取的数组信息类型:节点和关键点坐标节点和关键点坐标(当前坐标系当前坐标系)单元属性单元属性, 体
17、,面等体,面等实体的选择状态实体的选择状态(1 选上选上, 0 未选上未选上)节点应力节点应力,应变应变,温度梯度,热通量等温度梯度,热通量等单元表数据单元表数据等等17.6.4 数组操作数组操作v一旦定义了数组参数一旦定义了数组参数,就可以对它们进行各种操作就可以对它们进行各种操作Utility Menu Parameters Array Operations 或使用或使用 *VFUN, *VOPER, *VSCFUN, *VWRITE等命令等命令17.6.4 数组操作数组操作(续续)v*VFUN 对单个数组操作对单个数组操作*vfun,b(1),sin,a(1) 等价于等价于 b(j)=s
18、in(a(j)其他操作包括:其他操作包括:v自然对数自然对数, 常用对数常用对数, 指数指数v平方根平方根, 排序排序, 复制复制v局部坐标系与整体坐标系局部坐标系与整体坐标系的相互转换关系的相互转换关系v路径的切线和法线矢量路径的切线和法线矢量v等等17.6.4 数组操作数组操作(续续)v*VOPER 对两个数组参数操对两个数组参数操作。作。*voper,c(1),a(1),sub,b(1) 等等价于价于 c(k)=a(k)-b(k)其它操作包括其它操作包括:v加加,减减,乘乘,除除v最小值最小值,最大值最大值,逻辑运算逻辑运算v微分,积分微分,积分v点积和叉积点积和叉积17.6.4 数组操
19、作数组操作(续续)v*VSCFUN 定义数组参数的属性定义数组参数的属性*vscfun,maxval,max,a(1)等价等价于一个标量于一个标量 maxval = max(a(i)其它操作包括其它操作包括:v求数组的所有元素的和求数组的所有元素的和v诸如标准偏差,中值,平均诸如标准偏差,中值,平均数等统计量数等统计量v最小值最小值/最大值,最小值最大值,最小值/最最大值的位置大值的位置 v第一个和最后一个非零记录第一个和最后一个非零记录的位置的位置17.6.4 数组操作数组操作(续续)v*VWRITE把数据按格式写进文把数据按格式写进文件件例如例如: *cfopen,wing,dat*vwr
20、ite(/,3x,Node Number,4x,Temperature,/)*vwrite,nnum(1),tval(1)(5x,f6.0,6x,e14.8)*cfclose将会创建一个名为将会创建一个名为wing.dat的文件,的文件,包含指定格式的包含指定格式的nnum和和tval数数组组17.7 宏基础宏基础vAPDL(ANSYS参数设计语言参数设计语言)最强有力的特征之最强有力的特征之一是创建宏的能力一是创建宏的能力v宏就是一系列贮存在一个文件中的宏就是一系列贮存在一个文件中的ANSYS命令,命令,并且能象一个并且能象一个ANSYS命令一样来运行命令一样来运行v常用宏功能:常用宏功能:
21、 它可以如同它可以如同ANSYS命令一样具有变量命令一样具有变量 分支和循环用来控制一系列命令分支和循环用来控制一系列命令 交互式特征如图形拾取,提示,以及对话框交互式特征如图形拾取,提示,以及对话框 宏可以嵌套宏可以嵌套一个宏引用第二个宏,第二个一个宏引用第二个宏,第二个宏引用第三个宏,等等宏引用第三个宏,等等一直可嵌套一直可嵌套20级级17.7 宏基础宏基础(续续)v在这一节,我们将给出创建宏的基本步骤:在这一节,我们将给出创建宏的基本步骤: A 创建一个宏创建一个宏 B 带参数的宏带参数的宏 C 分支分支 D 循环循环 E 总的指导方针总的指导方针 F 练习练习17.7.1 创建宏创建宏
22、v创建一个宏,在文本编辑器中,创建一系列命令,创建一个宏,在文本编辑器中,创建一系列命令,并以文件名并以文件名name.mac保存它们保存它们 name以一个字母开始,可以达以一个字母开始,可以达32个字符个字符v在文件名中空格不允许在文件名中空格不允许v避免特殊字符避免特殊字符v确保确保name不是一个有效的不是一个有效的ANSYS命令。可以命令。可以在开始或所有处理器(在开始或所有处理器(PREP7,POST1,等,等等)中进行检验。如果得到这种信息等)中进行检验。如果得到这种信息.不是有不是有效的命令或宏效的命令或宏那么这个名字是那么这个名字是“安全的安全的”扩展名扩展名.mac允许你运
23、行宏如同运行一个命令一样:允许你运行宏如同运行一个命令一样:只需敲入只需敲入name17.7.1 创建宏创建宏(续续)v例子:例子:宏宏totvolume.mac用来计算所有单元的整个体积:用来计算所有单元的整个体积:esel,all !选择所有单元!选择所有单元etable,volume,volu!将所有单元体积建立单元表!将所有单元体积建立单元表ssum!求解单元表选项总和!求解单元表选项总和*get,totvol,ssum,item,volume!totvol=体积总和体积总和*stat,totvol!列!列totvol值值在在Post1(在求解之后在求解之后)中发出中发出totvolu
24、me来计算整来计算整个体积个体积17.7.1 创建宏创建宏(续续)v搜索路径:搜索路径:v A N S Y S 首 先 在 下 列 搜 索 路 径 中 寻 找 文 件首 先 在 下 列 搜 索 路 径 中 寻 找 文 件name.mac并运行它:并运行它: 1ansys57/docu 2在在ANSYSMACROLIB环境变量路径中环境变量路径中 3在在WINDOWS系统中的注册路径系统中的注册路径 4当前工作路径当前工作路径v 如果在上级路径和下级路径同时寻找到同样的如果在上级路径和下级路径同时寻找到同样的文件名,则采用上级路径文件名,则采用上级路径17.7.2 带参数的宏带参数的宏v通过特殊
25、的字符名,你可以创建多达通过特殊的字符名,你可以创建多达20个参数的个参数的宏:宏: NAME,arg1,arg2,arg3,ar10,ar11,ar12,ar20v参数如同标准的参数如同标准的ANSYS命令中的参数,可以为:命令中的参数,可以为: 数字数字 字符(被包括在单引号中)字符(被包括在单引号中) 参数(标量或数组)参数(标量或数组) 参数表达式参数表达式v参数的意义由所定义的宏来决定参数的意义由所定义的宏来决定17.7.2 带参数的宏带参数的宏(续续)v例如,我们可以定义宏例如,我们可以定义宏totvolume.mac来计算指定来计算指定类型的所有单元体积和:类型的所有单元体积和:
26、 TOTVOLUME,TYPEv宏具体如下:宏具体如下:esel,s,type,arg1 etable,volume,volussum*get,totvol,ssum,item,volume*vwrite,arg1,totvol(Total volume for type,f4.0,elements=,f8.2)v求解之后在通用后处理器中发出求解之后在通用后处理器中发出totvolume,1将得出将得出下列结果:下列结果:17.7.2 带参数的宏带参数的宏(续续)v注意:注意: 特殊的字符名特殊的字符名ARG1ARG9和和AR10AR99仅仅是局部参数,仅仅在该宏中有效。仅仅是局部参数,仅仅在
27、该宏中有效。v一旦宏运行结束后并返回一旦宏运行结束后并返回ANSYS主程序,主程序,它们将无意义。它们将无意义。v避免在模型的其它地方应用这些名称。避免在模型的其它地方应用这些名称。 无论何时应用参数时,一定通过在宏中包无论何时应用参数时,一定通过在宏中包含注释来描述它们的意义。含注释来描述它们的意义。17.7.2 带参数的宏带参数的宏(续续)例如,下面在宏例如,下面在宏totvolume.mac的开始处的注释的开始处的注释是非常有用的。是非常有用的。 !Macro TOTVOLUME.MAC to calculate total volume of elements !Usage: TOTV
28、OLUME,TYPE.valid only in POST1 after a solve !TYPE=valid element type number esel,s type,arg1 17.7.3 分支分支v通过应用通过应用IFTHENELSE结构,在只有一定的条结构,在只有一定的条件满足的情况下,你可以运行一个命令或命令块。件满足的情况下,你可以运行一个命令或命令块。v在在*IF 和和*ELSEIF命令中,可以运用命令中,可以运用AND,OR ,或或XOR 比较符。比较符。 IF,A,EQ,B,AND,C,GT,D,THENv分枝以分枝以*IF开始和开始和*ENDIF结束。结束。*ELS
29、EIF和和*ELSE在它们中也可以使用:在它们中也可以使用:*if,x,eq,y,then,*elseif,x,eq,z,then,*else,*endif17.7.3 分支分支(续续)v条件符可能是:条件符可能是: x, EQ, y ! x = yx, NE, y ! x yx, LT, y ! x yx, LE, y ! x yx, GE, y ! x yx, ABLT, y ! |x| |y|vX和和Y可以是数字,参可以是数字,参数,或参数表达式。数,或参数表达式。v操作符为:操作符为:THEN 运行随后的命令块运行随后的命令块*EXIT 退出退出DO循环循环*CYCLE跳到跳到DO循环
30、循环末端末端v这些操作符只有当条件这些操作符只有当条件为真是才起作用。为真是才起作用。v否则,否则,ANSYS将会移至将会移至*ELSEIF(若提供若提供),*ELSE(若提供若提供),和,和*ENDIF*if, x, eq, y, then17.7.3 分支分支(续续)v例如,你可以在宏例如,你可以在宏totvolume.mac中增加中增加if-test来测来测试输入的变量是的有效性:试输入的变量是的有效性:*if,arg1,lt,1,then!如果如果ARG1小于小于1*msg,warn !发出一个警告:!发出一个警告:Element type number must be 1 or gr
31、eater/eof !退出宏!退出宏*endifesel,s,type,arg1 !选择所有确定类型的单元!选择所有确定类型的单元etable,volume,volu!建立单元表!建立单元表ssum !求解单元表数据总和!求解单元表数据总和v发出发出totvolume,-1将得出下列结果:将得出下列结果:17.7.4 循环循环v DO循环允许执行一个命令块数次。循环允许执行一个命令块数次。v实际上在实际上在DO循环中对其中包含什么内容没有限制。循环中对其中包含什么内容没有限制。你可以包含任何你可以包含任何ANSYS命令命令包括前处理,求解包括前处理,求解和处理和处理这是在条件允许的情况下。这是
32、在条件允许的情况下。vDO开始循环,开始循环,ENDDO结束循环。结束循环。 你可以用你可以用EXIT(退出循环退出循环)和和CYCLE(跳到跳到DO循环末循环末)控制循环控制循环 EXIT和和CYCLE也可以根据也可以根据if-test的结果来执行的结果来执行v作为一个例子,我们通过加入作为一个例子,我们通过加入DO循环来扩展宏循环来扩展宏totvolume.mac,计算所有单元类型并将它们各的体,计算所有单元类型并将它们各的体积保存在数组参数中。积保存在数组参数中。17.7.4 循环循环(续续)! - Macro TOTVOLUME.MAC to calculate total eleme
33、nt volume! - Usage: Issue TOTVOLUME in POST1 after a solution! - Result:! - a) evolume(i) = total volume for element type i! - b) totvol = grand total volume!*get,numtypes,etype,num,count ! Get number of element types*dim,evolume,array,numtypes ! Open a numtypes 1 array17.7.4 循环循环(续续)*do,i,1,numtype
34、s ! For i = 1 - numtypes. esel,s,type,i ! Select elements of type i etable,volume,volu ! Store volume in element table ssum ! Sum element table items*get,totvol,ssum,item,volume ! totvol = sum of volume evolume(i) = totvol ! Store totvol in evolume(i)*enddo ! End of do-loop*vscfun,totvol,sum,evolume
35、(i) !totvol=grand total volume esel,all ! Activate full set of elements精品课件精品课件!精品课件精品课件!17.7.5 一般注意事项一般注意事项v建立短小且简单的宏。建立短小且简单的宏。v当创建宏的时候,可以在当创建宏的时候,可以在ANSYS命令窗口中剪切并命令窗口中剪切并粘贴命令来检测这些命令的顺序是否正确。粘贴命令来检测这些命令的顺序是否正确。v运用注释来描述意图或期望的执行结果。运用注释来描述意图或期望的执行结果。v在自己的目录中保存你自己的宏。在自己的目录中保存你自己的宏。v在在ANSYSMACROLIB环境变量目录中保存那些环境变量目录中保存那些任何人都可以进入的宏。任何人都可以进入的宏。