APDL如何快速读取和导出大型数组

点击此处查看 ✿水哥原创ANSYS视频教程清单 ✿

水哥专属答疑服务已开通,点此此处查看详情

有部分同学在操作APDL时,可能会遇到读取或者导入大型数组的情况,然而如果按常规的*Vwrite或者*Vread方法极易出问题,要么ANSYS崩溃,要么人员崩溃,今日水哥就介绍下采用APDL中的矩阵工具箱来操作的方法,简单快捷,并且免于读取或写出的格式烦恼!
至于数组要达到多少维度才算是大型数组?在APDL中,水哥建议如果数组的任意一个维度超过了10000就可以归并为大型数组,进而可采用本文方法!

关于矩阵工具箱及相关函数索引,参考下面这篇文章:

APDL矩阵运算介绍及常见矩阵函数索引

导入和导出主要用到的命令为

*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读取数据。

APDL如何快速读取和导出大型数组

人工加上后缀名.csv,然后用Excel打开即可。

APDL如何快速读取和导出大型数组2

数据的核对:

为核对数据是否导出有误,现随机复核一个数据,首先在APDL中获取一个数据,例如:

dd=AA(8645,6)$*status,dd

其值为:

APDL如何快速读取和导出大型数组3

在excel中,找到对应位置,其值如下所示:

APDL如何快速读取和导出大型数组4

两者一致。

二、数据读入

与数据写出不同,APDL的矩阵工具箱不能直接读取csv文件,需要进行一定的格式处理,水哥建议采用工具箱特有的MMF格式,MMF格式如下:

前面6行 为注释性语言,第7行指定数据导入数组时生成的行数和列数,接下来就是单列数据,按照先行后列的规律排序。

使用方法如下所示:

现假定需要读取一组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如何快速读取和导出大型数组8

 

在APDL中首先用*DMAT读取MMF格式的文件,然后用*EXPORT转为APDL数组即可。

APDL代码如下:

*DMAT,BB_MATH,D,import,MMF,testB
*export,BB_Math,APDL,BB

数据复核,点击Parameters>Array>Define,如下所示。

APDL如何快速读取和导出大型数组9

 

数据已经读取成功,现在复核单个数据。

dd=BB(15869,26)

*Status,DD

然后在matlab中获取该位置的数据,两者截图如下所示。

APDL如何快速读取和导出大型数组10

 

数值符合,说明读取成功!

欢迎搜索关注本站微信公众号:ANSYS结构院

欢迎给网站捐助,您的捐助是我坚持下去的动力!

© 版权声明
THE END
喜欢就支持一下吧
点赞0赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码

    暂无评论内容