Abaqus二次開發(fā)


Abaqus二次開發(fā)的圖1
Abaqus二次開發(fā)的圖2


Abaqus二次開發(fā)

利用Python對Abaqus進(jìn)行后處理開發(fā)

 

Abaqus提供了基于Python語言的腳本接口,在Abaqus的二次開發(fā)過程中,可以利用Python腳本對其后處理結(jié)果進(jìn)行輸出,然后再進(jìn)行相應(yīng)的處理。本文通過一個簡單的例子來說明Python語言在Abaqus后處理中的應(yīng)用。




01.

                  輸出部件特定節(jié)點的位移值


在利用Python腳本對Abaqus后處理位移結(jié)果進(jìn)行輸出之前,我們先來了解一下Abaqus生成的輸出數(shù)據(jù)庫文件(odb文件)。輸出數(shù)據(jù)庫文件包括模型數(shù)據(jù)(model data)和結(jié)果數(shù)據(jù)(result data)兩部分。其中模型數(shù)據(jù)是用來描述根裝配(root assembly)中的部件和部件實例。例如,節(jié)點坐標(biāo)、集合定義、單元類型等。結(jié)果數(shù)據(jù)是用來描述各種分析結(jié)果。例如,應(yīng)力、應(yīng)變和位移等。Abaqus輸出數(shù)據(jù)庫的結(jié)構(gòu)圖1所示。

Abaqus二次開發(fā)的圖3

圖1


Abaqus的odb文件輸出結(jié)果信息有很多,例如我們今天講的提取位移結(jié)果,屬于場輸出數(shù)據(jù)的一類,如果我們想知道當(dāng)前分析有哪些輸出量我們可以通過Python調(diào)用,我們可以在Abaqus CAE的Kernel Command窗口輸入:

for fileName in myodb.steps['Step-1'].frames[-1].fieldOutputs.keys():

    print filename

我們就可以看到當(dāng)前分析步下我們定義的場輸出變量:

COPEN

RF

U

回到主題,假如我們提取某一部件所有分析步特定節(jié)點的位移值,并將提取的位移值輸出到Excel表格中。我們可以分成兩步,一是提取位移值,二是創(chuàng)建新的Excel文件,并將提取出的位移添加進(jìn)去。由于是提取部分節(jié)點的位移,所以我們要用到兩個比較重要的函數(shù):getNodeFromLabel()和getSubset(),幫助文檔圖2所示。

Abaqus二次開發(fā)的圖4
Abaqus二次開發(fā)的圖5

圖2



02.

代碼實現(xiàn)


首先我們先導(dǎo)入可能會用到的各種庫,特殊的,我們調(diào)用win32com.client模塊來操作office。

#!/user/bin/python

# -* - coding:UTF-8 -*-

'''

讀取每一分析步相應(yīng)節(jié)點的位移數(shù)據(jù),并存入Excel表格中

'''

from abaqus import *

from abaqusConstants import *

from odbAccess import *

from math import *

from win32com.client import Dispatch

import __main__

import visualization

import os,sys

導(dǎo)入相應(yīng)的模塊之后,我們打開odb文件,因為我們要讀取每個分析步特定節(jié)點的位移值,所以我們需要知道該分析中各分析步的名稱,然后遍歷每一個分析步,提取特定節(jié)點的位移。我們還要調(diào)用getNodeFromLabel()函數(shù),通過節(jié)點編號,獲得節(jié)點集對象。同時我們還要打開一個新的Excel表格,等待后續(xù)寫入操作。相應(yīng)的代碼如下所示:

MyOdb=openOdb(path=odbFilePath)

myAssenbly=MyOdb.rootAssembly

instance1=myAssenbly.instances[InstanceName]

       myNode=[]

for eachLabel in disNode_label:                 disNodel=instance1.getNodeFromLabel(eachLabel)

       myNode.append(disNodel) 

    ……

for each_step in stepfield:

        loadCase.append(each_step.name)

然后我們遍歷每一個分析步,在讀取位移結(jié)果之前我們先創(chuàng)建一個sheet,表單的名字以當(dāng)前分析步的名字命名,寫入相應(yīng)的表頭,代碼如下所示:

for each_Loadcase in loadCase:          Application.Worksheets.Add().Name = each_Loadcase

       ……

 xlSheet.Range('A2:E2').Value = head_line 

新創(chuàng)建的sheet如圖3所示,表頭中Step-1表示當(dāng)前分析步的名字,node、X、Y、Z、Mag分別表示節(jié)點編號以及該節(jié)點對應(yīng)的三個方向的位移和總位移。

Abaqus二次開發(fā)的圖6

圖3

然后我們開始讀取整個模型當(dāng)前分析步最后一幀的位移場displacement,因為我們只需要讀取特定節(jié)點的位移值,所以我們要用到getSubset(region=node)函數(shù),通過節(jié)點對象獲得特定節(jié)點的位移值。我們在此需要創(chuàng)建一個列表,列表的每一項也是一個列表,該列表包含特定節(jié)點的編號,以及該節(jié)點的各方向的位移和總位移,形式如:[[1,0.02,0.04,0.01,0.0458],[2,0.03,0.001,0.0,0.03001]….],然后我們將每一項子列表中的信息寫入我們創(chuàng)建的sheet中。所有結(jié)果寫入完之后,我們保存創(chuàng)建的表格,并退出。代碼如下所示:

lastFrame=MyOdb.steps[each_Loadcase].frames[-1]        displacement=lastFrame.fieldOutputs['U']

        dis_nodeLabel=[]

        dis_X=[]

        dis_Y=[]

        dis_Z=[]

        dis_Mag=[]

        dis_data=[]

        for node in myNode:

 ……        dis_data=zip(dis_nodeLabel,dis_X,dis_Y,dis_Z,dis_Mag)

        dis_data=sorted(dis_data)

        dis_data_str = []

        for each in dis_data:

            each_line=tuple(map(lambda x: str(x),each))

            ……

        xlSheet.Columns.AutoFit()#自動調(diào)整列寬

xlSheet.Rows.AutoFit()#自動調(diào)整行高    Application.Worksheets('Sheet1').Delete()    ExcelFile_Path=os.path.join(CurWorkDir,'dis_data.xlsx')

    wb.SaveAs(ExcelFile_Path)

    wb.close

    Application.Visible=False

我們將整個功能封裝在readDis_data(InstanceName,disNode_label)函數(shù)中,其有兩個參數(shù),一是要提取的節(jié)點所在的部件實例的名稱,二是節(jié)點編號列表。如果是通過Hypermesh建模,部件實例只有一個:'PART-1-1'。



03.

程序運行結(jié)果展示


在Abaqus cae中,運行腳本,調(diào)用readDis_data()函數(shù),例如我們想提取'PART-1-1'前十個節(jié)點的位移(節(jié)點標(biāo)號從1到10),輸入readDis_data('PART-1-1',list(range(1,11)),點擊回車。輸出結(jié)果如圖4所示。

Abaqus二次開發(fā)的圖7
Abaqus二次開發(fā)的圖8

圖4



04.

更多內(nèi)容



長按識別二維碼關(guān)注更多內(nèi)容


Abaqus二次開發(fā)的圖9





內(nèi)容作者


上海唯析CAE工程師:鄭燦輝





Abaqus二次開發(fā)的圖10


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

TOP

9
14