python提取abaqus中ODB文件的场信息

如何提取abaqus中ODB文件的场信息,下面以位移场为例展开描述,这个需要简单讲解下,看完讲解再看源码。
1、解码
这面这行是文件中必须要有的,不能删掉,不然无法进行解码,会报错

# -* - coding:UTF-8 -*-

2、读取ODB及加载步
这里openOdb函数使来自 odbAccess ,所以我们需要引入库

from odbAccess import*# 打开odb的库

下面读取路径自己拟定,一般是在你设置的工作路径下,你可以复制到其他文件夹下,但是注意的是必须是英文路径,然后是读取加载步,一般我们做强度折减会有加载重力场合折减场,我这里读取的是折减场,‘Reduce’是我在建模的时候设置的加载步名称,需要对上,如果不记得查看inp文件就知道了,如下图
在这里插入图片描述
在这里插入图片描述

odb=openOdb(path='Job-1.odb')# 读取odb
step1=odb.steps['Reduce']# 读取odb.折减用Load和Reduce

3、选择需要读取的时间
在这里插入图片描述
我们想查看多少格式件我们可以通过查看step1.frames的长度,或者直接查看上图的数字就可以,我们一般只需要看最后的结果所以这里用的是step1.frames[-1]

len(step1.frames)

4、读取场
我是画的二维剖面,所以只有x、y,如果是三维Z方向的是v.data[2]

for v in displacementValues_last:#这里保存最后一步的位移场
    DISP.append([v.nodeLabel,v.data[0],v.data[1]])# 节点编号,X位移,Y位移,Z位移

5、保存我们场变量
这里要注意,不要放在我们的模型的工作目录下,是无法保存的。

with open('E:\\abaqus_field\\field.txt', 'w') as f:
    for i in DISP:
        i=(','.join(str(j) for j in i))
        f.write(str(i) + '\n')

保存结果
第一列是节点需要,后面分别是x、y方向的位移数字
在这里插入图片描述
6、最后展示下提取的结果和在abaqus上的结果云图
好像形状除了问题,可能是我提取的坐标存在问题,后续还需要进行修正
重点注意
最后行成的代码文件要在abaqus中的script run中运行,这个文件要放在英文路径下,不然找不到。
在这里插入图片描述在这里插入图片描述

完成代码

#!/user/bin/python
# -* - coding:UTF-8 -*-
# 功能:读取变形位移

import numpy as np# 可输出txt文件
from odbAccess import*# 打开odb的库
import os
import sys

odb=openOdb(path='Job-1.odb')# 读取odb
step1=odb.steps['Reduce']# 读取odb.折减用Load和Reduce

firstFrame=step1.frames[0]# 第一帧
lastFrame=step1.frames[-1]# 最后一帧 # 读取odb.step.frames

# 第一帧
displacement_first=firstFrame.fieldOutputs['U'] # 读取odb.step.frames.fieldOutputs
displacementValues_first=displacement_first.values# 读取odb.step.frames.fieldOutputs.values

# 最后一帧
displacement_last=lastFrame.fieldOutputs['U']# 读取odb.step.frames.fieldOutputs
displacementValues_last=displacement_last.values# 读取odb.steps.frames.fieldOutputs.values

# txt文件导出
DISP = []
for v in displacementValues_last:#这里保存最后一步的位移场
    DISP.append([v.nodeLabel,v.data[0],v.data[1]])# 节点编号,X位移,Y位移,Z位移
    #DISP.append(v.data)# X位移,Y位移,Z位移
    # print DISP
# np.savetxt('DISP.txt',DISP)
with open('E:\\abaqus_field\\field.txt', 'w') as f:
    for i in DISP:
        i=(','.join(str(j) for j in i))
        f.write(str(i) + '\n')
odb.close

猜你喜欢

转载自blog.csdn.net/self_Name_/article/details/127472586