ANSYS中APDL的“数组”与其他高级语言概念类似,这里通过实例介绍数组的定义、赋值、显示等内容。在建模和后处理过程中,使用数组可大大提高参数化过程,进而提高分析效率。ANSYS数组分为数值型数组、表数组、字符型数组和字符串数组,如无特别说明,本文所指数组均为数值型数组。
1.数组的定义
*DIM,Par,Type,IMAX,JMAX,KMAX,Var1,Var2,Var3,CSYSID
其中Par是数组名,其命名规则与变量一样,如不超过32字符等。
Type是数组类型,标识符有ARRAY、ARR4、ARR5、TABLE、TAB4、TAB5、CHAR、STRING等,数值型就前三个,即ARRAY、ARR4和ARR5;缺省为ARRAY即数值型数组。
IMAX、JMAX、KMAX为数组下标的最大值。Var1、Var2、Var3对应表数组的行、列、面名字,但对于ARR4和AAR5时,也为下标的最大值。CSYSID是坐标编号,在表数组荷载时使用。
例如:*DIM,A,,10!定义一维数组A(10)
*DIM,B,,5,3!定义二维数组B(5,3)
*DIM,C,,10,5,4!定义三维数组C(10,5,4)
*DIM,D,ARR5,10,5,4,2,6!定义五维数组D(10,5,4,2,6)
2.数组赋值
数组赋值方法主要有*SET或“=”、*VFILL、*VREAD等,常用的有“=”和*VREAD。需要特别注意的是,数组赋值以“列”优先,分别介绍如下。
(1)“=”赋值
等号可以一次为数组的一个元素或多个元素赋值,即可一个一个元素赋值,也可一次赋予18个元素的值。多于18个元素时,可以另次赋值,例如有两个数组A(30)和B(4,5),赋值如下:
*DIM,A,,30!30个元素的一维数组
*DIM,B,,4,5!4行5列数组
A(1)=1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9,10.0,11,12,13,14,15,16,17,18!一次赋18个
A(19)=19,20,21,22,23,24,25!从19开始再赋7个
A(26)=26,27,28,29!从26开始再赋4个
A(30)=30!当然也可一次赋一个元素
STAT,A!显示A(30)数组的值
!假设B数组按4行5列分别元素数值为:
!1.1 1.2 1.3 1.4 1.5
!2.1 2.2 2.3 2.4 2.5
!3.1 3.2 3.3 3.4 3.5
!4.1 4.2 4.3 4.4 4.5
!B数组赋值命令如下
B(1,1)=1.1,2.1,3.1,4.1!赋第1列的各行元素
B(1,2)=1.2,2.2,3.2,4.2!赋第2列的各行元素
B(1,3)=1.3,2.3,3.3,4.3!赋第3列的各行元素
B(1,4)=1.4,2.4,3.4,4.4!赋第4列的各行元素
B(1,5)=1.5,2.5,3.5,4.5!赋第5列的各行元素
!B(4,3)=100.0!赋予单个元素(4,3)数值
!STAT,B!先行后列显示数值,一个一个元素显示,不太直观。
*VEDIT,B!编辑、修改、赋值、显示数组B,比较直观。
再次强调,ANSYS数组按“列优先(列不动行变)”赋值,如2维数组按列赋值,在一列时再按一维数组赋值。对于3维甚至更高维时规律类似,如5维数组,先按第5维赋值,然后是第4维,再是面赋值等等。
(2)*VREAD赋值
*VREAD命令是从ASCⅡ文件读入数据,与其他高级语言类似。命令格式为:
*VREAD,ParR,Fname,Ext,--,Label,n1,n2,n3,NSKIP
其中ParR为已经定义好了的数组名。Fname和Ext为带路径的数据文件名和扩展名,长度分别可达250个字符和8个字符,但不能采用中文目录名,缺省时为当前工作目录和当前工作文件名;一般不建议数据文件名和工作文件名相同,如需要带目录的文件时为('E:/ANSYSWORK/DATA/FILENAME')样式(注意无括号)。
Label为赋值顺序标识符,可取IJK、IKJ、JIK、JKI、KIJ、KJI或空(按IJK缺省)。n1、n2、n3为与Label次序对应的数值,例如当Label=KIJ时,按(((ParR(i,j,k),k=1,n1),i=1,n2),j=1,n3)读入并赋值。
NSKIP为读入数据文件时跳过的行数,表示从下一行开始读入数据,缺省为零,即从第1行开始读入数据。
在使用*VREAD时注意:该命令后紧跟数据格式行,且不能直接在粘贴在GUI的命令窗口执行;其次是数据文件可以为无整数的、用英文逗号隔开的数据(ANSYS“小意外系列”之一:须了解并避免出错)。
通常数据文件都是按行和列排列的数据,当然希望按此读入数据,例如按下述组织的数据文件(可用记事本编辑并保存在ANSYS当前工作目录下,且为MYTEST.TXT文件):
1.1,1.2,1.3,1.4,1.5
2.1,2.2,2.3,2.4,2.5
3.1,3.2,3.3,3.4,3.5
4.1,4.2,4.3,4.4,4.5
5.1,5.2,5.3,5.4,5.5
6.1,6.2,6.3,6.4,6.5
根据上述数据文件,显然读入顺序应该“行不动列变”,即JIK格式,也就是*VREAD,A,MYTEST,TXT,,JIK,5,3,1,打开就是(((A(I,j,k),j=1,5),i=1,3),k=1,1)。可执行的命令流如下:
*DIM,A,,3,5!定义A(3,5)
*DIM,B,,3,5,2!定义B(3,5,2)
*CREAT,READDAT,MAC!创建宏文件READDAT.MAC
*VREAD,A,MYTEST,TXT,,JIK,5,3,1!读入数据及格式
(5F15.5)
*END!宏结束
READDAT!执行宏
*CREAT,READDAT1,MAC
*VREAD,B,MYTEST,TXT,,JIK,5,3,2
(5F15.2)
*END!
READDAT1
!显示数组(一个一个显示)
*VEDIT,A
*VEDIT,B
!利用DOS命令删除刚刚创建的两个宏文件
/sys,del,readdat.mac
/sys,del,readdat1.mac
(3)*VFILL赋值
*VFILL用于填充数组或表数组,填充的数据按一定的分布规律或系列随机数,其格式为:
*VFILL,ParR,Func,CON1,CON2,CON3,CON4,CON5,CON6,CON7,CON8,CON9,CON10
其中ParR为已定义的数组名。Func可以按:
DATA-将指定数据CON1~CON10填充数组。
RAMP-按CON1 ((n-1)*CON2)规律填充数组,n由数组最大下标确定。
RAND-按均匀随机数填充数组,即RAND(CON1,CON2)。
GDIS-按高斯分布随机数填充数组,即GDIS(CON1,CON2)。
TRIA-按三角分布随机数填充数组,即TRIA(CON1,CON2,CON3)。
BETA-按β分布随机数填充数组,即BETA(CON1,CON2,CON3,CON4)。
GAMM-按γ分布随机数填充数组,即GAMM(CON1,CON2,CON3)。
RIGID-按参考坐标(CON1,CON2,CON3)生成刚体模态填充数组。
CLUSTER-按CLUSTER生成激励频率填充数组,需使用(CON1,CON2,CON3,CON4,%CON5%)。
有趣的ANSYS随机数发生器
3.显示数组
命令*STAT,ParR可以列表显示数组值,按行、列、面顺序排列,但显示时每行一个元素。
命令*VEDIT,ParR可以编辑、修改数组值,也可通过此命令赋值。
命令*VPLOT可以绘图显示数组值,其命令格式为“*VPLOT,ParX,ParY,Y2,Y3,Y4,Y5,Y6,Y7,Y8”,其中ParX为横坐标轴“列名称”,缺省时为数组下标。ParY和Yi为竖坐标轴的“列名称”,即可同时绘制8条曲线。
*DIM,GG,,30,5
*VFILL,GG(1,1),GDIS,1,10
*VFILL,GG(1,2),TRIA,1,20,2
*VFILL,GG(1,3),BETA,1,20,2
*VPLOT,,GG(1,1),GG(1,2),GG(1,3)
4.数组删除
数组删除与变量删除相同,即“数组名=”就将改数组删除了,在读入命令流(/INPUT或宏)中,系统不提醒确认,但在GUI方式时系统要求确认删除。
上述为数组的基本内容,ANSYS还提供了对数组的各种运算函数和命令,可大大方便计算分析,这些回头再聊。ANSYS的APDL类似FORTRAN语言,因此可以在ANSYS中添加自己的编程计算部分,但计算速度可能不太理想。
类似数组的停车场
---------------------------------------------------------------------------------------------
版权声明:
原创文章,来源铁大王新敏,本文已经授权,欢迎分享,如需转载请联系作者。