Bootstrap

ANSYS APDL学习(12):如何将ansys求解后的数据(点位移/应力/应变等)导出到txt文件

1 代码和结果

1.1 代码块

       开头先放上我自己整理的代码

!========================================================
! 目的:将关键点KP在受力后的位移,应变和,KP受力后的应力输出到TXT文件
! 参数:
! 	KPSTRAIN数组-存储KP受载后的坐标,
! 		应该是KP数量行7列,第一列是编号,X,Y,Z,XY,YZ,XZ
! 	KPDIS数组-存储KP受载后的位移,
! 		应该是KP数量行4列,第一列是编号,xyz三个方向
! 	KPSTRESS数组-存储KP受载后的应力
!		应该是KP数量行4列,第一列是编号,xyz三个方向
! 输出:
!	EX72ANSYSKPSTRAIN.TXT - 这是用来保存ANSYS 存储KP受载后的坐标,下次可以直接加载
!	EX72ANSYSKPDIS.TXT-这是用来ANSYS保存位移的文件,下次ANSYS可以直接加载
!	EX72ANSYSKPSTRESS.TXT-这是用来ANSYS保存应力的文件,ANSYS可以直接加载
!	EX72KPSTRAIN.TXT - 这是ANSYS将存储KP受载后的坐标保存到TXT文件,有利于matlab读取的
!	EX72KPDIS.TXT - 这是ANSYS将kp位移数组保存到TXT文件,有利于matlab读取的
!	EX72KPSTRESS.TXT - 这是ANSYS将KP应力保存到TXT文件,有利于matlab读取的
! 注意:
!	超过kp数量的node应力会报错 Requested data is not stored for node 6200. line=*Get, NODESTR,NODE,J,S,X无效
!=========================================================

!========= 定义一个参数获取KP数量
/PREP7
*DIM, KPNUM, ARRAY, 1, 1			! 定义一个参数专门存KP数量
*GET, KPNUM(1,1), KP,  0, NUM, MAXD	! 存储KP的数量
FINISH

/POST1
! ========= 定义应变数组并赋值,然后存储为ANSYS读取文件
*DIM, KPSTRAIN, ARRAY,KPNUM(1,1),7	! 定义位移数组,
*DO, I, 1, KPNUM(1,1)
	*SET, KPSTRAIN(I,1,1),I	! 点编号
	*GET, KPSTRAIN(I,2), NODE, I, EPTO, X	
	*GET, KPSTRAIN(I,3), NODE, I, EPTO, Y	
	*GET, KPSTRAIN(I,4), NODE, I, EPTO, Z	
	*GET, KPSTRAIN(I,5), NODE, I, EPTO, XY	
	*GET, KPSTRAIN(I,6), NODE, I, EPTO, YZ	
	*GET, KPSTRAIN(I,7), NODE, I, EPTO, XZ
*ENDDO
PARSAV, ALL, 'EX72ANSYSKPSTRAIN', 'TXT', ' '	! 保存为给ANSYS读取的文件

! =========定义位移数组并赋值,然后存储为ANSYS读取文件
*DIM, KPDIS, ARRAY,KPNUM(1,1),4	! 定义位移数组,292472是list node看出的数量
*DO, I, 1, KPNUM(1,1)
	*SET, KPDIS(I,1,1),I	! 点编号
	*GET, KPDIS(I,2), NODE, I, U, X	
	*GET, KPDIS(I,3), NODE, I, U, Y	
	*GET, KPDIS(I,4), NODE, I, U, Z	
*ENDDO
PARSAV, ALL, 'EX72ANSYSKPDIS', 'TXT', ' '	! 保存为给ANSYS读取的文件

! =========定义应力数组并赋值,然后存储为ANSYS读取文件
*DIM, KPSTRESS, ARRAY, KPNUM(1,1),4	! 定义应力
*DO, J, 1, KPNUM(1,1)
	*SET, KPSTRESS(J,1,1),J	! 点编号
	*GET, KPSTRESS(J,2), NODE, J, S, X
	*GET, KPSTRESS(J,3), NODE, J, S, Y
	*GET, KPSTRESS(J,4), NODE, J, S, Z
*ENDDO
PARSAV, ALL, 'EX72ANSYSKPSTRESS', 'TXT', ' '	! 保存为给ANSYS读取的文件

FINISH

/REPLO	!????是否要加这一行

