用ANSYS工作已经有好多年了,写了大量的APDL脚本,有一些沉淀下来的体会想写出来
APDL语言是用于ANSYS软件交互的脚本语言。在早期ANSYS还没有窗口界面时,是采用APDL语言交互。而后来提供软件界面是,实质上还是把界面操作翻译成APDL,然后在输入给ANSYS软件。 APDL有一些特点:
类似于其他程序语言,先说“变量”、“结构”、“函数”、“文件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是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,有:
判断后的操作语句除了 then 之外,还有 circle 等,相见帮助手册中的 *IF
APDL中的命令可以视作函数,可以通过“宏”实现自己的命令。 在工作目录或 "ansys安装目录/ansys/apdl/" 下建立以 .MAC 为后缀名的文件即能创建自己的命令宏。如建立文件 mymicro.mac 后,在APDL命令框或输入文件中使用 mymicro 命令,即可调用 mymicro.mac 中的功能,这样mymicro相当于程序语言中的子过程和函数,但本质是宏展开,这在一定意义上可以实现结构化编程。宏命令可以像函数那样有输入参数,但是没有返回值,等同于子过程。要注意的是,由于本质是宏展开,APDL中不存在局部变量和变量生存空间这个概念,所以主文件和调用的宏文件中的变量是共享的,同名变量是互相冲突的,所以如果在主文件中使用了某个变量名,宏文件不能使用同名变量,否则在宏文件中操作的同时是主文件中的那个变量。特别是在主文件和宏文件都使用循环语句时要注意,循环变量不能相同。 宏文件中可以通过 "arg1,arg2,…,arg9,ar10,ar11,…,ar99" 来访问输入变量, 在调用宏命令时,如果有参数是字符串(如组名),则必须用单引号 ' ' 包括,否则会认为输入的是变量名。
文件输出的步骤如下
下面是一个实例:
*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 从文件读入一个数组数据或者表格数据,即只可以读取浮点数数据。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删