有部分同学在操作APDL时,可能会遇到读取或者导入大型数组的情况,然而如果按常规的*Vwrite或者*Vread方法极易出问题,要么ANSYS崩溃,要么人员崩溃,今日水哥就介绍下采用APDL中的矩阵工具箱来操作的方法,简单快捷,并且免于读取或写出的格式烦恼!
至于数组要达到多少维度才算是大型数组?在APDL中,水哥建议如果数组的任意一个维度超过了10000就可以归并为大型数组,进而可采用本文方法!
关于矩阵工具箱及相关函数索引,参考下面这篇文章:
导入和导出主要用到的命令为
*DMAT:创建矩阵,可从文件中读取数据来进行创建;
*EXPORT:导出矩阵,可将矩阵对象转为普通数组对象,也可以将数组导出为文件。
一、数据写出
首先生成10000*10的随机数组,采用*DMAT将普通数组对象转为矩阵对象,然后利用*EXPORT命令将其转为CSV数据。
代码如下:
finish
/clear
/prep7
*dim,AA,array,10000,10
*do,i,1,10000
*do,j,1,10
AA(i,j)=rand(1,10)
*enddo
*enddo
*Dmat,AA_Math,D,import,APDL,AA
*export,AA_Math,CSV,Mytest
在工作文件夹下,即可找到Mytest的文件,该文件不能指定后缀名,可手动添加.csv,然后用excel打开,当然也可直接用UE或者Matlab读取数据。
人工加上后缀名.csv,然后用Excel打开即可。
数据的核对:
为核对数据是否导出有误,现随机复核一个数据,首先在APDL中获取一个数据,例如:
dd=AA(8645,6)$*status,dd
其值为:
在excel中,找到对应位置,其值如下所示:
两者一致。
二、数据读入
与数据写出不同,APDL的矩阵工具箱不能直接读取csv文件,需要进行一定的格式处理,水哥建议采用工具箱特有的MMF格式,MMF格式如下:
前面6行 为注释性语言,第7行指定数据导入数组时生成的行数和列数,接下来就是单列数据,按照先行后列的规律排序。
本文未经授权,严禁复制转载于其他第三方平台,微信公众号ANSYS结构院,博客FSCAE.COM !
使用方法如下所示:
现假定需要读取一组20000*30的数组到APDL中。
首先利用Matlab生成了20000*30的随机数组数据,并按照先行后列的规律导出到一个文件TestB。
Matlab代码如下所示:
% 生成20000x30的随机数组
A = rand(20000, 30);
% 将矩阵转换为一个单列的矩阵,20000*30行,1列
A_col = reshape(A, [], 1);
% 指定输出文件的名称
filename = 'TestB.txt';
% 打开文件用于写入
fileID = fopen(filename, 'w');
% 检查是否成功打开文件
if fileID == -1
error('Failed to open file for writing.');
end
% 写入数据,每个数值后面跟一个空格
fprintf(fileID, '%.6f\n', A_col);
% 关闭文件
fclose(fileID);
打开TestB.txt,手动添加如下信息,当然如果是批量处理,这个过程你可以用Matlab或者Python来处理。
在APDL中首先用*DMAT读取MMF格式的文件,然后用*EXPORT转为APDL数组即可。
APDL代码如下:
*DMAT,BB_MATH,D,import,MMF,testB
*export,BB_Math,APDL,BB
数据复核,点击Parameters>Array>Define,如下所示。
数据已经读取成功,现在复核单个数据。
dd=BB(15869,26)
*Status,DD
然后在matlab中获取该位置的数据,两者截图如下所示。
数值符合,说明读取成功!
采样上述方法,针对这种上万级别的数组,APDL读取也就3秒钟的事儿,远远比*Vread或者*Mread效率高的多!
附 活动送书名单,原文:
名单如下:
请上述同学务必于今日21:00前添加小助手依依(微信号id:superansys)领取活动书籍,过时无效哦。
添加时,请备注 活动书籍领取, 通过好友申请后 请发送留言被公众号选中的截图以及相应的收件地址和联系人,书籍预计在1~5个工作日内寄出。
再次感谢大家的支持!
2024.09.18