当我们需要根据现有的理论知识,采用MATLAB等软件对有限元计算结果进行处理时,可以采用Python提取ABAQUS数据。在采用Python对ABAQUS结果提取之前,首先我们要了解ABAQUS odb文件结构。
ABAQUS odb文件结构
实例:(采用ABAQUS 2017调试)
(1) 查询ABAQUS数据结构
#!/user/bin/python
# -*-coding:UTF-8 -*-
#***************************************
#** 程序提取场变量输出 **
#** 主要为梁单元应力、内力和节点位移 **
#***************************************
#导入模块
fromodbAccess import*
fromabaqusConstants import*
importsys
importos
odb =openOdb(path='C:\\Temp\\shangtest.odb')
cpFile=open('artlcF1.txt','w')
#----------------------------------------------------------------------------------------
#创建变量topCenter,得到单元集CENT
topCenter=odb.rootAssembly
printtopCenter
(2)采用Python提取位移
fromodbAccess import*
fromabaqusConstants import*
importos
myodb=openOdb(path='C:\\Temp\\jieguosuchu.odb')
RS=myodb.steps['Step-3'].frames[1].fieldOutputs['U'].values
cpFile=open('distance.txt','w')
for i inRS :
cpFile.write('%d %7.4f %7.4f\n' % (i.nodeLabel,i.data[0],i.data[1]))
else:
cpFile.close()
(3)采用Python提取mises应力
importos
myodb=openOdb(path='Job-1.odb')
cpFile=open('artlcF1.txt','w')
RF=myodb.steps['Step-1'].frames[1].fieldOutputs['S'].values
for i inrange(len(RF)) :
cpFile.write('%s\n' % (RF[i].mises))
else:
cpFile.close()
(4)提取节点集合上的位移
fromodbAccess import*
fromabaqusConstants import*
importsys
importos
odb =openOdb(path='C:\\Temp\\shangtest.odb')
#创建变量lastFrame,得到载荷步Step-1的最后一帧
lastFrame= odb.steps['Step-3'].frames[-1]
# Createa variable that refers to the displacement 'U'
# in thelast frame of the first step.
#创建变量displacement ,得到最后一帧的位移场数据
displacement= lastFrame.fieldOutputs['U']
#创建变量center,得到节点集PUNCH
center =odb.rootAssembly.instances['SHANGBIAN-1'].\
nodeSets['SHANGTEST']
#创建变量centerDisplacement,得到region center的位移场数据
centerDisplacement= displacement.getSubset(region=center)
#输出各种信息,该节点集只有一个节点
for v incenterDisplacement.values:
print 'Position = ', v.position,'Type =',v.type
print 'Node label = ', v.nodeLabel
print 'X displacement = ', v.data[0]
print 'Y displacement = ', v.data[1]
print 'Displacement magnitude =',v.magnitude
odb.close()
#----------------------------------------------------------------------------------------
(5)提取节点集合上的力
#!/user/bin/python
# -*-coding:UTF-8 -*-
#***************************************
#** 程序提取场变量输出 **
#** 主要为梁单元应力、内力和节点位移 **
#***************************************
#导入模块
fromodbAccess import*
fromabaqusConstants import*
importsys
importos
odb =openOdb(path='C:\\Temp\\shangtest.odb')
cpFile=open('artlcF1.txt','w')
#----------------------------------------------------------------------------------------
#创建变量topCenter,得到单元集CENT
topCenter=odb.rootAssembly.instances['DIBIAN-1'].elementSets['XIAJIECHUTEST']
#创建变量stressField,得到位移场数据
stressField= odb.steps['Step-3']
stressField= odb.steps['Step-3'].frames[3].fieldOutputs['S']
#创建变量field,得到该单元集的积分点的数据
field =stressField.getSubset(region=topCenter,
position=INTEGRATION_POINT, elementType ='CPS4R')
#创建变量fieldValues,得到field的数值数据
fieldValues= field.values
#循环输出单元号,单元上的积分点号以及积分点的应力分量
for v infieldValues:
# cpFile.write(v.elementLabel,)
# cpFile.write ('Integration Point = ',v.integrationPoint)
# Foreach tensor component.
for component in v.data:
# Printusing a format. The comma at the end of the
# printstatement suppresses the carriage return.
cpFile.write ('%-15.5f' % component)
# Aftereach tuple has printed, print a carriage return.
cpFile.write('\n')
cpFile.close()
注意事项:
(1)在ABAQUS CAE中运行Python文件;
(2)A=odb.steps['Step-1'].frames和B=odb.steps['Step-1'].frames[-1]的理解
A是Python的一个列表,B是表示列表A中最后一个元素
例如:以下程序输出的结果是一个列表,元素个数(Step-1中增量步数目+1)
stressField= odb.steps['Step-1']
printstressField.frames
输出为:
(2) Python 多行注释功能
例如:
'''
Aftereach tuple has printed, print a carriage return.
cpFile.write('\n')
cpFile.close()
'''
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有