ansys编程语言.docx

上传人:b****4 文档编号:4197149 上传时间:2022-11-28 格式:DOCX 页数:44 大小:207.77KB
下载 相关 举报
ansys编程语言.docx_第1页
第1页 / 共44页
ansys编程语言.docx_第2页
第2页 / 共44页
ansys编程语言.docx_第3页
第3页 / 共44页
ansys编程语言.docx_第4页
第4页 / 共44页
ansys编程语言.docx_第5页
第5页 / 共44页
点击查看更多>>
下载资源
资源描述

ansys编程语言.docx

《ansys编程语言.docx》由会员分享,可在线阅读,更多相关《ansys编程语言.docx(44页珍藏版)》请在冰豆网上搜索。

ansys编程语言.docx

ansys编程语言

3.11.7写数据文件

可以通过*VWRITE命令把数组中的数据写到格式化(表格式)的数据文件中。

该命令最多可带有10个数组向量作为参数,并把这些向量中包含的数据写入当前打开的文件(*CFOPEN命令)中。

每个向量的格式由*VWRITE命令后紧接的FORTRAN77数据描述符确定(因此不能从ANSYS输入窗口执行该命令)。

数组向量要指定起始元素位置(如MYARRAY(1,2,1))。

可以用表达式来计算数据文件中每一行的位置。

关键词SEQU将从1开始写一个连续的整数列。

数据文件中每一行的格式由数据描述符决定。

命令的每一个参数都要带有一个描述符。

在描述符行不要有FORMAT这个词。

可以使用实数格式或字符格式描述符,不能使用整形或直接列表描述符。

3.11.7.1数据格式描述符

若对FORTRAN的数据描述符不熟悉,本部分将从头说明如何格式化数据文件。

要获得更多的信息,请参阅FORTRAN77编译器文件。

一定要给*VWRITE命令所带参数中的每一个数据项提供一个数据描述符。

通常地,对任何数字值都可以采用F描述符(浮点数)。

F描述符的语法为:

Fw.d

其中,w指数据宽度,d指小数点右边的阿拉伯数字的个数。

因此,对于一个共有10个阿拉伯数字且小数点后有8个阿拉伯数字的数据,将采用如下描述符:

F10.8

对于字符数据,可以采用A描述符。

A描述符的语法为:

Aw

其中,w指数据宽度。

因此,因此,对于一个共有8个字符的字符数据,将采用如下描述符:

A8

下面的例子说明如何使用*VWRITE命令和数据描述符:

给定数组MYDATA为

下面的宏首先定义一个标量参数X为25,然后打开文件vector(*CFOPEN命令)。

然后使用*VWRITE命令定义将要写入文件中的数据,写入的第一个向量采用SEQU关键词来提供行数。

注意,在某些情况下,常数、标量参数和包含数组元素值的操作也可以写入文件中。

x=25

*cfopen,vector

*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>Parameters>ArrayOperations>VectorFunctions

对两个输入数组向量执行某函数,输出一个数组向量。

*VSCFUN或UtilityMenu>Parameters>ArrayOperations>Vector-ScalarFunc

确定单个输入数组矢量属性,并将结果存放到指定的标量参数中。

*VITRP或UtilityMenu>Parameters>ArrayOperations>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>Parameters>ArrayOperations>MatrixOperations

对两个输入数组参数矩阵进行矩阵运算,输出一个数组参数矩阵。

矩阵运算包括:

●矩阵相乘;

●求解联立方程组;

●对矩阵中的某个指定向量排序(按上升顺序);

●计算两个向量之间的协方差;

●计算两个向量之间的相关性;

*MFUN或UtilityMenu>Parameters>ArrayOperations>MatrixFunctions

拷贝或转置一个数组参数矩阵(接受一个输入矩阵,生成一个输出矩阵)。

*MFOURI或UtilityMenu>Parameters>ArrayOperations>MatrixFourier

计算傅立叶级数的系数或求傅立叶级数。

下面的例子用来说明这些命令的用法。

查阅ANSYS命令参考手册(ANSYSCommandsReference)可以得到关于这些命令的语法。

这个例子说明了*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>Parameters>ArrayOperations>OperationSettings得到。

注意-每次执行向量或矩阵运算之后,所有规定命令都将重置为缺省设置。

下面列出有效的数组规定命令:

*VCUM

指定结果累积或不累积(覆盖已有结果)。

ParR为向量运算的结果,要么被加入一个已存在的同名参数中,要么被覆盖。

缺省为不累积结果,即ParR覆盖掉已存在的同名参数。

*VABS

使向量运算中的某个或所有参数取绝对值。

缺省为实数值。

*VFACT

对向量运算中的某个或所有参数乘以一个比例因子。

比例因子缺省为1.0。

*VCOL

指定矩阵运算中列的数目。

缺省为从指定起始处填满结果数组的所有位置。

*VSTAT

列出数组参数的当前状态。

*VLEN或UtilityMenu>Parameters>ArrayOperations>OperationSettings

指定数组参数运算中被用到的行的数目。

*VMASK或UtilityMenu>Parameters>ArrayOperations>OperationSettings

指定某个数组作为屏蔽向量。

下表列出了各类规定命令及其影响到的向量和矩阵运算命令:

*VABS

*VFACT

*VCUM

*VCOL

*VLENNROW,NINC

*VMASK

*MFOURI

No

No

No

N/A

No

No

No

*MFUN

Yes

Yes

Yes

No

Yes

No

Yes

*MOPER

Yes

Yes

Yes

No

Yes

No

Yes

*VFILL

Yes

Yes

Yes

N/A

Yes

Yes

Yes

*VFUN

Yes

Yes

Yes

N/A

Yes

Yes

Yes

*VGET

Yes

Yes

Yes

N/A

Yes

Yes

Yes

*VITRP

Yes

Yes

Yes

N/A

Yes

Yes

Yes

*VOPER

Yes

Yes

Yes

N/A

Yes

Yes

Yes

*VPLOT

No

No

N/A

N/A

Yes

Yes

Yes

*VPUT

Yes

Yes

No

N/A

Yes

Yes

Yes

*VREAD

Yes

Yes

Yes

N/A

Yes

Yes

Yes

*VSCFUN

Yes

Yes

Yes

N/A

Yes

Yes

Yes

*VWRITE

No

No

N/A

N/A

Yes

Yes

Yes

下面的例子说明了一些规定命令的用法。

查阅ANSYS命令参考手册(ANSYSCommandsReference)可以得到关于这些命令的语法。

例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)

*vfun,numdata

(1),copy,numdata

(1)

或者更简单地执行如下命令:

numdp=2

*vfact,10**numdp

*vfun,numdata

(1),copy,numdata

(1)

*vfact,10**(-numdp)

*vfun,numdata

(1),nint,numdata

(1)

那么,作为结果的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)中有详细说明;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1