本篇文章为文件读入与写出系列文章第二篇。主要介绍文件读入的相关知识。
*Vread命令使用格式如下:
*Vread,ParP,Frname,Ext,--,Label,n1,n2,n3,Nskip
其中,ParP是读入数据的赋值对象数组,使用前需采用*dim命令进行定义;Frname为带路径的文件名,注意路径不能有中文名,如果是放在工作目录下,则直接写文件名字即可;Ext是文件的扩展名;Labl是取值顺序标识字符,分别为IJK、IKJ、JIK、JKI、KIJ、KJI,默认为IJK;n1、n2、n3分别为根据取值顺序标识符所采用的取值;Nskip为读入数据文件时需要跳过的开始行数,默认为0,表示从第一行开始读入数据。
值得注意是,*Vread命令通过外部宏文件输入使用,不可直接复制在命令流窗口中使用,一般使用格式如下,同学们只需修改宏文件名字和*Vread命令内容即可。
*Create,dataread,mac !创建宏文件,名为dataread,名称可更改
*dim,Elcentro,,2600 !创建读入数据的数组
*vread,Elcentro(1,1),Elcentro,txt,,ijk,n1,n2 !读入文件Elcentro.txt的数据
(f6.3) !读入格式
*End !结束宏文件的创建
Dataread !运行宏文件
上述给出了使用*vread的一般步骤,同学们在使用的过程中可以具体参考,由于是使用了命令*Create创建宏文件,*Vread出现在宏文件中,故而上述命令可以直接复制在ANSYS命令流窗口中进行使用,运行完改命令后,会在当前工作目录下,自动生成一个以mac为扩展名的宏文件,名字为Dataread,当然可根据需要自己修改。
读入的文件,最好以txt为扩展名,并且调好格式,放入工作目录下。
使用*Vread命令比较难得是读取顺序标识符的设定,也即是Label与后续N1、N2、N3的设定。
一、顺序标识符Label的设定
Label的设定决定了写入数据的顺序,I代表行、J代表列、K代表面。如果是IJK,则写入数组的时候先写入面,在写入列,最后写入行,也即列的变化比行的变化快。若为JIK,则是先写面,在写行,最后写入列,也即行的变化比列快。在平时使用中,一般只用IJK和JIK两种格式,对于二维数组来讲,没有面的写入,只有行列的写入变化。
二、N1、N2、N3数值的设定
N1、N2、N3表示按上面指定的顺序,各下标分别要写入的数据个数。如IJK,3,4,1 表示数组ParP按列写入,共写3列4行。N2、N3默认数值为1。
今以一个二维数组来说明如何取用。
【例】现有如下文件,名为data.txt,文件内容如下,为一个6*5二维数组,采用*vread命令进行读取。
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
26 27 28 29 30
31 32 33 34 35
36 37 38 39 40
1、全部读取
(1)采用IJK的读取顺序
*Create,dataread,mac
*dim,DD,array,6,5
*vread,DD(1,1),data,txt,,ijk,6,5
(5f3.0)
*End
Dataread
读取结果如下:
上述命令流中,(5F3.0)表示读取格式, ANSYS中读取文件总是按照行进行,最后结果的不同只是和写入数组的顺序以及读取的数值个数有关,(5F3.0)意思则为每行按照F格式读取5个数据,每个数据三个字节,其中小数位为0,如果读取的数据个数超过我们已有个数,则会以0代替。
读取的数据按照我们事先指定的写入顺序写入到数组,例如此处指定的是IJK,也即先按照列的顺序写入,写入6个数据,然后在进行下一列的写入,共写5列,最终就形成了如上的结果。如果我们改下写入的数目,看下效果,例如对*vread内容做如下修改:
*vread,DD(1,1),data,txt,,ijk,5,1
改变之后,每列只写入5个数据,且只有一列,其余以0代替。
*vread,DD(1,1),data,txt,,ijk,3,2
(2)采用JIK的读取顺序
*Create,dataread,mac
*dim,DD,array,6,5
*vread,DD(1,1),data,txt,,jik,5,6
(5f3.0)
*End
Dataread
读取结果如下:
了解完读入原理后,有同学可能还不怎么理解,那么在实际操作过程中,按如下方式来操作即可,此方法只针对需将数据全部读入数组,且各元素位置信息同源文件一致时。
1)、确定读入数据的维度,如行数m以及列数n。
2)、定义数组,维数为m*n
*dim,parp,array,m,n
3)、采用*vread命令,并且采用JIK的顺序
*vread,parp(1,1),data,txt,,jik,n,m