ANSYS中表格数组的定义及使用举例
本文转载自:http://blog.sina.com.cn/s/blog_833dee820102xwb3.htmlANSYS中会有许多的参数数据,这些参数的形成后要放到一个容器中去,等着以后调用。ANSYS中提供了多种存取的容器。其中有变量(variables)数组(arrays)以及表格(tables)。变量和我们平时用的一样。数组其实和我们平时用的也差不多。ANSY
本文转载自:http://blog.sina.com.cn/s/blog_833dee820102xwb3.html
ANSYS中会有许多的参数数据,这些参数的形成后要放到一个容器中去,等着以后调用。ANSYS中提供了多种存取的容器。其中有变量(variables)数组(arrays) 以及表格(tables)。变量和我们平时用的一样。数组其实和我们平时用的也差不多。ANSYS中的参数数据存储时的排列和Matlab中的矩阵形式是一样的,是以列优先的。我们在Matlab中单个数据索引的时候是按照列调用的,先调用第一列然后调用第二列依次类推。
一维是一列(column),二维是行和列(rows and columns),三维是行列以及面(rows,columns and planes)。ANSYS中提供的三种类型的数组ARRAY,CHAR以及TABLE。重点介绍一下TABLE。它是ANSYS特有的一种数据存储容器。它能允许ANSYS线性插值计算得到所存入数据之间的数据。比较一下一维数组和表格的不同,如下图所示:
第一个图就是一个一维ARRAY数组,假如我们命名为A(实际定义时为*DIM,A,ARRAY,7
对于二维数组,和二维矩阵是一样的。比如定义一个4行3列的矩阵AA:*DIM,AA,ARRAY,4,3。如下图所示:
索引方式和Matlab中一样AA(i,j)。三维数组的表示方式也是一样的。索引方式即AA(i,j,k)。
上文说到TABLE中的索引可以是小数,这是因为TABLE中多出了一行和一列,名为0行,0列。这个0行0列就是为了存储索引值的,索引值是由我们指定的,不像ARRAY是自动生成的。指定的时候要注意索引值必须是递增的,如果不指定,默认情况是得到一个很小的值(7.888609052E-31)。我们在GUI中可以通过下图方式查看表格数据。
对于三维的TABLE数据。层或者面的索引值是在每一面的(0,0)出给出,同样面的索引也不一定是整数。在ANSYS帮助文档中有一个图比较简单明了:
接下来我们看看怎么填充ARRAY数组和TABLE数组。①我们可以*SET命令或者“=”一个个定义数据。②也可以一列一列的填满(注意这里是列,比如使用*VFILL命令)③可以交互式的修改数据(*VEDIT)④从ASCII文件中读取数据(*VREAD或者**TREAD命令)。
但是*SET命令或者“=”一次定义的数据量是有限的,我们从该命令的语法也可以看到,一次只能定义10个。比如我们定义一个12行1列的矩阵XYZ,我们只能这样定义:
*DIM,XYZ,ARRAY,12
XYZ(1)=59.5,42.494,-9.01,-8.98,-8.98,9.01,-30.6,51 !这个命令的意思是我们从XYZ中的第1个位置开始定义,这次定义了8个。(数据填充的时候对于数组,其名称后边必须跟着一个用括弧括起来的下标,如果后边定义一个数据,那么下标的意思是数据所在位置。*SET命令帮助文档中有说明。但是命令后边是一连串的数据,那么这个下表指的就是数据填充的起始位置)
XYZ(9)=-51.9,14.88,10.8,-10.8
这样这个12行1列的数据就算定义完了。实际上得到的是:
这样看数组的话,感觉舒服多了。接下来的例子用来说明二维数组是如何定义的。首先声明一个4行3列的数组T2,*DIM,T2,ARRAY,4,3。然后填充:
T2(1,1)=0.6,2,-1.8,4
T2(1,2)=7,5,9.1,62.5
T3(1,3)=2E-4,-3.5,22,0.01
FORCE(1)=0,560,560,238,.5,0
FORCE(1,0)=1E-6,0.8,7.2,8.5,9.3
对于字符串数组差不多,不再说明。
第二种方法是使用*VFILL命令来对ARRAY数组或TABLE数组一列一列的填充。*VFILL命令可以实现第一种的数据填充方式,也可以按照给定的公式去填充。详细情况可以看命令的帮助文档。
第三种是使用*VEDIT命令。但是这种方法只适用于交互的GUI模式,我们通常使用命令流,因此不作讨论。
第四种是通过*VREAD命令将数据文件读入到数组中去。我们可以定义写入数组时候的其实位置,也可以通过数据描述符来控制写入的数据格式。数据描述符必须用小括号括起来放在*VREAD下边。举个例子,有一个名为dataval的数据文件:
1.5
15.6
然后我们定义一个2行3列的EXA数组:
*DIM,EXA,,2,3
*VREAD,EXA(1,1),dataval,,,JIK,3,2
(3F6.1)
得到的结果为:
EXA=
我在尝试以上命令的时候使用的是txt文档,使用TAB处理数据间隔,但是不行。使用逗号隔开才可以,使用csv格式也行。不知道为什么。
对应的TABLE数组使用的命令是*TREAD。(一个是VECTOR,一个是TABLE)。以上要读入的数据文件呢,最好是使用tab键将数据隔开的,另外要保存成ASCII格式。TABLE数据读入的时候只有一个顺序就是先按照第一列,一行一行读,结束之后开始第二列,依次类推。
以下用几个例子来说明上述操作。
我们使用EXCEL写出一组数据,第一列是时间,第二列是温度。然后另存为制表符分割的文本文件,命名为tdata。然后放到ANSYS的运行目录中去。
打开ANSYS在命令窗口输入:
*DIM,TEM,TABLE,7,1,1,TIME,TEMP
*TREAD,TEM,TDATA,TXT,,1
我们查看一下结果:
Pretty good.对于二维的表格数据,和一维的类似。比如我们在Excel中制作下图这样一个表格。黄色的部分0表示第一个面,灰色的部分表示温度,其余的表示时间和x坐标的索引值。另存为TDATA.txt。
*DIM,TMP,TABLE,4,3,1,TIME,X_COOR
*TREAD,TMP,TDATA,TXT,,2
查看结果:
对于3-D表格的导入和上边很相似。只不过要加上关于面的索引。比如要制作一个随时间和x坐标,y坐标变化的温度表,其中每一个面中行代表时间,列代表x坐标,面代表y坐标。如下图所示:
这是一个有两个面,4行3列的表格。其实对于三维表格在二维上的制作,看起来不是那么清晰。右边表格中黄色的部分其实就是y轴。黄色的部分对应的是y轴的坐标。对于每一个面,即每个y坐标都要有一组x坐标和时间坐标(索引值),而且这些索引值要相同(必须)。将上述表格,按照同样的方法导入到ANSYS中去,得到:
*DIM,TMP,TABLE,4,3,2,TIME,X_COOR,Y_COOR
*TREAD,TMP,TDATA,TXT,,1
分别点击y轴坐标,很容易就能看到其对应的那个面的表格数据。
表格数据可以干什么?利用表格数据的插值性质,我们可以定义函数。因为TABLE中的数据是连续的,所以定义函数成为可能。比较常用的就是定义按时间变化的荷载、相应谱曲线、应力应变曲线、材料属性——温度曲线等等。
对于表格施加的荷载(边界条件)。对于结构分析来所表格定义的主变量(primary virable)为下表中的第二列,施加命令为第三列。
主变量的意思是在调用的时候默认的自变量。我们设置主变量为时间时,那么定义的函数就是以时间为自变量了。好,施加表格荷载的步骤分三步:
(1)创造一个表格;
(2)填充数据;
MYLOAD(1,0,1)=0
MYLOAD(2,0,1)=1
MYLOAD(3,0,1)=5
MYLOAD(1,1,1)=0
MYLOAD(2,1,1)=400
MYLOAD(3,1,1)=1000
(3)将表格数据作为荷载施加到模型上。
SFL,ALL,PRES,%MYLAOD%
另外需要注意的是我们上边直接定义的曲线一般是斜坡的,并不是光滑的。如果想要定义光滑的可以直接定义函数。但是函数的定义一般是在GUI当中定义的,我们使用批处理时不可能中间再去定义函数。注意到ANSYS施加的函数荷载在内部应用时一般都是转化为表格进行的(查看日志文件可见)。举个例子王新敏的《ANSYS工程结构数值分析》中449页例子8.4“带槽口平板的棘轮效应分析”。他使用一个一个函数是:
-6.52E/1.5-32E3/1.5*SIN(TIME)时间定义的是10pi。但是他定义的表格按照我们前文的规定是这样的:
我去?我们发现这和函数有毛关系吗?这是怎么对应的?网上鲜有这方面资料,有人认为这种类似密码表的东西,是ANSYS为了防抄袭。但是无论如何这个东西没有解密的文档,其功能的确是隐藏的。但是我么可以通过ANSYS自带的函数编辑器操作。在GUI界面,定义函数,从log文件中拷贝出来表格数据就可以了。举个栗子:
(1)使用函数编辑器定义并保存函数;
首先打开函数编辑器,并编辑函数F=sin(Y)+log({TEMP}),点击file,save。命名为“myfunc.func”
(2)将函数载入表格中;
点击Paramer——>Read From File。然后在画红圈部分填上自己想要建立表格的名字。这里我写的是myload。点击OK,退出。到这一步后我们打开log文件,可以看到如下图的命令:
然后我们就可以将这个命令改一下放到我们的命令流中去了。我们也可以看到这个表格定义的很奇怪,这不是我们所能理解的,可能只有ANSYS开发人员能懂。
(3)将表格荷载施加到模型上。
这一步和上边的是一样的。如果想要显示荷载看看对不对,可以使用/PNUM,TABN,1
需要注意的是在瞬态分析中,还要对时间步特别注意,以防止加载时跃过加载最大值。
比如王新敏老师的《ANSYS工程结构数值分析》中449页例子8.4“带槽口平板的棘轮效应分析”将荷载子步定义了最小值也是这个道理。我们在函数编辑器中看一下他所定义的函数是什么样子的。我们看到按照100个插值点是可以满足要求的。
如果步数太小就会变形,比如下图插值20个点。当然也就无法达到我们想要的结果了。
更多推荐
所有评论(0)