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卡片就可以从实现几何建模、分网、加载、求解。可以方便的实现以几何尺寸为优化参数,以有限元分析结果为优化目标的参数优化。所以大量的几何参数优化研究都是用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 从文件读入一个数组数据或者表格数据,即只可以读取浮点数数据。


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空