ansys编程语言Word文档下载推荐.docx
《ansys编程语言Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《ansys编程语言Word文档下载推荐.docx(44页珍藏版)》请在冰豆网上搜索。
*vwrite,SEQU,mydata(1,1,1),mydata(1,2,1),mydata(1,3,1),10.2,x,mydata(1,1,1)+3
(F3.0,'
'
F8.4,'
F8.1,'
F8.6,'
F4.1,'
F4.0,'
F8.1)
*cfclos
该宏将生成如下的数据文件:
1.2.15223.95.28637010.225.5.2
2.2.30494.05.40919610.225.5.2
3.2.01053.45.93663810.225.5.2
4.2.36833.35.63220310.225.5.2
5.2.84914.85.97802410.225.5.2
6.2.22803.55.54685110.225.5.2
下面的例子使用如下定义的数组
注意接下来的*VWRITE命令中数据描述符的用法:
*vwrite,SEQU,mydata(1,1),mydata(1,2),(mydata1(1,1)+mydata1(1,2))
('
Row'
F3.0,'
contains'
2F7.3,'
.Istheirsum'
F7.3,'
?
'
)
结果数据文件为:
Row1.contains10.00050.000.Istheirsum60.000?
Row2.contains20.00060.000.Istheirsum60.000?
Row3.contains30.00070.000.Istheirsum60.000?
3.11.8对数组参数的运算
同参数表达式和函数允许对标量参数进行运算一样,也有一系列的命令可以对数组参数进行运算。
这种运算可分为以下几类:
对列(向量)的运算,矢量运算和完整矩阵(数组)的运算,矩阵运算。
所有的运算都受到一套ANSYS规定命令的影响,这一部分详见3.11.8.3。
3.11.8.1对向量的运算
对向量的运算就是按某种顺序对数组元素进行一系列的诸如加、减、求正弦、求余弦、点积、叉乘等运算。
虽然可以通过采用Do循环(见4.5.5部分)来达到这一目的,但是更为简便快捷的方法是采用向量操作命令-*VOPER,*VFUN,*VSCFUN,*VITRP,*VFILL,*VREAD,和*VGET。
在这些命令中,只有*VREAD和*VWRITE对字符数组参数有效,其余的只能用于ARRAY类型或TABLE类型(由*DIM定义)的数组参数。
*VFILL,*VREAD,*VGET,*VWRITE,和*DIM命令在本章中已经介绍过了,本部分要讨论的其它命令包括:
*VOPER或UtilityMenu>
Parameters>
ArrayOperations>
VectorOperations
对两个输入数组向量进行运算,输出一个数组向量。
*VFUN或UtilityMenu>
VectorFunctions
对两个输入数组向量执行某函数,输出一个数组向量。
*VSCFUN或UtilityMenu>
Vector-ScalarFunc
确定单个输入数组矢量属性,并将结果存放到指定的标量参数中。
*VITRP或UtilityMenu>
VectorInterpolate
通过在指定的表下标位置插入一个数组参数(TABLE类型)来生成一个数组参数(ARRAY类型)。
下面的例子说明了这些命令的用法。
查阅ANSYS命令参考手册(ANSYSCommandsReference)可以得到关于这些命令的语法。
在下面的例子中,数组参数(ARRAY类型)X,Y,和THET定义为:
首先定义结果数组为Z1。
然后,*VOPER命令把X的第2列和Y的第1列相加,二者都从第一行开始,然后把结果赋给Z1。
注意,对所有的数组参数都要指定起始位置(行和列的下标数)。
*DIM,Z1,ARRAY,4
*VOPER,Z1
(1),X(1,2),ADD,Y(1,1)
在下一个例子中,同样首先定义结果数组为Z2。
然后,*VOPER命令把X的第1列(从行2开始)和Y的第1列(从行1开始)相乘,然后把结果赋给Z2(从行1开始)。
*DIM,Z2,ARRAY,3
*VOPER,Z2
(1),X(2,1),MULT,Y(1,4)
在这个例子中,同样首先定义结果数组为Z4。
然后,*VOPER命令计算四对向量的点积,一对为X和Y的1行。
这些矢量的i,j,和k分量依次是X的列1,2,和3以及Y的列2,3,和4。
结果将写进Z4,它的i,j和k分量分别是矢量1,2,和3。
*DIM,Z4,ARRAY,4,3
*VOPER,Z4(1,1),X(1,1),CROSS,Y(1,2)
在下一个例子中,同样首先定义结果数组为A3。
然后,*VFUN命令把X的第2列中的每个元素平方后赋给A3。
*DIM,A3,ARRAY,4
*VFUN,A3
(1),PWR,X(1,2),2
在下一个例子中,同样首先定义结果数组为A4。
然后,两个*VFUN命令分别计算THETA中的数组元素的余弦和正弦值,并分别赋给A4中的第一和第二列。
注意,现在的A4表示一个由7个点(其x,y,z的全局坐标就是那三个向量)描述的90度的圆弧。
该圆弧半径为1.0,并在z=2.0且与x-y平行的平面上。
*DIM,A4,ARRAY,7,3
*AFUN,DEG
*VFUN,A4(1,1),COS,THETA
(1)
*VFUN,A4(1,2),SIN,THETA
(1)
A4(1,3)=2,2,2,2,2,2,2
在下一个例子中,同样首先定义结果数组为A5。
然后,*VFUN命令计算A4所表示的曲线在每个点处的切线向量,并进行归一化处理后赋给A5。
*DIM,A5,ARRAY,7,3
*VFUN,A5(1,1),TANG,A4(1,1)
两个附加的*VOPER运算-积聚(GATH)和分散(SCAT)-可用于根据在一个“位置”向量中包含的位置号从一个向量中拷贝值到另一个向量。
下面的例子说明了积聚运算。
注意,结果数组总是预先定义。
在这个例子中,积聚运算拷贝B1的值到B3(通过在B2中指定的下标位置)。
注意,B3中的最后一个元素为0,是其初始化值。
*DIM,B1,,4
*DIM,B2,,3
*DIM,B3,,4
B1
(1)=10,20,30,40
B2
(1)=2,4,1
*VOPER,B3
(1),B1
(1),GATH,B2
(1)
3.11.8.2矩阵运算
矩阵运算是一种数字数组参数之间的数学运算,例如矩阵乘法、计算转置矩阵、求解联立方程组等。
本部分将要讨论的命令包括:
*MOPER或UtilityMenu>
MatrixOperations
对两个输入数组参数矩阵进行矩阵运算,输出一个数组参数矩阵。
矩阵运算包括:
●矩阵相乘;
●求解联立方程组;
●对矩阵中的某个指定向量排序(按上升顺序);
●计算两个向量之间的协方差;
●计算两个向量之间的相关性;
*MFUN或UtilityMenu>
MatrixFunctions
拷贝或转置一个数组参数矩阵(接受一个输入矩阵,生成一个输出矩阵)。
*MFOURI或UtilityMenu>
MatrixFourier
计算傅立叶级数的系数或求傅立叶级数。
下面的例子用来说明这些命令的用法。
这个例子说明了*MOPER命令的排序功能。
假定数组(SORTDATA)被定义如下:
首先,定义数组OLDORDER,*MOPER命令将把行的初始顺序放在OLDORDER中。
然后,*MOPER命令对SORTDATA中的行进行排序,这样1,1向量就按升序排列了。
*dim,oldorder,,5
*moper,oldorder
(1),sortdata(1,1),sort,sortdata(1,1)
得到的结果数组为:
若要恢复SORTDATA数组为初始顺序,那么就要执行下面的命令:
*moper,oldorder
(1),sortdata(1,1),sort,oldorder(1,1)
在下面的例子中,*MOPER命令用来求解联立方程组。
两个数组定义如下:
*MOPER命令可以用于求解联立方程组组成的方阵,方程组采用如下形式:
*MOPER命令求解的联立方程组为:
要求解以上方程组,首先定义结果数组C。
然后,用*MOPER命令求解方程组,用A作为系数矩阵,B作为b值组成的向量。
*DIM,C,,4
*MOPER,C
(1),A(1,1),SOLV,B
(1)
C数组中的结果为:
接下来的例子说明如何使用*MFUN命令来转置数组中的数据。
在这个例子中,假定数组DATA预先定义为:
同样地,首先定义结果数组DATATRAN。
然后,用*MFUN命令转置数据并把结果写入DATATRAN数组。
*DIM,DATATRAN,,2,3
*MFUN,DATATRAN(1,1),TRAN,DATA(1,1)
DATATRAN数组中的结果为:
3.11.8.3用于向量和矩阵运算的命令
所有向量和矩阵运算命令都受到下面这些命令的影响:
*VCUM,*VABS,*VFACT,*VLEN,*VCOL,和*VMASK.(在所有命令中,只有*VLEN和*VMASK,与*VREAD或*VWRITE连用时,对字符数组参数有效)。
可以通过*VSTAT命令来查看这些命令的状态。
这些命令中的绝大多数(及其相应的GUI路径)在本章中已经介绍过了,接下来将介绍剩下的命令。
除*VSTAT命令之外,下面将要介绍的其它所有的命令都可以通过菜单UtilityMenu>
OperationSettings得到。
注意-每次执行向量或矩阵运算之后,所有规定命令都将重置为缺省设置。
下面列出有效的数组规定命令:
*VCUM
指定结果累积或不累积(覆盖已有结果)。
ParR为向量运算的结果,要么被加入一个已存在的同名参数中,要么被覆盖。
缺省为不累积结果,即ParR覆盖掉已存在的同名参数。
*VABS
使向量运算中的某个或所有参数取绝对值。
缺省为实数值。
*VFACT
对向量运算中的某个或所有参数乘以一个比例因子。
比例因子缺省为1.0。
*VCOL
指定矩阵运算中列的数目。
缺省为从指定起始处填满结果数组的所有位置。
*VSTAT
列出数组参数的当前状态。
*VLEN或UtilityMenu>
OperationSettings
指定数组参数运算中被用到的行的数目。
*VMASK或UtilityMenu>
指定某个数组作为屏蔽向量。
下表列出了各类规定命令及其影响到的向量和矩阵运算命令:
*VABS
*VFACT
*VCUM
*VCOL
*VLENNROW,NINC
*VMASK
*MFOURI
No
N/A
*MFUN
Yes
*MOPER
*VFILL
*VFUN
*VGET
*VITRP
*VOPER
*VPLOT
*VPUT
*VREAD
*VSCFUN
*VWRITE
下面的例子说明了一些规定命令的用法。
例1定义结果数组CMPR。
然后与*VMASK和*VLEN命令连用的两个*VFUN命令压缩选择的数据并把结果写入CMPR中的指定位置。
在*VFUN命令中,COMP运算的反运算为EXPA。
*DIM,CMPR,ARRAY,4,4
*VLEN,4,2!
每四行执行下一个*V----运算,每次跳过一行
*VFUN,CMPR(1,2),COMP,Y(1,1)
*VMASK,X(1,3)!
使用X的列3作为下一个*V----运算的屏蔽矢量。
*VFUN,CMPR(1,3),COMP,Y(1,2)
例2用*VFACT命令把数组向量中的值根据NUMDP标量参数(本例中设为2)指定的值按比例增大或缩小。
NUMDATA数组定义如下:
numdp=2
*vfact,10**numdp
*vfun,numdata
(1),copy,numdata
(1)
*vfun,numdata
(1),nint,numdata
(1)
*vfact,10**(-numdp)
或者更简单地执行如下命令:
那么,作为结果的NUMDATA数组为
例3通过*VLEN和*VMASK命令找到小于100的素数的数目。
生成数组MASKVECT时,用1.0表示该行值是素数,用0.0表示该行值不是素数。
生成屏蔽向量的算法为:
把所有值大于1的行初始化为1.0,然后通过成倍增加因数在可能的因数范围内进行循环。
*VLEN命令设置运算的行增量为FACTOR,执行*VFILL命令时,行号根据该值增加。
因为起始行是FACTORx2,所以每次循环中行的变化为:
FACTORx2,FACTORx3,FACTORx4等等。
*dim,maskvect,,100
*vfill,maskvect
(2),ramp,1
*do,factor,2,10,1
*vlen,,factor
*vfill,maskvect(factor*2),ramp,0
*enddo
*vmask,maskvect
(1)
*dim,numbers,,100
*vfill,numbers
(1),ramp,1,1
*status,numbers
(1),1,10
输出结果可以由*STATUS命令显示出来,NUMBERS中的前10个元素为:
PARAMETERSTATUS-NUMBERS(5PARAMETERSDEFINED)
(INCLUDING2INTERNALPARAMETERS)
LOCATIONVALUE
1110.000000000E+00
2112.00000000
3113.00000000
4110.000000000E+00
5115.00000000
6110.000000000E+00
7117.00000000
8110.000000000E+00
9110.000000000E+00
10110.000000000E+00
3.11.9用图形表示数组参数向量
可以通过*VPLOT命令用图形来显示数组向量的值。
接下来用例子说明*VPLOT命令的一些功能。
在本例中,有两个TABLE类型数组(TABLEVAL和TABLE2)和一个数字数组,分别定义如下:
注意,既然ARRAY类型数组的数据是无序的,那么就用柱状图表示;
TABLE类型数组的数据是有序的,就用曲线表示。
绘图通过下面的命令得到:
*vplot,,arrayval(1,1),2
图3-7图例
*vplot,,tableval(1,1),2
图3-8图例
*vplot,table2
(1),tableval(1,1),2
图3-9图例
*vplot,tableval(1,0),tableval(1,1),2
图3-10图例
第四章作为宏语言的APDL
4.1什么是APDL宏
可以在一个宏文件(有时候也被称为命令文件)中记录一个经常用到的ANSYS命令序列。
通过宏可以生成自定义的ANSYS命令。
例如,在磁分析中计算由于涡流引起的功率损失时,需要在后处理中执行一系列的ANSYS命令。
通过把这些命令记录到一个宏中,那么就有了一个新的命令,通过执行它可以完成该计算所需的那一系列的ANSYS命令。
除了执行一系列的ANSYS命令之外,宏还可以调用GUI函数或把值传递给参数。
还可以对宏进行嵌套。
也就是说,一个宏能调用第二个宏,第二个宏能调用第三个宏,等等。
最多可嵌套20层,其中包括由ANSYS/INPUT命令引起的任何文件转换。
每一次嵌套的宏执行完毕后,ANSYS程序仍置于前一个宏的控制之下。
下面是一个简单的宏文件的例子。
在本例中,宏生成一个尺寸为4,3,2的长方形块和一个半径为1的球体。
然后,从块的一个角处减去球体。
/prep7
/view,,-1,-2,-3
block,,4,,3,,2
sphere,1
vsbv,1,2
finish
假如这个宏取名为mymacro.mac,那么就可以用这样一个ANSYS命令来执行以上的命令序列:
*use,mymacro或(因为扩展名为.mac)mymacro。
很显然,这个宏的功能并不十分强大,但它很好地说明了宏的原理。
本章提供了一些关于产生、保存和执行宏的知识。
同时论述了在产生宏的过程中,必须用到的作为解释性语言的APDL的有关基本知识。
4.2产生宏
可以在ANSYS中产生宏,也可以通过文本编辑器(如emacs,vi,或wordpad)产生宏。
假如要生成的宏很简单,那么在ANSYS中生成就非常方便了。
假如要生成一个长的复杂的宏,或者要编辑一个已经存在的宏,那么最好使用文本编辑器。
而且,可以使用文本编辑器利用一个已经存在的类似的宏或ANSYS日志文件来生成自己的宏。
如果生成的宏既长且复杂,那么最好从一个已经存在的类似的宏着手,或者先通过交互模式完成该任务,再以生成的日志文件作为基础生成宏。
这两种方法都可以大大地缩短所需耗费的时间和精力。
4.2.1宏文件命名规则
宏就是保存在一个文件中的ANSYS命令序列。
宏不能与已经存在的ANSYS命令同名,否则,ANSYS执行的将是内部的命令,而不是宏。
下面是宏命名中所受到的限制:
●文件名不能超过32个字符;
●文件名不能以数字开头;
●文件扩展名不能超过8个字符(如果想和执行ANSYS命令一样执行宏,该宏的扩展名应为.mac);
●文件名或文件扩展名中不能包含空格;
●文件名或文件扩展名不能包含任何被当前文件系统禁止使用的字符,为了更好的移置性,还不能包含任何被UNIX或Windows文件系统禁止使用的字符。
为了确保没有使用ANSYS命令名,在生成宏之前应该试着象运行ANSYS命令一样运行准备赋给宏的名称。
如果ANSYS返回如下所示的消息,就可以确信在当前处理器中没有该命令。
为“安全”起见,应该在每一个计划要用到的处理器中都检查一下宏文件的名称。
(也可以检查宏文件名是否与在线文档中的某个命令名相同,但是该方法不能查找不在文档中的命令)
图4-1声明执行未知命令的消息框
若使用.mac作为扩展名,ANSYS将和执行内部命令一样执行该宏。
扩展名.MAC用于ANSYS内部的宏,用户不能使用。
4.2.2宏的搜索路径
一般地,ANSYS按如下缺省路径搜索用户生成的宏(.mac扩展名):
1.由环境变量ANSYS_MACROLIB(如果已经定义了)指定的路径或注册路径(主目录)。
该环境变量在针对各平台的ANSYS安装和配置指南(ANSYSinstallationandconfigurationguide)中有详细说明;