宏定义处理特殊字符 ->_ANSYS宏基础

593440d537c622d16a38cd8d08d1779f.gif

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所示。

501b41187bf60335eed76d6ccc2368be.png

图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所示,将得出下列结果:

a31ac913655ce8f2cfad546d4d35a354.png

图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分支示意图。

847f90a8ff1752fbd0c3e69c85327e81.png

图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将得出下列结果:

b893bf60d1792d7e2eb25453acbf8202.png

图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环境变量目录中保存那些任何人都可以进入的宏

推荐阅读:

ANSYS二次开发之UIDL概述+实例

【北京/线上10.30-11.1日】“焊接、螺栓连接结构与过盈装配结构有限元计算”高级培训

【西安/线上10.31-11.3日】ANSYS Workbench焊接工艺仿真及焊接疲劳专题培训

71936acc3a467aec854b8efe3b586b55.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值