ANSYS基础教程APDL基础.docx
《ANSYS基础教程APDL基础.docx》由会员分享,可在线阅读,更多相关《ANSYS基础教程APDL基础.docx(17页珍藏版)》请在冰豆网上搜索。
![ANSYS基础教程APDL基础.docx](https://file1.bdocx.com/fileroot1/2022-11/23/cc23b2d2-4479-46ad-9566-42a04c9877ad/cc23b2d2-4479-46ad-9566-42a04c9877ad1.gif)
ANSYS基础教程APDL基础
ANSYS基础教程—APDL基础
发表时间:
2011-3-17
关键字:
ANSYSANSYS教程APDL基础
信息化调查找茬投稿收藏评论好文推荐打印社区分享
本文主要介绍APDL基础功能,包括:
定义参数、利用参数、获取数据库信息方面展开。
概述
·APDL是ANSYS参数化设计语言的缩写,它是一种允许使用参数并能完成一系列任务的强大的程序语言。
·使用APDL,可以:
–用参数而不是用数值输入模型尺寸,材料类型等。
–从ANSYS数据库中获取信息,比如节点位置或最大应力。
–在参数中进行数学运算,包括矢量和矩阵运算。
–把常用的命令或宏定义成缩写形式。
–建立一个宏使用if-then-else分支和do循环等来执行一系列任务。
A.定义参数
·用以下格式定义参数
Name=Value
–可以在输入窗口或标量参数对话框中输入(UtilityMenu>Parameters>ScalarParameters...)
–参数名不能超过8个字符。
–值可以是一个数值,一个以前定义过的参数,一个函数,一个参数表达式,或者一个字符串(用单引号括住)。
·例子:
inrad=2.5 g=386
outrad=8.2 massdens=density/g
numholes=4 circumf=2*pi*rad
thick=outrad-inrad area=pi*r**2
e=2.7e6 dist=sqrt((y2-y1)**2+(x2-x1)**2)
density=0.283 slope=(y2-y1)/(x2-x1)
bb=cos(30) theta=atan(slope)
pi=acos(-1) jobname=‘proj1’
用*SET看有用参数列表
·以上例子是关于标量参数的,它只有一个值—数字或者字符。
·ANSYS也提供数组参数,它有若干个值。
数字数组和字符数组都是有效的。
字符数组在本教程中不讨论。
一些命名规则:
·参数名不超过8个字符,并以字母开头。
·参数名中只能出现字母,数字和下划线。
·避免以下划线开头,这在ANSYS中另有它用。
·参数名不分大小写,如“RAD”和“Rad”是一样的。
所有的参数都以大写形式存储。
·避免使用ANSYS标识,如STAT,DEFA,和ALL。
B.使用参数
·使用参数时,只需在对话框中或通过命令输入参数名就行了。
·例如,利用参数定义一个w=10,h=5的矩形,
–您可以使用以下菜单:
Preprocessor>Create>Rectangle>By2Corners+
–或命令:
/prep7
blc4,,,w,h
注意:
·当使用参数时,ANSYS将立刻把参数名换为它的值。
上一个例子中的矩形将被存为10x5,而不是wxh。
也就是说,如果你在生成矩形后再改变w或h的值,矩形将不被修改。
·其它一些关于参数用法的例子:
jobname=‘proj1’
/filnam,jobname !
作业名
/prep7
youngs=30e6
mp,ex,1,youngs !
杨氏模量
force=500
fk,2,fy,-force !
2号关键点的力
fk,6,fx,force/2 !
6号关键点的力
C.从数据库中获取信息
·从数据库中获取信息并给参数赋值,使用*GET命令或UtilityMenu>Parameters>GetScalarData...
·对获取大量信息是很有用的,包括模型和结果数据,请参看*GET命令的详细资料。
·例子:
*get,x1,node,1,loc,x !
x1=节点1的x坐标[CSYS]*
/post1
*get,sx25,node,25,s,x !
sx25=节点25的x方向应力[RSYS]*
*get,uz44,node,44,u,z !
uz44=节点44的UZ方向的位移[RSYS]*
nsort,s,eqv !
对节点的vonMises应力排序
*get,smax,sort,,max !
smax=排序的最大值
etable,vol,volu !
用vol存储单元体积
ssum !
对单元表的列求和
*get,totvol,ssum,,vol !
totvol=对vol的列求和
*CSYS=激活坐标系(CSYS)
RSYS=激活的结果坐标系(RSYS)
·一些数据可以通过函数获取。
例如:
x1=nx
(1) !
x1=节点1的x坐标[CSYS]*
nn=node(2.5,3,0) !
nn=在(2.5,3,0)处的节点[CSYS]*
/post1
ux25=ux(25) !
ux25=25号节点的UX值[RSYS]*
temp93=temp(93) !
temp93=节点93的温度值
width=distnd(23,88) !
width=23号节点和88号节点间的距离
*CSYS=激活坐标系(CSYS)
RSYS=激或的结果坐标系(RSYS)
·在一些地方您可以直接取函数值,就象用一个参数一样。
例如:
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[CSYS]*
APDL基础
1概要:
·利用格式Name=Value定义参数.
·参数值可以是一个数值,一个以前定义过的参数,一个函数,一个参数表达式,或者一个字符串。
·利用*GET命令或函数从ANSYS数据库中获取信息。
·ANSYS存储的是参数的实际值(数字或字符串),而不是参数名。
2.数组参数
·数组参数是能够容纳多个值的参数
·数组参数可以是1-D,2-D,or3-D.
–1-D:
m行x1列
–2-D:
m行xn列
–3-D:
m行xn列xk面
·本章主要讨论怎样定义和使用数组参数.
·主要内容:
A.数组参数的类型
B.怎样定义数组
C.获取数据库信息
D.数组操作
A.数组参数的类型
·有三种数组参数类型:
–数值数组
–表
–字符数组
·数值数组是标准的1-D,2-D,或3-D数值矩阵,如下面的BB
–BB(2,3)=704
–BB(3,1)=1033
–等.
·数据表除了行、列、面可以是实数外与数值数组类似。
–第零行、零列、零面必须填充数字。
–对定义随时间变化的载荷和类似情况非常有用
–例如,表FORCE可以表示力随时间的变化关系,第零行表示时间值。
·FORCE(0.4)=279.9996
·FORCE(6.5)=560.0
·FORCE(8.9)=119.25
·等
·一个字符型数组是1-D,2-D,或3-D的字符串矩阵
–可用来存放文件名,自由度标识等
–每个字符串不超过8个字符。
B.怎样定义数组
定义数组的步骤:
1.指定类型和维数
–UtilityMenu>Parameters>ArrayParameters>Define/Edit>Add
–或使用*DIM命令.例如:
*dim,aa,array,4!
4x1x1array
*dim,force,table,5!
5x1x1table
*dim,bb,array,5,3!
5x3x1array
*dim,dofs,char,6!
6x1x1characterarray
2.给数组赋值
–UtilityMenu>Parameters>ArrayParameters>Define/Edit>Edit
–或使用*VEDIT命令
–或使用“=”命令.例如:
bb(1,1)=11,21,31,41,51
bb(1,2)=12,22,32,42,52
bb(1,3)=13,23,33,43,53
·对于表型数组,必须定义第0位置。
否则,取缺省值7.8886E-31.
–例如:
force(1,1)=0,560,560,238.5,0
force(1,0)=1E-6,0.8,7.2,8.5,9.3
force(0,1)=0
·对字符数组,不能以图形方式填充字符串
–使用“=”命令键入值,接着用*STAT显示字符串
–每个字符串必须用单引号括起来
–例如:
dofs
(1)=‘ux’,‘uy’,‘uz’,‘rotx’,‘roty’,‘rotz’
*stat,dofs
·给数组赋值的其他方法:
–用*VFILL命令或(UtilityMenu>Parameters>ArrayParameters>Fill)预定义函数赋值
·跃阶函数
·随机函数
·等
–从一个文件读入数据:
·*VREAD用于数值数组
·*TREAD用于数据表
·或UtilityMenu>Parameters>ReadfromFile
–从数据库获取(下一步讨论).
C.获取数据库信息
·正如*GET从数据库获取标量数据,可以用*VGET获取数组信息.
–或UtilityMenu>Parameters>GetArrayData
·先定义数组,然后获取数据.
·例如:
*dim,dispval,array,20,3 !
20x3array
*vget,dispval(1,1),node,1,u,x !
UXofnodes1-20incolumn1
*vget,dispval(1,2),node,1,u,y !
UYincolumn2
*vget,dispval(1,3),node,1,u,z !
UZincolumn3
·其他可获取的数组信息类型:
–节点和关键点坐标(当前坐标系)
–单元属性,体,面等.
–实体的选择状态(1选上,0未选上)
–节点应力,应变,温度梯度,热通量等
–单元表数据
–等…
D.数组操作
·一旦定义了数组参数,就可以对它们进行各种操作
–UtilityMenu>Parameters>ArrayOperations
–或使用*VFUN,*VOPER,*VSCFUN,*VWRITE等命令
·*VFUN对单个数组操作
–*vfun,b
(1),sin,a
(1)等价于b(j)=sin(a(j))
–其他操作包括:
·自然对数,常用对数,指数
·平方根,排序,复制
·局部坐标系与整体坐标系的相互转换关系
·路径的切线和法线矢量
·等
·*VOPER对两个数组参数操作。
–*voper,c
(1),a
(1),sub,b
(1)等价于c(k)=a(k)-b(k)
–其它操作包括:
·加,减,乘,除
·最小值,最大值,逻辑运算
·微分,积分
·点积和叉积
·*VSCFUN定义数组参数的属性。
–*vscfun,maxval,max,a
(1)等价于一个标量maxval=max(a(i))
–其它操作包括:
·求数组的所有元素的和
·诸如标准偏差,中值,平均数等统计量
·最小值/最大值,最小值/最大值的位置
·第一个和最后一个非零记录的位置
·*VWRITE把数据按格式写进文件
–例如:
*cfopen,wing,dat
*vwrite
(/,3x,’NodeNumber’,4x,’Temperature’,/)
*vwrite,nnum
(1),tval
(1)
(5x,f6.0,6x,e14.8)
*cfclose
将会创建一个名为wing.dat的文件,包含指定格式的nnum和tval数组
3宏基础
·APDL(ANSYS参数设计语言)最强有力的特征之一是创建宏的能力。
·宏就是一系列贮存在一个文件中的ANSYS命令,并且能象一个ANSYS命令一样来运行。
·常用宏功能:
–它可以如同ANSYS命令一样具有变量。
–分支和循环用来控制一系列命令。
–交互式特征如图形拾取,提示,以及对话框。
–宏可以嵌套――一个宏引用第二个宏,第二个宏引用第三个宏,等等―一直可嵌套20级。
宏基础
·本文给出创建宏的基本步骤:
A.创建一个宏
B.带参数的宏
C.分支
D.循环
E.总的指导方针
·更多的细节,请参考APDL程序指南等
A.创建宏
·创建一个宏,在文本编辑器中,创建一系列命令,并以文件名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来计算整个体积。
·搜索路径:
·-ANSYS首先在下列搜索路径中寻找文件name.mac并运行它:
1./ansys57/docu
2.在ANSYS_MACROLIB环境变量路径中。
3.在WINDOWS系统中的注册路径。
4.当前工作路径。
·-如果在上级路径和下级路径同时寻找到同样的文件名,则采用上级路径。
B.带参数的宏
·通过特殊的字符名,你可以创建多达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
(‘Totalvolumefortype’,f4.0,’elements=’,f8.2)
·求解之后在通用后处理器中发出totvolume,1将得出下列结果:
·注意:
–-特殊的字符名ARG1-ARG9和AR10-AR99仅仅是局部参数,仅仅在该宏中有效。
·一旦宏运行结束后并返回ANSYS主程序,它们将无意义。
·避免在模型的其它地方应用这些名称。
–-无论何时应用参数时,一定通过在宏中包含注释来描述它们的意义。
例如,下面在宏totvolume.mac的开始处的注释是非常有用的。
!
MacroTOTVOLUME.MACtocalculatetotalvolumeofelements
!
Usage:
TOTVOLUME,TYPE.validonlyinPOST1afterasolve
!
TYPE=validelementtypenumber
esel,stype,,arg1
…
…
C.分支
·通过应用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
·例如,你可以在宏totvolume.mac中增加if-test来测试输入的变量是的有效性:
*if,arg1,lt,1,then!
如果ARG1小于1
*msg,warn!
发出一个警告
Elementtypenumbermustbe1orgreater!
退出宏
/eof
esel,s,type,,arg1!
选择所有确定类型的单元
etable,volume,volu!
建立单元表
ssum!
求解单元表数据总和
…
·发出totvolume,-1将得出下列结果:
D.循环
·DO循环允许执行一个命令块数次。
·实际上在DO循环中对其中包含什么内容没有限制。
你可以包含任何ANSYS命令――包括前处理,求解和处理――这是在条件允许的情况下。
·*DO开始循环,*ENDDO结束循环。
-你可以用*EXIT(退出循环)和*CYCLE(跳到DO循环末)控制循环。
-EXITT和CYCLE也可以根据if-test的结果来执行。
·作为一个例子,我们通过加入DO循环来扩展宏totvolume.mac,计算所有单元类型并将它们各的体积保存在数组参数中。
!
--MacroTOTVOLUME.MACtocalculatetotalelementvolume.
!
--Usage:
IssueTOTVOLUMEinPOST1afterasolution.
!
--Result:
!
--a)evolume(i)=totalvolumeforelementtypei
!
--b)totvol=grandtotalvolume
!
*get,numtypes,etype,,num,count!
Getnumberofelementtypes
*dim,evolume,array,numtypes!
Openanumtypesx1array
*do,i,1,numtypes!
Fori=1-numtypes...
esel,s,type,,i!
Selectelementsoftypei
etable,volume,volu!
Storevolumeinelementtable
ssum!
Sumelementtableitems
*get,totvol,ssum,,item,volume!
totvol=sumof‘volume’
evolume(i)=totvol!
Storetotvolinevolume(i)
*enddo!
Endofdo-loop
*vscfun,totvol,sum,evolume(i)!
totvol=grandtotalvolume
esel,all!
Activatefullsetofelements
E.一般注意事项
·建立短小且简单的宏。
·当创建宏的时候,可以在ANSYS命令窗口中剪切并粘贴命令来检测这些命令的顺序是否正确。
·运用注释来描述意图或期望的执行结果。
·在自己的目录中保存你自己的宏。
·在ANSYS_MACROLIB环境变量目录中保存那些任何人都可以进入的宏。