ansys-APDL编程 - 图文 下载本文

因此,对于一个共有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.1522 3.9 5.286370 10.2 25. 5.2 2. 2.3049 4.0 5.409196 10.2 25. 5.2 3. 2.0105 3.4 5.936638 10.2 25. 5.2 4. 2.3683 3.3 5.632203 10.2 25. 5.2 5. 2.8491 4.8 5.978024 10.2 25. 5.2 6. 2.2280 3.5 5.546851 10.2 25. 5.2 下面的例子使用如下定义的数组

注意接下来的*VWRITE命令中数据描述符的用法:

*vwrite,SEQU,mydata(1,1),mydata(1,2),(mydata1(1,1)+mydata1(1,2)) (' Row',F3.0,' contains ',2F7.3,'. Is their sum ',F7.3,' ?') 结果数据文件为:

Row 1. contains 10.000 50.000. Is their sum 60.000 ? Row 2. contains 20.000 60.000. Is their sum 60.000 ? Row 3. contains 30.000 70.000. Is their sum 60.000 ?

第 30 页

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 或 Utility Menu>Parameters>Array Operations>Vector Operations

对两个输入数组向量进行运算,输出一个数组向量。

*VFUN 或 Utility Menu>Parameters>Array Operations>Vector Functions

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

*VSCFUN 或 Utility Menu>Parameters>Array Operations>Vector-Scalar Func

确定单个输入数组矢量属性,并将结果存放到指定的标量参数中。 *VITRP或 Utility Menu>Parameters>Array Operations>Vector Interpolate

通过在指定的表下标位置插入一个数组参数(TABLE类型)来生成一个数组参数(ARRAY类型)。

下面的例子说明了这些命令的用法。查阅ANSYS 命令参考手册(ANSYS Commands Reference)可以得到关于这些命令的语法。在下面的例子中,数组参数(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)

第 31 页

在下一个例子中,同样首先定义结果数组为 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所表示的

第 32 页

曲线在每个点处的切线向量,并进行归一化处理后赋给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 或 Utility Menu>Parameters>Array Operations>Matrix Operations

对两个输入数组参数矩阵进行矩阵运算,输出一个数组参数矩阵。矩阵运算包括: ? 矩阵相乘;

? 求解联立方程组;

? 对矩阵中的某个指定向量排序(按上升顺序); ? 计算两个向量之间的协方差; ? 计算两个向量之间的相关性;

*MFUN 或 Utility Menu>Parameters>Array Operations>Matrix Functions

拷贝或转置一个数组参数矩阵(接受一个输入矩阵,生成一个输出矩阵)。 *MFOURI 或 Utility Menu>Parameters>Array Operations>Matrix Fourier

计算傅立叶级数的系数或求傅立叶级数。 下面的例子用来说明这些命令的用法。查阅ANSYS 命令参考手册(ANSYS Commands Reference)可以得到关于这些命令的语法。

这个例子说明了*MOPER命令的排序功能。假定数组(SORTDATA)被定义如下:

第 33 页