Python脚本助力:提取ABAQUS结果数据

背景介绍

  调研发现,传统结构设计过程中需要依赖工程师的理论知识和工程经验,针对具体问题提出初步设计方案,后续通过多次的迭代优化,直到满足要求为止。这种传统设计方法不仅工作量大,效率低,企业还需要投入巨量的成本。因此,我们可以通过优化算法 + 有限元模拟的方式,在加工制作阶段采用优化后的模型参数,该方法能大大减少迭代的次数,缩短产品从立项到上市的周期。

  我们可以将python程序作为ABAQUS和优化算法之间的桥梁,通过编写脚本提取有限元软件的计算结果,作为参数传递给优化算法。其中,在采用Python对ABAQUS结果提取之前,首先我们要了解ABAQUS odb文件结构,具体如下图所示:


  ABAQUS odb文件结构
 

实例展示(采用ABAQUS 2017调试)

1、查询ABAQUS数据结构

# -*-coding:UTF-8 -*-
#***************************************
#**         程序提取场变量输出        **
#** 主要为梁单元应力、内力和节点位移  **
#***************************************
#导入模块
from odbAccess import*
from abaqusConstants import*
import sys
import os
odb =openOdb(path='C:\\Temp\\shangtest.odb')
cpFile=open('artlcF1.txt','w')
#----------------------------------------------------------------------------------------
#创建变量topCenter,得到单元集CENT
topCenter=odb.rootAssembly
print topCenter

2、采用Python提取位移

from odbAccess import*
from abaqusConstants import*
import os
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应力

import os
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、提取节点集合上的位移

from odbAccess import*
from abaqusConstants import*
import sys
import os
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、提取节点集合上的力

# -*-coding:UTF-8 -*-
#***************************************
#**         程序提取场变量输出        **
#** 主要为梁单元应力、内力和节点位移  **
#***************************************
#导入模块
from odbAccess import*
from abaqusConstants import*
import sys
import os
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()

注意事项:

  • 在ABAQUS CAE中运行Python文件;
  • A=odb.steps[‘Step-1’].frames和B=odb.steps[‘Step-1’].frames[-1]的理解:A是Python的一个列表,B是表示列表A中最后一个元素


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空