利用Python對Abaqus進(jìn)行后處理結(jié)果輸出

利用PythonAbaqus進(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所示。

9.1.png

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é)果文件下分如下:

9.2.png

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文件如下:

9.3.png

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()

同樣的,輸出位移場Utxt寫入時(shí)第一列是節(jié)點(diǎn)編號,第二列和第三列分別是x方向位移和y方向位移。

如上面代碼中的紅色標(biāo)記,有nodeLabledata兩項(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

9.4.png

4位移輸出txt文件

除了讀取結(jié)果數(shù)據(jù),還可以再次基礎(chǔ)上做一些運(yùn)算,同樣的輸出結(jié)果最大值則只需要寫一個(gè)遍歷,比較前后數(shù)據(jù)大小即可找到最大值,這和其他任何語言都是一樣。

文中對輸出格式?jīng)]有解釋,可以通過其他書籍和資料了解。

登錄后免費(fèi)查看全文
立即登錄
App下載
技術(shù)鄰APP
工程師必備
  • 項(xiàng)目客服
  • 培訓(xùn)客服
  • 平臺客服

TOP

16
3
31