利用Python對Abaqus進(jìn)行后處理結(jié)果輸出
利用Python對Abaqus進(jìn)行后處理結(jié)果輸出
1 概述
在Abaqus的二次開發(fā)過程中,通常需要采用Python腳本語言將Abaqus的計(jì)算結(jié)果進(jìn)行輸出,然后再進(jìn)行處理。Python使Abaqus的內(nèi)核語言,使用較為方便,Abaqus運(yùn)行Python語言的方式有多種,可以直接命令窗口,也可以讀入腳本,還可以采用類似批處理的方式。
本次以一個(gè)例子細(xì)說Python語言在Abaqus后處理中的應(yīng)用,模型的計(jì)算結(jié)果云圖如圖1所示。

圖1 計(jì)算結(jié)果
2 輸出所有節(jié)點(diǎn)的Mises應(yīng)力
直接上Python代碼:
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 in range(len(RF)) :
cpFile.write('%10.3F\n' % (RF[i].mises))
else:
cpFile.close()
#引入模塊,因?yàn)樾枰蜷_結(jié)果文件
#打開結(jié)果文件,并復(fù)制給變量myodb
#打開一個(gè)txt文件
#將輸出場賦值給RF
#循環(huán)語句,向txt文件逐行寫入mises應(yīng)力
Abaqus的結(jié)構(gòu)層次分的很細(xì),比如結(jié)果文件下分如下:

圖2 Model data
使用過Abaqus的都知道step表示載荷步,frame表示載荷子步,因而在讀取Mises應(yīng)力時(shí)需要詳細(xì)地指定輸出哪一步的應(yīng)力,而應(yīng)力結(jié)果是輸出場數(shù)據(jù)(fieldOutput)的中一種,需要指定是何種應(yīng)力,程序才知道怎么讀取并寫入。
由于Abaqus里面涉及的變量特別多,通常很難記清楚那一項(xiàng)下面都有哪些量可以調(diào)用,此時(shí)比較好的方式是采用print 函數(shù)查看,例如查看myodb.steps['Step-1'].frames[1].fieldOutputs下面有哪些變量可以調(diào)用,在窗口輸入:
Print myodb.steps['Step-1'].frames[1].fieldOutputs
顯示:
{'CF': 'FieldOutput object', 'E': 'FieldOutput object', 'RF': 'FieldOutput object', 'S': 'FieldOutput object', 'U': 'FieldOutput object'}
各種不同的結(jié)果,包括位移、應(yīng)力和支反力等等,因此可以知道通過如下的方式讀取應(yīng)力:
myodb.steps['Step-1'].frames[1].fieldOutputs ['S']
此時(shí)讀取的信息特別多,我們想要的是其中的數(shù)值信息,因此可以:
myodb.steps['Step-1'].frames[1].fieldOutputs ['S'].values
通過此句能夠讀取所有節(jié)點(diǎn)的應(yīng)力數(shù)據(jù),輸出其中一個(gè):
Print myodb.steps['Step-1'].frames[1].fieldOutputs ['S'].values[1]
顯示:
({'baseElementType': 'CPS3', 'conjugateData': None, 'conjugateDataDouble': 'unknown', 'data': array([-4.9620509147644, -0.408748656511307, 0.0, 1.02521646022797], 'f'), 'dataDouble': 'unknown', 'elementLabel': 2, 'face': None, 'instance': 'OdbInstance object', 'integrationPoint': 1, 'inv3': -5.08271312713623, 'localCoordSystem': None, 'localCoordSystemDouble': 'unknown', 'magnitude': None, 'maxInPlanePrincipal': -0.188559949398041, 'maxPrincipal': 0.0, 'midPrincipal': -0.188559949398041, 'minInPlanePrincipal': -5.1822395324707, 'minPrincipal': -5.1822395324707, 'mises': 5.09057950973511, 'nodeLabel': None, 'outOfPlanePrincipal': 0.0, 'position': INTEGRATION_POINT, 'precision': SINGLE_PRECISION, 'press': 1.79026651382446, 'sectionPoint': None, 'tresca': 5.1822395324707, 'type': TENSOR_2D_PLANAR})
輸出的信息特別多,但是可以看到有mises這一項(xiàng)。
最終得到的txt文件如下:

圖3 txt文件
3 輸出所有節(jié)點(diǎn)的位移
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()
同樣的,輸出位移場U,txt寫入時(shí)第一列是節(jié)點(diǎn)編號,第二列和第三列分別是x方向位移和y方向位移。
如上面代碼中的紅色標(biāo)記,有nodeLable和data兩項(xiàng),nadeLable使節(jié)點(diǎn)編號,data則是位移數(shù)據(jù)。
在窗口輸入代碼:
Print myodb.steps['Step-1'].frames[1].fieldOutputs['U'].values[1].data
顯示:
[ -1.42043456e-03 8.08681193e-07]
分別是兩個(gè)方向的位移。
再通過data[0]和data[1]讀取這兩個(gè)位移值,最終得到的txt文件如圖4。

圖4位移輸出txt文件
除了讀取結(jié)果數(shù)據(jù),還可以再次基礎(chǔ)上做一些運(yùn)算,同樣的輸出結(jié)果最大值則只需要寫一個(gè)遍歷,比較前后數(shù)據(jù)大小即可找到最大值,這和其他任何語言都是一樣。
文中對輸出格式?jīng)]有解釋,可以通過其他書籍和資料了解。
工程師必備
- 項(xiàng)目客服
- 培訓(xùn)客服
- 平臺客服
TOP




















