所需环境:
# -*- coding: utf-8 -*-
from odbAccess import *
import os
1.将所需读取的odb放入同一文件夹便于读取,提取所有以odb结尾的文件并拼接文件路径,确保odb文件可以被读取后进行后续步骤
odb_folder_path = '' # 替换为你的文件夹路径
# 获取文件夹内所有ODB文件
odb_files = [file for file in os.listdir(odb_folder_path) if file.endswith('.odb')]
print("scrpit begin")
# 遍历文件夹中的每个ODB文件
for odb_file in odb_files:
# 构建完整的ODB文件路径
odb_path = os.path.join(odb_folder_path, odb_file)
# 尝试打开ODB文件
try:
odb = openOdb(path=odb_path)
except Exception as e:
print("An error occurred while opening ODB file {}: {}".format(odb_file, e))
continue
2.提取所需读取的部件,分析步和数据
# 访问part-1-1部件
part_instance = odb.rootAssembly.instances['PART-1-1']#这里的部件名字可以替换为自己的
# 获取分析步骤'step-1'的最后一帧
last_frame = odb.steps['Step-1'].frames[-1]#一般需要的都是分析步最后一帧
# 检索位移数据
displacement = last_frame.fieldOutputs['U']
# 检索应力数据
stress = last_frame.fieldOutputs['S']
3.遍历结点或元素获取数据,这里注意,abaqus中不同数据有自己的关联对象,比如这里提取的U位移是与结点node相关联的,而S应力则是与元素element相关联的,如果遍历错误的对象是查询不到相关数据的。
#如果获取位移数据
for node in part_instance.nodes:
print(node.coordinates)
# 获取该节点的位移数据
displacement_at_node = displacement.getSubset(region=node).values
# 输出或保存位移数据
for value in displacement_at_node:
print("Node Label: {}, Displacement: {}".format(value.nodeLabel, value.data))
# 关闭ODB文件
odb.close()
#如果获取应力数据
for element in part_instance.elements:
# 获取该单元的应力数据
stress_at_element = stress.getSubset(region=element).values
# 计算单元的平均应力
avg_stress = sum([value.data for value in stress_at_element]) / len(stress_at_element)
# 写入单元的平均应力数据到文件
f.write("Element Label: {}, Average Stress: {}\n".format(element.label, avg_stress))
# 关闭ODB文件
odb.close()
4.完成代码部分,打开abaqus,文件->运行脚本,选择写好的.py文件即可运行