第 4 章
数组参数及其用法
4.1 数组参数类型与概念
前面讲述了变量参数,它只能存储一个参数值,而数组参数是按多个行、列与面的结构 存储多个参数值,包含多个元素。ANSYS 的数组按照维数可以分为以下 3 类: (1)一维数组:只有一列数据,相当于一个列矢量,可以直接用于矢量运算。 (2)二维数组:二维阵列数据结构,由行与列组成,每一列相当于一个矢量,即二维数 组可以看成由多个一维数组即列矢量构成。 (3)三维数组:三维阵列数据结构,由行、列和面组成,每个面相当于一个二维数组。 如图 41 所示是二维数组概念的图示,它有 m 行长和 n 列宽,即是一个维数为 m×n 的二 维数组。每行由行下标 i 确定,i 从 1 到 m 之间变化。每列由列下标 j 确定,j 从 1 到 n 之间变 化。对于确定的行与列下标就可以确定一个数组元素,其下标的通用形式是(i,j)。 图 41 二维数组概念的图示 如图 42 所示是三维数组概念的图示,它有 m 行长、n 列宽和 3 个面,即是一个维数为 m×n×3 的三维数组。可以这样理解,图 42 所示的三维数组是由 3 个图 41 所示的二维数组扩4
展而成的。推广之后的三维数组概念可以表达为,三维数组有 m 行长、n 列宽和 p 个面,面 的下标为 k,变化范围从 1 到 p。每个三维数组元素由下标(i,j,k)确定。 图 42 三维数组概念的图示 ANSYS 允许定义 3 种数组类型,如下: (1)ARRAY 数值型数组。 ARRAY 数值型数组是默认的数组类型,用于存储整型或实型数据,行、列和面的下标是 从 1 开始的连续整数。 (2)CHAR 字符型数组。 CHAR 字符型数组用于存储字符串的数组,行、列和面的下标是从 1 开始的连续整数。 (3)TABLE 表。 TABLE 表用于存储整数或实数,是一种特殊的数值型数组,可以实现在数组元素之间的 线性插值算法。可以给每一行、列和面定义数组下标,并且下标为实数(而不是连续的整数), 可以根据下标实现数据插值算法。 另外,还有 STRING 字符串数组,即利用*DIM,,STRING 可以将字符串输入到数组中,其 列和面的下标从 1 开始,行号由字符在字符串中的位置确定。 注意 这 3 种类型的数组都不能超过(2 31 -1)/8 字节长度。对于双精度数组而言,每 个数据项不能超过 8 个字节长度,所以数值大小不能超过(2 31 -1)/8。
4.2 定义数组参数
定 义数 组参 数有 两种 途径 ,即 利用 *DIM 命令 定义 ,或 者利 用菜 单 Utility Menu> Parameters>Array Parameters>Define/Edit 以交互方式进行定义。 定义数组之后, 如果是 ARRAY 和 TABLE 类型的数组元素将被初始化为 0(除 TABLE 类型的 0 行和 0 列之外,它们被初始 化为“极小值” ),如果是 CHAR 类型的数组元素则被初始化为一个空值。
利用*DIM 命令定义数组的格式如下:
其中,Par 是数组名;Type 是数组类型,标识字有 ARRAY(默认) 、CHAR、TABLE 和 STRING;IMAX、JMAX、KMAX 分别是数组下标(I、J、K)的最大值;Var1、Var2、Var3 是 Type = TABLE 时对应行、列和面的变量名。 利用*DIM 命令定义数组实例如下: *DIM,A,,4 !定义一维 ARRAY 数组,维数为 4[×1×1] *DIM,B,Array,12,12 !定义二维 ARRAY 数组,维数为 12×12[×1] *DIM,C,,4,3,3 !定义三维 ARRAY 数组,维数为 4×3×3 *DIM,Force,TABLE,5 !定义 Table 表,维数为 5[×1×1] *DIM,Str_Name,CHAR,5 !定义 CHAR 字符数组,维数为 5[×1×1] 利 用 菜 单 交 互 方 式 进 行 数 组 定 义 , 选 择 菜 单 路 径 Utility Menu>Parameters>Array Parameters>Define/Edit 弹出如图 43 所示的定义数组参数对话框, 单击 Add 按钮接着弹出如图 44 所示的增加新数组参数对话框, 参照*DIM 命令定义数组的格式说明进行新数组参数定义, 最后单击 OK/Apply 按钮确认定义数组。 图 43 定义数组参数对话框 图 44 增加新数组参数对话框
4.3 赋值数组参数
给数组元素赋值有以下几种基本方法: (1)利用*SET 命令或“=”给单个或多个数组元素赋值,与 Scalar 变量相同。 (2)利用*VEDIT 命令或按其等价菜单方式编辑数组。 (3)利用*VFILL 命令或者其等价菜单方式填充数组向量。 (4)利用*VREAD 命令用数据文件赋值 ARRAY 数组(具体参见 6.2 节介绍)。 (5)利用*TREAD 命令用数据文件赋值 TABLE 表(具体参见 6.3 节介绍)。 4.3.1 利用*SET 命令或“=”给单个或多个数组元素赋值 利用*SET 命令或“=”可以同时给单个或多个数组元素赋值,赋 值对象为第一个数组元素名,赋值数据是一个列矢量,赋值结果是按 列下标递增顺序从第一个赋值数组元素依次赋值。注意,一次最多只 能给 10 个连续的数组元素赋值, 当只给一个元素赋值时与变量赋值完 全一致。 实例 1: 如图 45 所示, 首先定义一维数组为 12×1 的数组参数 A, 然后利用“=”进行赋值,命令如下: *DIM,A,,12,1,1 A(1)=1,2,3,4,5,6,7,8,9,10 A(11)=11,12 实例 1 说明:第一次赋值是从第 1 个元素开始连续给前 10 个元 素赋值,并且一次最多赋值 10 个元素;第二次赋值是从第 11 个元素开始连续给最后 2 个元 素赋值。 实例 2:如图 46 所示,首先定义二维数组为 4×3 的数组参数 B,然后利用“=”进行赋值,命令如下: *DIM,B,,4,3,1 B(1,1)=11,21,31,41 !定义第一列的 4 个元素 B(1,2)= 12,22,32,42 !定义第二列的 4 个元素 B(1,3)= 13,23,33,43 !定义第三列的 4 个元素 实例 2 说明:对于二维数组,赋值顺序是首先按列进行赋值, 在一列中则是遵循一维数组赋值规律。由此,还可以推广到三维数组,首先按面定义元素,并 遵循二维数组赋值规律。 实例 3:如图 47 所示,首先定义一维数组为 4×1 的字符型数 组参数 C,然后利用“=”进行赋值,命令如下: *DIM,C,CHAR,4,1,1 C(1)= 'Case1','Case2','Case3','Case4' !* 按列顺序赋值 实例 3 说明:字符型数组赋值基本与数值型数组参数赋值方 法一致。 1 2 3 4 5 6 A 7 8 9 10 11 12 é ù ê ú ê ú ê ú ê ú ê ú ê ú ê ú ê ú = ê ú ê ú ê ú ê ú ê ú ê ú ê ú ê ú ê ú ë û 图 45 数组 A(12,1,1) 11 12 13 21 22 23 B 31 32 33 41 42 43 é ù ê ú ê ú = ê ú ê ú ë û 图 46 数组 B(4,3,1) Case1 Case2 C Case3 Case4 é ù ê ú ê ú = ê ú ê ú ë û 图 47 字符型数组 C(4,1,1)4.3.2 利用*VEDIT 命令或按其等价菜单方式编辑数组
利用*VEDIT 命令或者等价菜单 Utility Menu>Parameters>Array Parameters>Define/Edit 以 交互方式编辑数组元素, 这两种途径只能编辑 ARRAY 或 TABLE 类型的数组, 不能编辑 CHAR 类型的数组。如图 48 所示的编辑数组元素的赋值对话框提供了强大的功能: (1)提供按面即二维表格结构形式的数组元素编辑界面。 (2)提供大型数组编辑的导向控制:导向方向控制、数组面的选择、数组元素显示范围。 (3)初始化某一行或列(仅对 ARRAY 有效)。 (4)对行或列数据进行删除、拷贝和插入操作(仅对 ARRAY 有效)。 实例: 假如需要编辑图 46 所示的数组 B(4,3,1), 选择菜单 Utility Menu>Parameters> Array Parameters>Define/Edit 弹出定义数组参数对话框,单击 Add 按钮弹出增加新数组对话框,Par 输入 B,Type 选择 Array,I、J、K 依次设置为 4、3、1,然后单击 OK 按钮定义数组 B(4,3,1); 接着,选中 Currently Defined Array Parameters 列表中的数组参数 B,单击 Edit 按钮弹出如图 48 所示的编辑数组参数 B 的对话框,并按图示在各元素位置填写元素的赋值,最后选择对话 框菜单 File>Apply/Quit 结束编辑操作并返回定义数组参数对话框。
图 48 编辑数组元素的赋值对话框
4.3.3 利用*VFILL 命令或者其等价菜单方式填充数组向量
使用*VFILL 命令或等价菜单 Utility Menu>Parameters>Array Parameters> Fill 来填充 ARRAY 或 TABLE 类型数组参数的一个列矢量,填充的数据必须服从某种分布规律或者是一 系列的随机数。*VFILL 命令的使用格式如下: *VFILL,ParR,Func,CON1,CON2,CON3,CON4,CON5,CON6,CON7,CON8,CON9,CON10 其中,ParR 是参数列矢量名,对于二维或三维数组代表其中的某列矢量;Func 是填充数 据服从的函数规律,包括以下几种: (1)DATA 选项:将指定的 CON1~CON10 数值填充到列矢量中。 (2)RAMP 选项:按 CON1+((n-1)*CON2)规律进行填充列矢量。
(3) RAND 选项: 以基于均匀分布的随机数填充列矢量, 即 RAND(CON1,CON2), 其中 CON1 代表随机数下限(默认为 0.0),CON2 代表随机数上限(默认为 1.0)。
CON1 代表均值(默认为 0.0),CON2 代表标准方差(默认为 1.0)。
(5)TRIA 选项:以基于三角分布的随机数填充列矢量,即 TRIA(CON1,CON2,CON3), 其中 CON1 代表随机数下限(默认为 0.0),CON3 代表峰值位置,CON2 代表随机数上限。
(6)BETA 选项:以基于 BETA 分布的随机数填充列矢量,即 BETA(CON1,CON2, CON3,CON4), 其中 CON1 代表随机数下限 (默认为 0.0), CON2 代表随机数上限, CON3 与 CON4 代表 alpha 与 beta 参数值且必须为正数(默认为 1.0)。
(7)GAMM 选项:以基于 GAMMA 分布的随机数填充列矢量,即 GAMM(CON1, CON2,CON3),其中 CON1 代表随机数下限(默认为 0.0),CON2 与 CON3 代表 alpha 与 beta 参数值且必须为正数(默认为 1.0)。 CON1~CON10 代表需要指定的数值。 实例:定义一个维数为 12×2 的数组 AB(12,2),其第一列元素以服从均值为 0,标准方差 为 100 的正态分布的随机数进行填充,第二列元素以服从 RAMP 的函数规律且下限为 20,上 限为 200 的随机数进行填充,执行该过程的命令如下: *DIM,AB,ARRAY,12,2 !定义维数为 12×2 的数值型数组 *VFILL,AB(1,1),GDIS,0,100, !填充数组的第一列矢量 *VFILL,AB(1,2),RAMP,20,200, !填充数组的第二列矢量 *STATUS,AB,1,12,1,2,1,, !列表显示二维数组 AB(12,2)的所有元素 最后列表显示 AB(12,2)所有元素的结果如图 49 所示, 注意每次填充的结果是由当次计算 所决定的。 图 49 列表显示二维数组 AB(12,2)的所有元素
4.4 列表显示数组参数
数组参数也是用*STATUS 命令或者其等价菜单进行显示。列表数组参数的菜单如下: Utility Menu>List>Other>Parameters Utility Menu>List>Status>Parameters>All Parameters Utility Menu>List>Other>Named Parameter Utility Menu>List>Status> Parameters>Named Parameters 实例:在 4.3 节的实例 1 最后就是利用*STATUS 命令列表显示数组 AB(12,2)的所有元素, 显 示 的 方 式 如 图 49 所 示 。 为 了 实 现 等 效 的 菜 单 操 作 , 首 先 选 择 Utility Menu>List> Other>Named Parameter 弹出如图 410 所示的对话框, 参照图 410 所示进行设置, 就可以得到 如图 49 所示的结果。 图 410 *STATUS 列表显示指定范围数组参数的对话框4.5 曲线图形显示数组参数列矢量
使用*VPLOT 命令或等价菜单 Utility Menu>Plot>Array Parameters 绘制数值型数组参数的 列矢量,由于 ARRAY 类型数组的数据是无序的,故只能用柱状图表示数组参数。*VPLOT 命 令的使用格式如下: *VPLOT, ParX, ParY, Y2, Y3, Y4, Y5, Y6, Y7, Y8其中,ParX 是 X 轴上的列矢量名;ParY, Y2, Y3, Y4, Y5, Y6, Y7, Y8 是 Y 轴上映射的 8 个 列矢量,即可以同时绘制 8 个列矢量曲线。
实例 1:参见图 45 所示的一维数组为 12×1 的数组参数 A,可以绘制 A(12)数组的曲线显 示图,命令如下:
对应命令的等价菜单操作是,选择菜单 Utility Menu>Plot>Array Parameters 弹出如图 411 所示的曲线显示数组参数对话框,参照图 411 所示进行设置,单击 OK/Apply 按钮,在图形 窗口中显示如图 412 所示的结果。 图 411 曲线显示数组参数对话框 图 412 曲线显示数组参数 A(12) 最后,补充说明如何进行人工设置曲线显示标识功能。对于默认条件下绘制的参数曲线, 在曲线图中全部采用默认的标识字,如曲线 1 标识字是 COL 1,曲线 2 标识字是 COL 2,其他 依次类推。另外,列数指定该曲线包含的相关变量。还可以利用/GCOLUMN 命令给各曲线指 定自己需要的标识字,它是一个长度不超过 8 个字符的字符串。
实例 2:在程序开始部分利用/GCOLUMN 命令给各曲线分别指定标识字 string01 和 string02,结果如图 413 所示。命令如下: /gcol,1,string01 /gcol,2,string02 *DIM,xxx,ARRAY,10 * DIM,yyy, ARRAY,10,2 xxx( 1,1) =1e6 xxx( 2,1) = 1e6 + 1e5 xxx( 3,1) = 1e6 + 2e5 xxx( 4,1) = 1e6 + 3e5 xxx( 5,1) = 1e6 + 4e5 xxx( 6,1) = 1e6 + 5e5 xxx( 7,1) = 1e6 + 6e5 xxx( 8,1) = 1e6 + 7e5 xxx( 9,1) = 1e6 + 8e5 xxx(10,1) = 1e6 + 9e5 yyy( 1,1) = 1 yyy( 2,1) = 4 yyy( 3,1) = 9 yyy( 4,1) = 16 yyy( 5,1) = 25 yyy( 6,1) = 36 yyy( 7,1) = 49 yyy( 8,1) = 64 yyy( 9,1) = 81 yyy(10,1) = 100 yyy( 1,2) = 1 yyy( 2,2) = 2 yyy( 3,2) = 3 yyy( 4,2) = 4 yyy( 5,2) = 5 yyy( 6,2) = 6 yyy( 7,2) = 7 yyy( 8,2) = 8 yyy( 9,2) = 9
yyy(10,2) = 10 *VPLOT,xxx(1,1), yyy(1,1) ,2 图 413 用户指定标识字举例