本文记录后处理中,提取abaqus计算结果的python脚本
主要利用到abaqus中提供的odbAccess
接口
接口示意图如下

上述为关于odbAccess
接口的一个大概的总结
代码如下,该代码实现了提取计算结果中节点的x,y坐标以及部分位移、弯矩
from odbAccess import *
from textRepr import *
import os
print("nnn")
print("************ start script ***********")
print("current workding dir is ",os.getcwd())
odb = openOdb('Job-1-sss-tri.odb',readOnly=True)
instance = odb.rootAssembly.instances
all_instance_keys = odb.rootAssembly.instances.keys()
print("all instance name is ",all_instance_keys)
print("instance key 0 is selected to used in next step ")
nodes = odb.rootAssembly.instances[all_instance_keys[0]].nodes
elements = odb.rootAssembly.instances[all_instance_keys[0]].elements
step_keys = odb.steps.keys()
print("all step names are ",step_keys)
print("step -1 is selected in the next step")
stepi = odb.steps[step_keys[-1]]
frames = stepi.frames
print(" frame's lenght is ",len(frames))
print("the last frame is selected!!!")
frame = frames[-1]
outputs_names = frame.fieldOutputs.keys()
print("all output names are ",outputs_names) ## ['AC YIELD', 'CF', 'CM', 'E', 'PE', 'PEEQ', 'PEMAG', 'RF', 'RM', 'S', 'SF', 'SM', 'U', 'UR']
print("displacement of instance {} is choosen in the next step".format(all_instance_keys[0]))
displacements = frame.fieldOutputs["U"].getSubset(region = instance[all_instance_keys[0]])
SM = frame.fieldOutputs["SM"].getSubset(region = instance[all_instance_keys[0]])
print("reading displacements")
node_x = []
node_y = []
node_w = []
node_SM1 = []
for value in SM.values:
# print(value.elementLabel,value.data)
node_SM1.append(value.data[0])
for value in displacements.values:
## value.nodeLabel the label of nodei
## value.data the disp of nodei
# print(value.nodeLabel,value.data)
index = value.nodeLabel
nd = nodes[index - 1]
coords = nd.coordinates
node_x.append(coords[0])
node_y.append(coords[1])
node_w.append(value.data[2])
import numpy as np
X = np.array(node_x)[:,None]
Y = np.array(node_y)[:,None]
W = np.array(node_w)[:,None]
SM1 = np.array(node_SM1)[:,None]
np.savetxt("G:\aba_workingdir\py_files\assess_odb_abaqus\X.txt",X)
np.savetxt("G:\aba_workingdir\py_files\assess_odb_abaqus\Y.txt",Y)
np.savetxt("G:\aba_workingdir\py_files\assess_odb_abaqus\W.txt",W)
np.savetxt("G:\aba_workingdir\py_files\assess_odb_abaqus\SM1.txt",SM1)
print("************ end script ***********")
abaqus打印信息如下
阅读原文