! =========将数组保存至TXT文件当中
*CREATE,ansuitmp
*CFOPEN, 'EX72KPSTRAIN', 'TXT', ' '		! ( 在(7F12.6)之间不可以加注释的)
*VWRITE, KPSTRAIN(1,1), KPSTRAIN(1,2), KPSTRAIN(1,3),KPSTRAIN(1,4), KPSTRAIN(1,5), KPSTRAIN(1,6),KPSTRAIN(1,7),,,,,,
(7F12.6)
*CFCLOS
*END
/INPUT, ansuitmp

*CREATE,ansuitmp
*CFOPEN, 'EX72KPDIS', 'TXT', ' '		! ( 在(4F12.6)之间不可以加注释的)
*VWRITE, KPDIS(1,1), KPDIS(1,2), KPDIS(1,3), KPDIS(1,4),,,,,,	
(4F12.6)
*CFCLOS
*END
/INPUT, ansuitmp

*CREATE,ansuitmp
*CFOPEN, 'EX72KPSTRESS', 'TXT', ' '		! ( 在(4F12.6)之间不可以加注释的)
*VWRITE, KPSTRESS(1,1), KPSTRESS(1,2), KPSTRESS(1,3),KPSTRESS(1,4),,,,,,	
(4F12.6)
*CFCLOS
*END
/INPUT, ansuitmp

FINISH


1.2 生成文件

在这里插入图片描述

1.3 txt文件后续处理

       可以用 MATLABTXT 文件中读取,读取代码可以参考 数据处理技巧(5):MATLAB 读取txt中的数据

1.4 解释

  1. 读取格式,比如**(3F12.4)**要根据读入的TXT内容进行修改,比如小数点位数为5,那么4就要更改为5;比如每次读取14位,那么12就要更改位14;如果每一行有4组数据,那么要3要更改位4
  2. 导出格式,比如**(3F12.4)**,表明 ANSYS 每一行一共输出三次数据,每次一共12个字符,其中4个是小数点位。

2 *GET 命令

2.1 介绍

       目的:将ANSYS的数据复制给数组,以便后续数组导出操作
       格式:GET, Par, Entity, ENTNUM, Item1, IT1NUM, Item2, IT2NUM
       应用:需要用
get*命令来将每一个关键点计算后的位移和应力赋值给数组

2.1.1 命令解释

       Par:
              被赋值的数组名称和行列,比如result(1,1)
       Entity:
              实体的关键词,有效关键词比如:NODE, ELEM, KP, LINE, AREA, VOLU , 等
       ENTUM:
              实体的数字或者标签,如果是0或者空格表示代表所有实体。
       Item1:
              特定项目的名称,具体需要查表
       IT1NUM:
              特定项目的数量,具体需要查表
       Item2, IT2NUM:
              第二套特定项目的名称和数量,具体查表。

2.1.2 注意

       *GET 返回一个值赋值给特性项目参数、一个参数或者用户自定的参数。项目是由关键字,标签和数量来确定的。用法可以参考 *SET 命令的介绍。
       举例: *GET (p. 782), A, ELEM, 5, CENT, X 返回第五个网格(element 5)的中心x坐标的值,赋值给参数A
       有相似函数 *VGET ,可以参考
       大多数项在计算后存储在数据库中,之后随时可用。项目根据它们通常首先定义或计算的位置分组。预处理数据常常不能反映剖面数据的计算值。不要使用 GET (p. 782) 从使用计算截面数据的单元(如梁或壳)获得数据。
       可以从以下几个方面找表格,发现
GET在每个处理器中都是有用的。
不同求解器

2.2 *GET 输出坐标帮助文档

       举例,以下表格可以获得,关键点 KP 在预处理时候的坐标 (x,y,z)
在这里插入图片描述
       在求解的项目中,没有关键点 kp 的选项,同样在 postprocessing 中也没有
在这里插入图片描述

2.2.1 *GET 输出点位移

       这个表解释了如何输出点位移
在这里插入图片描述
在这里插入图片描述

2.2.2 示例

       举例,将点位移赋值给数组的代码示例:

*GET, NODEDIS(1,1), NODE, 1, U, X		! 尝试输出第一个关键点在求解之后的位移
*GET, NODEDIS(1,2), NODE, 1, U, Y
*GET, NODEDIS(1,3), NODE, 1, U, Z

*GET, NODESTR(1,1), NODE, 1, S, X		! 尝试输出第一个关键点在求解之后的应力
*GET, NODESTR(1,2), NODE, 1, S, Y	
*GET, NODESTR(1,3), NODE, 1, S, Z	

       如何获得 NODE 在划分好网格之后的数量的代码示例:

