ANSYS|数据格式化读写技术总结

技术背景

利用ANSYS进行有限元建模的工作可以分为两部分:

  • 在专业知识层面,对实际结构的有限元模型抽象;
  • 在编程技术层面,通过ANSYS的APDL语言建立模型,分析求解,后处理;

正确区分两类关系有助于抓住重点,以更清晰的思路解决问题。

而在APDL编程的问题又可以分为以下几个部分:

  1. 模型建立,包括材料定义,几何模型,有限元模型(/PREP7)
  2. 边界条件与荷载施加,模型求解(/SOLU)
  3. 后处理,位移内力提取,变形图、振型绘制(/POST1,/POST26)
  4. 数据的格式化读取和输出(I/O)

在实际工作中,对于小型问题求解,数据的读写操作可以通过手动处理解决;然而对于复杂问题,如复杂模型建立,迭代循环计算等等,数据的格式化批处理成为解决问题的控制性环节,因此有必要对数据读写技术数量掌握。

本文仅对数组化数据的读写进行总结,涉及*VREAD*VWRITE函数。

数据读取

数据类型及操作步骤

常用数据类型是指*VREAD支持的数组数据,在实际操作中往往三种形式使用:

  • 行向量
  • 列向量
  • 矩阵

一般的小批量参数输入更常用行列向量,即一维数组,因而调用*VREAD一维简化形式,减小了操作的复杂性。

数据读取需要三个步骤:

  • 定义数据文件
  • 定义数组变量
  • 文件数据,变量赋值

向量数据读取

读取数据前首先要定义txt数据文件,txt中行列数据的格式为:行数据以逗号分隔(英文),列数据以断行分隔,如图 1。为了方便,一般一类数据放在一个文件最佳。非标准格式的数据读取可能出错。

ANSYS|数据格式化读写技术总结_第1张图片
行类数据在txt文件的格式标准示例

有了数据文件,在读取前还需定义数组变量用于存储数据。读取以上行向量的一维数组如表 1所示。

表 1 一维数组定义

*DIM,Par,Type,IMAX,JMAX,KMAX,Var1,Var2,Var3,CSYSID
    ! Defines an array parameter and its dimensions.
        Par - parameter
        Type - Array type : ARRAY(default),ARR4,CHAR,TABLE,TAB4,STRING
        IMAX - Extent of first dimension (row)
*DIM,MYDATA,,1,5  ! 1行5列数组

下一步通过VREAD函数将txt文件的数据赋值到数组变量,如表 2。VREAD具体用法可以很复杂,在此处我们仅需要考虑的参数有:

  • MYDATA(1,1) - 数组变量及赋值起点
  • DATA,TXT – 数据文件及扩展名
  • JIK – 读取顺序,此处表示先行后列,对于列数据为IJK
  • 5,1 – 数组赋值范围(J:1-5,I:1-1),此处需谨慎,具体参考help文件
  • (5F10.0) – 每行读取的格式,5个数值,10个字符宽度,小数点取0位

表 2 一维数组读取

*VREAD,MYDATA(1,1),DATA,TXT,,JIK,5,1
 (5F10.0)

矩阵数据读取

矩阵数据读取的规范实际上就是行类数据规范的综合,需要注意的数据读取顺序和赋值范围的参数定义,读取方向的定义错误可能导致读入原始数据的转置矩阵。

矩阵数据格式
矩阵数据格式

表 3 矩阵读取

*DIM,MYDATA,,4,3
*VREAD,MYDATA(1,1),DATA3,TXT,,JIK,3,3
(3F10.0)

数据输出

数据输出操作步骤

数据的输出格式实质上只有一种表格化的txt文件,可以任意指定文件扩展名,以便后续处理的便利。

基本操作步骤有:

  • 指定输出数据文件(filename.ext)并打开
  • 指定要输出的数据变量,定义一行的数据输出格式
  • 关闭数据文件

以上步骤需要注意两点,

  • 3成对出现,在编程性的文件I/O操作及数据库操作中,这是一种最基本的处理流程,保证内存的正确操作,不熟悉数据库概念的朋友需格外注意;
  • 数据的输出是以“一行数据”为基准的,故列数据及矩阵数据的输出本质上只是多行数据的连续输出,故下一节仅探讨行数据的输出。

行数据的输出

行数据的输出示例如表 4,在*VWRITE后列出第一行输出的数据,即MYDATA在第一行的五个元素,在其后的格式定义中给出各数据的格式及空格定义,没有空格和间距的数据文件是难以阅读的。

表 4 行数据的输出

*CFOPEN,RESULT,TXT
*VWRITE,MYDATA(1,1),MYDATA(1,2),MYDATA(1,3),MYDATA(1,4),MYDATA(1,5)
(F10.0,'    'F10.0,'    'F10.0,'    'F10.0,'    'F10.0)
*CFCLOS

总结

数据的I/O操作是一个相对规程化又琐碎的工作,在学习的初期并不显得重要,但其控制性作用随着处理问题的复杂性而相应提升。对于这样的常规而又琐碎的处理过程,如果每次遇到就诉诸度娘或help不失为一种临时解决方案,但长期下来耗费的精力和时间是不可忽视的。

我的心得的是,要掌握数据I/O操作技术为我所用,必须在练习中掌握,而且应该从最简单示例——行向量数据的读写做起。简化问题,分解步骤,才能专注于关键环节,或说“天下大事必成于细,天下难事必成于易”。

此外,最好将典型的数据读写代码写成标准化模板如,以便随时套用。本文代码详见附件DataTest。

ANSYS|数据格式化读写技术总结_第2张图片
数据读写标准模块

你可能感兴趣的:(ANSYS|数据格式化读写技术总结)