python提取abaqus場輸出結果

   最近寫了一個簡單的python讀取abaqus結果中的場輸出數據,就在這里簡單的講一下整個流程。后續采用abaqus讀取場輸出結果應用也挺廣泛。整個過程的流程圖可以用下圖來概括,因為不是計算機專業,考慮沒那么細致,很多python函數也是即查即用,當然程序后續根據要求也可以不斷更改。

python提取abaqus場輸出結果的圖1

下面就從這兩個方面按照圖片步驟講解一下這個小程序:

引入頭文件

# -*- coding: utf-8 -*-
from odbAccess import *
from abaqusConstants import*
import csv

讀取數據

###1.打開文件###

#定義文件路徑
OdbFilePath='E:/temp/kehu11-python/09g-B5.odb'
#打開Odb文件
myodb=openOdb(OdbFilePath)

###2.讀取場輸出結果###

#讀取的是場輸出DAMAGEC和DAMAGET結果,damagecField是自定義,數據類型是后面賦予的#
#簡單說下python語言,如下,很直接了當,.連接就像中國.湖北.武漢.華科一樣#
#讀取結果里Step-earthquake的最后一幀的DAMAGEC#
 damagecField=myodb.steps['Step-earthquake'].frames[-1].fieldOutputs['DAMAGEC']
 damagetField=myodb.steps['Step-earthquake'].frames[-1].fieldOutputs['DAMAGET']

 ###3.保存到數組###

#場輸出是一個大的類型,val1是它的所有結果#
val1=damagecField.values
#定義兩個數組,分別存儲單元編號和對應的數值#
val1nodeLabel=[]
val1DamagecData=[]
#用一個簡單的循環將場輸出中每一個結果的對應數值與單元編號寫入到上述數組#
for v1 in val1: 
     val1nodeLabel.append(v1.elementLabel)
     val1DamagecData.append(v1.data)
#將數組排序,abaqus場輸出的數值并非按照單元編號一個接一個,經常有跳動,所以需要排序#
#下面的排序算法百度得到,就是將兩個數組一一對應排序,作用如下#
#1,2,3,7,8,9,4,5,6對應a,b,c,h,i,j,e,f,排序后
#1,2,3,4,5,6,7,8,9對應a,b,c,d,e,f,g,h,i,j
Z1=zip(val1nodeLabel,val1DamagecData)
Z1=sorted(Z1)
sortedval1nodeLabel,sortedval1DamagecData=zip(*Z1)

##上面輸出的只是damagec的對應結果,下面輸出damaget對應結果#   
val2nodeLabel=[]
val2DamagetData=[]
val2=damagetField.values
for v2 in val2: 
      val2nodeLabel.append(v2.elementLabel)
      val2DamagetData.append(v2.data)
Z2=zip(val2nodeLabel,val2DamagetData)
Z2=sorted(Z2)
sortedval2nodeLabel,sortedval2DamagetData=zip(*Z2)

###4.關閉文件###

myodb.close()

輸出數據

###1.打開文件###

#數據一般保存方式為csv,簡單的可以用txt,這里方便后處理采用csv文件,定義文件路徑#
CsvFilePath='D:/damge.csv'
#打開csv文件
csvFile=open(CsvFilePath,'wb')

 ###2.寫入數據###

writer=csv.writer(csvFile)
#寫入抬頭#
writer.writerow(['NodeLabel','DamagecData','DamagetData'])
#獲取數組的長度#
#lenth(sortedval1nodeLabel)#這里太多我就只輸出1000個單元數據#
    lenth=1000
#逐行寫入到csv文件中
i=0
while i<=lenth:
    writer.writerow([sortedval1nodeLabel[i],sortedval1DamagecData[i],
                                 sortedval2DamagetData[i]])
    i=i+1

###3.關閉文件###

csvFile.close()
    最終得到一個csv文件,提取結果如下圖

python提取abaqus場輸出結果的圖2

    數據值為0,是因為其計算時間太長,等了一晚上才計算到第9秒還沒有發生損傷,因此其數值均為0。
    提取較多的結果可能是常見的應力應變,節點位移等,不過方法都是一樣的,改動起來也較為簡單。有興趣的朋友不妨動手嘗試一下。
    
    使用Python腳本確實可以大大減輕我們的工作負擔,畢竟認識苦短,而且學起來很簡單,注重一個對Python以及abaqus的理解,后續很多函數也都是現搜現用。關于Python在ABAQUS中的應用,推薦曹金鳳老師的書,可以用來當作工具書,隨時需要了去翻一下,給我們提供指導。基本上也不用專門去學習下Python,書里附帶的Python語言基礎也夠用了。如果大家有啥需要使用Python腳本的地方,也可以過來咨詢我。

python提取abaqus場輸出結果的圖3


CAE仿真與數值模擬微信公眾號,主要介紹CAE仿真與數值模擬的知識與應用。通過論壇,博客,論文,案例等為大家帶來知識食糧。仿真軟件:abaqus、ansys、flunet、comsol、hypermesh、moldflow等,涉及領域有機械材料土木物理等。

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

TOP

6
2
11