NODE 数量获取的时候,是在/PREP7求解器中,所以要写成以下模样:
	/PREP7
	*DIM, NODENUM, ARRAY, 1,1 		! 定义一个参数专门存储NODE数量
	*GET, NODENUM(1,1), NODE, 0, NUM, MAXD		! MAXD表示已定义的NODE的数量的最大值

2.3 报错的解释

       有时候在将数据赋值给数组的时候,会收到警告如下:
在这里插入图片描述

2.4 想法

       Keypoint是最早输入 ANSYS 建模的点,node 是网格划分后的所有点(当然包括 keypoint )。所以假如 keypoint 点有 6217 个,那么 node 点中前 6217 个的点坐标和 keypoint 完全一样,说明 node6217 个点之后的点是另外插值得到的,只能在list页面看,但是没有保存下来,所以命令流无法读取。
       ANSYS存储应力应变之类的数据的时候,实际上只存储了 KEYPOINT的应力应变,其余的 node 数据都是通过 KEYPOINT 数据进行插值的。所以如果要查看应力应变数据,在 GUI 中通过 General Post -> Plot Result -> contour Plot -> Nodal Solu 选择一个,保证图像已经绘制出来(一定要先绘制)。然后 LIST -> Results -> Nodal Solution -> Nodal Solution -> Total mechanical stran 应变 -> von Mises total mechanical strain 这样就可以看到下图的 EPTO1/2/3/INT/EQV , 可以发现,在 list 页面中每一个 node 都有对应的数据,但是通过命令流给参数赋值的时候不是所有NODE都有应力应变数据的。
在这里插入图片描述
       相关想法已经在 ANSYS APDL学习(10):解释命令流报错requested data is not stored for node ___ .的原因与应对办法介绍了,这里就不再重复。
在这里插入图片描述

2.5 总结

       所以,要导出求解之后的数据,一共有两个方法:
              ①只导出ANSYS保存的结点数据,也就是kp关键点的个数,比如关键点有6217个,那么就导出node6217个点的应力和应变,这样不会报错。
              ② 如果需要全部结点node的数据,不能用命令流,否则会报错:requested data is not stored for node ___ . 所以要在GUI中手动先绘制图像 General Post -> Plot Result -> contour Plot -> Nodal Solu 选择一个,保证图像已经绘制出来**(一定要先绘制)。然后 LIST -> Results -> Nodal Solution -> Nodal Solution -> Total mechanical stran 应变 -> von Mises total mechanical strain。可以通过list应力、应变的页面,点击 FILE -> SAVE AS 然后直接将这个页面保存下来,可以用txt**方式打开。

       目前选择第一种,只导出KP的应力应变数据

3 生成文件结果

3.1 Kp位移输出结果

在这里插入图片描述

3.2 应变输出结果

在这里插入图片描述

3.3 Kp应力输出结果

       可能哪里出了问题?可能是**的地方,没有应力,所以没给它赋值的原因
在这里插入图片描述

4 本文末尾

           本来不想把这些内容放上来,一是这是我自己根据 Mechanical APDL Product 16.0 自己尝试出来的,有的网上没有,有的写的不全。二是这是我的部分笔记和记录,没有那么大的兴趣帮助别人毕业。
       但是还是有很多人问如何将ANSYS数据导出来,其实这不应该是我们日常工作中的问题,但是需要不懂的人花费大量的时间去查找。所以还是决定放出来。毕竟也就是一些写在帮助文件中,有时候会被忽略的内容。
同时,只有交流才能知道我在哪里有问题,尤其是后续使用的时候,发现导出的单元中点应变和点求解中的点应变的值不同,甚至同一个点在同一个单元的应变值都有两行不同的应变数据。这个我也还没有解决,只能等网友的帮忙了😂

5 参考资料

       《ANSYS Mechanical APDL Basic Analysis Guide》:有很多很实用的例子,推荐查阅
       《Ansys Mechanical APDL Command Reference》:如果专门搞ANSYS APDL的,强烈推荐下载,很好用。
       知乎:Ansys APDL 读取所有节点坐标及其应变值并写入文件:里面的命令流有涉及到如何给导出的txt中增加每一列的标题和补充信息,如果要导出的文件非常多,标题对信息的整理非常有帮助。
在这里插入图片描述

交流群信息

群名称:
ANSYS学习交流群
群 号:
522482340

;