文档库 最新最全的文档下载
当前位置:文档库 › 用于在Abaqus中提取结点力的Python程序

用于在Abaqus中提取结点力的Python程序

#coding=utf-8
from abaqus import *
from abaqusConstants import *
from odbAccess import *
import numpy as np

OdbFilePath = 'E:\SD2014\TEST\'
#OdbFileName = 'TEST.odb'
#OdbFile = OdbFilePath + OdbFileName
OdbFile='E:\SD2014\TEST\TEST.odb'
outfilename = OdbFilePath + 'STRESS.txt'
nodesetname='NSET-SZ'
#intancename='PART-1-1' #如采用默认的instance, 请屏蔽此行.

#打开ODB文件
Odb = odbAccess.openOdb[OdbFile]
if not intancename: intancename = Odb.rootAssembly.instances.keys()[-1]
nodeset = Odb.rootAssembly.instances[intancename].nodeSets[nodesetname]
lastStep = Odb.steps.keys()[-1]
lastFrame = Odb.steps[lastStep].frames[-1]

# 提取YY方向应力, 如需要XX或其它方向应力, 可更改x.data[0]或其它
stress_field = lastFrame.fieldOutputs['S']
stress_field_nodset = stress_field.getSubset(region=nodeset, position=ELEMENT_NODAL)
nset_val = stress_field_nodset.values
stress_data = map(lambda x:[x.nodeLabel, x.data[2]], nset_val)

# 如果要提取最大等效应力或最大主应力, 请解开如下三行屏蔽
#nset_val = stress_field_nodset.getScalarField(invariant=MISES).values
#nset_val = stress_field_nodset.getScalarField(invariant=MAX_INPLANE_PRINCIPAL).values
#stress_data = map(lambda x:[x.nodeLabel, x.data], nset_val)

# 平均各节点的应力. 由于ELEMENT_NODAL输出的为单元节点值,故一个节点上会有多个应力值, 故需要进行平均.
stress_data_dict = {}
for sd in stress_data:
nodeLabel, data = sd
if nodeLabel not in stress_data_dict: stress_data_dict[nodeLabel]=[]
stress_data_dict[nodeLabel].append(data)

new_stress_data = sorted([[x, np.mean(stress_data_dict[x])] for x in stress_data_dict], key=lambda x:x[2])

# 将节点号和应力值写入文件
outfile = open(outfilename, 'w')
for da in new_stress_data:
print >>outfile, "%10d, %20.9f " % (da[0], da[1])
outfile.close()

#如果要写出各节点的坐标请打开如下如下引号屏蔽掉的
'''
# 提取节点集各节点编号及坐标
coords = map(lambda x:[https://www.wendangku.net/doc/b08774290.html,bel, x.coordinates], nodeset.nodes)
coords_dict= {};
for c in coords: coords_dict[c[0]] = c[1]
new_stress_data = sorted([[x, np.mean(stress_data_dict[x]), coords_dict[x][0], coords_dict[x][1], coords_dict[x][2]] for x in stress_data_dict], key=lambda x:x[0])
outfile = open(outfilename, 'w')
for da in new_stress_data:
print >>outfile, "%10d, %20.9f, %20.9f , %20.9f, %20.9f" % (da[0], da[1], da[2], da[3], da[4])
outfile.close()
'''

相关文档