APDL(ANSYS参数设计语言)最强有力的特征之一是创建宏的能力。宏就是一系列贮存在一个文件中的ANSYS命令,并且能象一个ANSYS命令一样来运行。
常用宏功能:
它可以如同ANSYS命令一样具有变量。
分支和循环用来控制一系列命令。
交互式特征如图形拾取,提示,以及对话框。
宏可以嵌套――一个宏引用第二个宏,第二个宏引用第三个宏,等等。一直可嵌套20级。
下面我们将给出创建宏的基本步骤:
创建一个宏
带参数的宏
分支
循环
注意事项
1.创建宏
创建一个宏,在文本编辑器中,创建一系列命令,并以文件名name.mac保存它们,name以一个字母开始,可以达32个字符。在文件名中空格不允许。避免特殊字符。确保name不是一个有效的ANSYS命令。可以在开始或所有处理器(PREP7,POST1,等等)中进行检验。如果得到这种信息...不是有效的命令或宏…那么这个名字是“安全的”。
扩展名.mac允许你运行宏如同运行一个命令一样:只需敲入name。
例子:
宏totvolume.mac用来计算所有单元的整个体积:
esel,all !选择所有单元
etable,volume,volu!将所有单元体积建立单元表
ssum!求解单元表选项总和
*get,totvol,ssum,,item,volume!totvol=体积总和
*stat,totvol!列totvol值
在Post1(在求解之后)中发出totvolume来计算整个体积,如图12-17所示。
图1 通过宏计算整个体积
宏搜索路径:
ANSYS首先在下列搜索路径中寻找文件name.mac并运行它:
/ansys110/docu
在ANSYS_MACROLIB环境变量路径中
在WINDOWS系统中的注册路径
当前工作路径
-如果在上级路径和下级路径同时寻找到同样的文件名,则采用上级路径。
2.带参数的宏
通过特殊的字符名,你可以创建多达20个参数的宏:
NAME,arg1,arg2,arg3,…,ar10,ar11,ar12,…,ar20
参数如同标准的ANSYS命令中的参数,可以为:
数字
字符(被包括在单引号中)
参数(标量或数组)
参数表达式
参数的意义由所定义的宏来决定。
例如,我们可以定义宏totvolume.mac来计算指定类型的所有单元体积和:
TOTVOLUME,TYPE
宏具体如下:
esel,s,type,,arg1
etable,volume,volu
ssum
*get,totvol,ssum,,item,volume
*vwrite,arg1,totvol
(‘Total volume for type’,f4.0,’elements=’,f8.2)
求解之后在通用后处理器中发出totvolume,1,如图2所示,将得出下列结果:
图2 带参数的宏计算整个体积
注意:
特殊的字符名ARG1-ARG9,…..仅仅是局部参数,仅仅在该宏中有效。
一旦宏运行结束后并返回ANSYS主程序,它们将无意义。
避免在模型的其它地方应用这些名称。
字符名ARG1-ARG9,…..不能改变,只能用这些名字。
运行宏时宏名字后面的输入参数依次代入这些参数。
例子:
作几个关键点,用参数来控制连不同的线。
宏名称:crline.mac
finish
/clear
/prep7
k,1,0,0,0
k,2,0,1,0
k,3,1,1,0
l,arg1,arg2
gplot
输入crline,1,2 或 crline,2,3 或 crline,1,3来验证
3.分支
通过应用IF-THEN-ELSE结构,在只有一定的条件满足的情况下,你可以运行一个命令或命令块。
在*IF 和*ELSEIF命令中,可以运用AND,OR ,或XOR 比较符。
IF,A,EQ,B,AND,C,GT,D,THEN
分枝以*IF开始和*ENDIF结束。*ELSEIF和*ELSE在它们中也可以使用:
*if,x,eq,y,then
,,,,,,
,,,,,,
*elseif,x,eq,z,then
,,,,,,
*else
,,,,,,
,,,,,,
*endif
如图3分支示意图。
图3 分支示意图
例如,你可以在宏totvolume.mac中增加if-test来测试输入的变量的有效性,如图4所示:
*if,arg1,lt,1,then!如果ARG1小于1
*msg,warn!发出一个警告
Element type number must be 1 or greater!退出宏
/eof
esel,s,type,,arg1 !选择所有确定类型的单元
etable,volume,volu!建立单元表
ssum!求解单元表数据总和
…
发出totvolume,-1将得出下列结果:
图4 宏测试图
4.循环
DO循环允许执行一个命令块数次
实际上在DO循环中对其中包含什么内容没有限制。你可以包含任何ANSYS命令包括前处理,求解和处理,这是在条件允许的情况下。
*DO开始循环,*ENDDO结束循环。
你可以用*EXIT(退出循环)和*CYCLE(跳到DO循环末)控制循环。
EXITT和CYCLE也可以根据if-test的结果来执行。
作为一个例子,我们通过加入DO循环来扩展宏totvolume.mac,计算所有单元类型并将它们各的体积保存在数组参数中。
! -- Macro TOTVOLUME.MAC to calculate total element 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 x 1 array
*do,i,1,numtypes! 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(i)! totvol = grand total volume
esel,all! Activate full set of elements
5.一般注意事项
建立短小且简单的宏
当创建宏的时候,可以在ANSYS命令窗口中剪切并粘贴命令来检测这些命令的顺序是否正确
运用注释来描述意图或期望的执行结果
在自己的目录中保存你自己的宏
在ANSYS_MACROLIB环境变量目录中保存那些任何人都可以进入的宏
领取专属 10元无门槛券
私享最新 技术干货