Python提取Abaqus結果數據


1. Python提取Abaqus結果數據

1.1 Python選擇節點和單元

  1. getByBoundingBox()
  2. getByBoundingCylinder()
  3. getByBoundingSphere()
    可用tab鍵查找函數的變量

通過位置選擇節點

p = mdb.models['Thermal2D-L'].parts['Part-2']
n = p.nodes
nlist = n.getByBoundingBox(-100,-100,0,100,100,0)#通過矩形來框選節點
p.Set(nodes=nlist, name='Set-44')#創建set

通過位置選擇單元

p = mdb.models['Thermal2D-L'].parts['Part-2']
e = p.elements
elist = e.getByBoundingBox(-0.2,-12.6,-0.1,0.2,12.6,0.1)
p.Set(elements=elist,name='Set-5')

注:選中節點的單元都會被選中

獲取節點的label

p = mdb.models['Thermal2D-L'].parts['Part-2']
e = p.elements
elist = e.getByBoundingBox(-0.2,-12.6,-0.1,0.2,12.6,0.1)
e1 = elist[1]
elabel1 = e1.label

1.2 Python提取結果

結構都存儲在*.odb文件中,可以采用python直接進行讀取

提取位移

from odbAccess import*
from abaqusConstants import*
import os

myodb=openOdb(path=r'H:\Abaqus\MultiScaleMeshSize\Job-2D-SubThermal.odb')
RS=myodb.steps['Step-1'].frames[1].fieldOutputs['U'].values
cpFile=open('distance.txt','w')
for i in RS:
    cpFile.write('%d %7.4f %7.4f\n' % (i.nodeLabel,i.data[0],i.data[1]))
    
else:
    cpFile.close()
    
# frames為第幾個增量
# fieldOutputs['U']結果類型,位移

提取mises應力

RF=myodb.steps['Step-1'].frames[1].fieldOutputs['S'].values
RF0 = RF[0]
mises = RF0.mises #mises應力
data = RF0.data #S11,S22,S33,S12
eleType = RF0.baseElementType #單元類型
eleLabel = RF0.elementLabel
maxPrincipal = RF0.maxInPlanePrincipal #最大平面主應力,可參考具體

獲取節點集合上的位移

from odbAccess import*
from abaqusConstants import*
import sys
import os

odb=openOdb(path=r'H:\Abaqus\MultiScaleMeshSize\Job-2D-Thermal-Displace.odb')

lastFrame= odb.steps['Step-1'].frames[-1]#創建變量lastFrame,得到載荷步Step-1的最后一幀
displacement= lastFrame.fieldOutputs['U']#創建變量displacement,得到最后一幀的位移場數據

#創建變量center,得到節點集PUNCH
#其中PART-2-1為裝配體中的幾何體,SET-1為創建的集合
center =odb.rootAssembly.instances['PART-2-1'].nodeSets['SET-1']

#創建變量centerDisplacement,得到region center的位移場數據
centerDisplacement= displacement.getSubset(region=center)

#輸出各種信息,該節點集只有一個節點
for v in centerDisplacement.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()

獲取單元的應力值

from odbAccess import*
from abaqusConstants import*
import sys
import os

# cpFile=open('artlcF1.txt','w')
odb=openOdb(path=r'H:\Abaqus\MultiScaleMeshSize\Job-2D-Thermal-Displace.odb')

# topCenter =odb.rootAssembly.instances['PART-2-1'].nodeSets['SET-1']#創建變量topCenter

topCenter =odb.rootAssembly.instances['PART-2-1'].elementSets['SET-4']
#創建變量 stressField,得到位移場數據
stressField= odb.steps['Step-1'].frames[-1].fieldOutputs['S']

field =stressField.getSubset(region=topCenter)

#創建變量 fieldValues,得到field的數值數據
fieldValues= field.values

#輸出label值
for v in fieldValues:
    print(v.elementLabel)

# 輸出應力值
for v in fieldValues:
    print(v.mises)

# cpFile.write ('%-15.5f' % component)
# cpFile.close()

獲取節點的溫度值

from odbAccess import*
from abaqusConstants import*
import sys
import os

odb=openOdb(path=r'H:\Abaqus\MultiScaleMeshSize\Job-2D-Thermal-Displace.odb')

lastFrame= odb.steps['Step-1'].frames[-1]#創建變量lastFrame,得到載荷步Step-1的最后一幀
displacement= lastFrame.fieldOutputs['NT11']#創建變量displacement,得到最后一幀的位移場數據

#創建變量center,得到節點集PUNCH
#其中PART-2-1為裝配體中的幾何體,SET-1為創建的集合
center =odb.rootAssembly.instances['PART-2-1'].nodeSets['SET-1']

#創建變量centerDisplacement,得到region center的位移場數據
centerDisplacement= displacement.getSubset(region=center)

#輸出各種信息,該節點集只有一個節點
for v in centerDisplacement.values:
    print 'Node label = ', v.nodeLabel
    print 'templabel= ', v.data
  

1.3 Python結果提取方法

  1. 可以直接提取所有的單元或者幾何節點的值
  2. 首先獲取節點或者單元的label值,然后再讀取響應的結果
  3. 在求解先,先建立要提取結果的set集合,然后在結果中按照set進行提取

1.4 單元面積計算方法

  1. 首先獲取組成單元的節點
  2. 然后獲取節點的坐標
  3. 通過節點坐標來計算面積
p = mdb.models['Thermal2D-L'].parts['Part-2']
n = p.nodes
e = p.elements

e1 = e[1]
nodeIndexList = e1.connectivity

# 獲取節點的坐標
PointList = []
for Index in nodeIndexList:
    temp = n[Index].coordinates
    PointList.append(temp)
    
# 計算多邊形的面積

參考資料

【1】Abaqus Python getByBoundingBox command
【2】Python提取Abaqus結果數據
【3】Abaqus 6.14 幫助文檔


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM