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中添加自己的編程計算部分,但計算速度可能不太理想。