ANSYS APDL 小記,

用ANSYS工作已經有好多年了,寫了大量的APDL腳本,有一些沉淀下來的體會想寫出來

APDL簡介

APDL語言是用于ANSYS軟件交互的腳本語言。在早期ANSYS還沒有窗口界面時,是采用APDL語言交互。而后來提供軟件界面是,實質上還是把界面操作翻譯成APDL,然后在輸入給ANSYS軟件。 APDL有一些特點:

  1. 由于APDL是一種用于交互的腳本語言,可以理解成逐行解釋執行。所以基本元素是行,不想Nastran和Abaqus卡片那樣以“塊”為基本元素。

  2. ANSYS的Batch模式中的輸入文件也是APDL格式的,由于Batch模式同Nastran類似,只需要提供一個輸入文件,所以有人也把這個文件叫做卡片。

  3. 不像Nastran把卡片全部讀入后,確定沒有錯誤后再提交給求解器求解。APDL由于是逐行解釋執行的,所以只會執行到錯誤時,才能發現程序錯誤。如果你提交的APDL求解時間很長,最好還是先把前處理和后處理部分分開調試成功后,在一起提交給ANSYS,否則晚上下班前提交給計算機,第二天回來發現由于APDL腳本錯誤,導致計算到一半就停止了,會很郁悶。

  4. 與其他只提供求解器的有限元軟件不同,ANSYS是具備建模和前處理功能的,所以你可以不借助任何其他軟件,只需要ANSYS的APDL卡片就可以從實現幾何建模、分網、加載、求解??梢苑奖愕膶崿F以幾何尺寸為優化參數,以有限元分析結果為優化目標的參數優化。所以大量的幾何參數優化研究都是用ANSYS作為平臺。

  5. APDL的語言風格類似FORTRAN。

基本要素

類似于其他程序語言,先說“變量”、“結構”、“函數”、“文件I/O”三個基本要素

變量

數和字符串

基本變量可以籠統的分為數和字符串。數只有浮點數,字符串用單引號'表示。不需用事先聲明,可以像一般程序語言那樣賦值和運算。如下:

a=1
b=2
c=a+b
str='this is a string'

在構成字符串時,可以包含浮點數變量,如下:

a=1
str = 'a is %a%'

這樣str的值即為 'a is 1'。這在循環語句時可以方便使用"XXX1""XXX2"作為循環體中的組名、文件名等。

array和table

array類似于程序語言中的數組。table是APDL獨有的一種變量類型,表示與某個因變量間的關系,定義時需要指名因變量,因變量可以是坐標軸X,Y,Z,也可以是時間TIME,也可以是自己定義的表。APDL中的array和table變量需要事先用DIM語句定義。

dim,ar,array,10                 !*定義名為ar,長度為10的數組
dim,br,array,5,5                !*定義名為br,5*5的數組
dim,ta,table,10,,,x             !*定義名為ta,長度為10的table,因變量為x
ar(1)=10                        !*將ar數組的第一個元素賦值為10
br(1,2)=ar(1)                   !*將ar(1)賦值給br數組中的(1,2)ta(1,0) = 0
ta(1,1) = 3.4
ta(2,0) = 0.5
ta(2,1) = 4.6                   !*x坐標=0時ta=3.4,x坐標=0.5時ta=4.6

table通常用于離散載荷數據的加載,如知道一平板上的壓力與X軸相關,x=0時壓力p=3.4,x=0.5時p=4.6,則只需定義如上的table變量ta,在將ta作為壓力加載到平板上即可,分布為一次線性差值,平板上X坐標超過table定義范圍的,外插。即x>0.5范圍的p=4.6,x<0范圍的p=3.4。

結構

循環語句

APDL中循環語句為*DO,*ENDDO,同其它語言中的for語句,格式為"*do,變量名,起始,終點,步長",以"*enddo"結束循環。

*do,i,1,10,2                    !* 格式為:*do,var,start,end,step    
/input,'loadfile%i%'    
solve
*enddo

上面是一個常用的代碼,依次讀入loadfile1,loadfile2…loadfile10,并求解,這里也可以看到數字轉換為字符串的用處。

分支語句

APDL中有 *IF 語句用于判斷,格式為 "*IF,變量1,比較操作符,變量2,THEN", "*DNDIF"作為結束

*if,a,eq,1,then                 !*如果a等于1,比較符同fortran,    solve*endif

比較操作符同FORTRAN,有:

  • eq: equal 等于

  • ne: not equal 不等于

  • lt, gt: less than 小于, great than 大于

  • le, ge: less equal 小于等于, great equal 大于等于

判斷后的操作語句除了 then 之外,還有 circle 等,相見幫助手冊中的 *IF

函數

APDL中的命令可以視作函數,可以通過“宏”實現自己的命令。 在工作目錄或 "ansys安裝目錄/ansys/apdl/" 下建立以 .MAC 為后綴名的文件即能創建自己的命令宏。如建立文件 mymicro.mac 后,在APDL命令框或輸入文件中使用 mymicro 命令,即可調用 mymicro.mac 中的功能,這樣mymicro相當于程序語言中的子過程和函數,但本質是宏展開,這在一定意義上可以實現結構化編程。宏命令可以像函數那樣有輸入參數,但是沒有返回值,等同于子過程。要注意的是,由于本質是宏展開,APDL中不存在局部變量和變量生存空間這個概念,所以主文件和調用的宏文件中的變量是共享的,同名變量是互相沖突的,所以如果在主文件中使用了某個變量名,宏文件不能使用同名變量,否則在宏文件中操作的同時是主文件中的那個變量。特別是在主文件和宏文件都使用循環語句時要注意,循環變量不能相同。 宏文件中可以通過 "arg1,arg2,…,arg9,ar10,ar11,…,ar99" 來訪問輸入變量, 在調用宏命令時,如果有參數是字符串(如組名),則必須用單引號 ' ' 包括,否則會認為輸入的是變量名。

文件I/O

文件輸出

文件輸出的步驟如下

  1. 用*CFOPEN打開一個輸出文件,

  2. 用*VWRITE 命令輸出變量值,支持FORMAT輸出,

  3. 用*CFCLOS關閉文件。

下面是一個實例:

*cfopen,'u.txt'                 !* 打開 u.txt 文件
*vwrite,ux(1),ux(2),ux(3)       !* 以此寫入節點號為 1.2.3 的 x 位移值
(3F16.4)                        !* 上面輸出變量的格式化語句,3個浮點數,有效位是16位,小數點后有4位數
*vwrite,t1(1),t2(1)             !* 若t1和t2是兩個array或table, 此時輸出為一列
(2F16.4)                        !* 格式化語句同上
*cfclos                         !* 關閉文件

format格式化語句類似于fortran,但是沒有整型變量I,具體相見幫助文檔中的*VWRITE

文件輸入

APDL的可以通過 *VREAD 和 *TREAD 從文件讀入一個數組數據或者表格數據,即只可以讀取浮點數數據。

To be continued

暫時想到這么多,以后慢慢補充

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

11
3
4