ABAQUS批量提交Job與Python讀取ODB結果應力應變數據

       今天完成了一些節點性工作,下午有些時間,回答一個后臺有網友的提問:

ABAQUS批量提交Job與Python讀取ODB結果應力應變數據的圖1
      這個問題具有一定的普遍性和通用性,普遍性是很多人都會遇到,通用性是指應用場景很廣泛,尤其是現在很多人趕時髦搞深度學習和機器學習什么的,需要進行大量計算和數據處理來構建數據集,這就不可避免的要進行批量化處理了,因此對這些問題進行基本的講解也就有了意義,我原來也寫過一些相關文章,點擊下面圖片可以跳轉。
ABAQUS批量提交Job與Python讀取ODB結果應力應變數據的圖2


       該網友的問題,實際上是兩個問題:
問題1是如何批量提交job;
問題2是如何從ODB結果文件中讀取計算結果數據。
因此本文也從兩個方面來進行介紹。

問題1    如何批量提交job——計算任務

       批量提交計算任務這個問題實際上是老生常談了,可以用兩種基本的方式實現。
         方法1: 在cmd中使用命令行的方式,這種方式也可以保存為bat文件的方式運行,這個方式我并不常用,可參考幫助文檔中的如下部分,很詳細。
ABAQUS批量提交Job與Python讀取ODB結果應力應變數據的圖3

方法2   采用python程序進行批量提交
       如果你的若干個job已經在job界面建好了,并且打算每算完一個job自動的進行后處理的話,采用python腳本會很方便。
ABAQUS批量提交Job與Python讀取ODB結果應力應變數據的圖4
     批量提交的核心是需要等待當前計算任務的結束,上圖中若干個job的提交代碼如下:
  
  
# coding: utf-8 #微信公眾號:ABAQUS二次開發 #作者:阿信老師CAE #email:axin_cae@163.com #2022.03.17 from abaqus import * from abaqusConstants import *
jobList = mdb.jobs.keys()    #獲取所有計算任務的jobName for jobName in jobList:              mdb.jobs[jobName].submit(consistencyChecking=OFF) #提交計算    mdb.jobs[jobName].waitForCompletion()             #等待計算完成    print jobName , "is completed"  
     不過在實際的操作過程中,我們可能會需要避開一些job不提交,或者job窗口事先并沒有建立job,等等,總之實際問題永遠比任何教程都復雜,不過只需要靈活面對就可以了,處理起來并不難。

問題2    如何從ODB結果文件中讀取計算結果數據
       
       第二個問題是大家經常要面對的,常規的數據提取采用ABAQUS自帶的后處理工具已經能滿足需求了,但是如果我們需要進行一些寫出文本,數據篩選,數據的二次計算處理。。。,我們就需要用程序語言的幫助了。
      針對今天的問題—— 提取結果并寫出到文本 ,如果用自帶的工具,可以導出abaqus.rpt文件,不過這種方式并不能滿足我們較為苛刻的要求,用python程序會的自由度會更大一些。
      另外需要說明的是,如果我們僅僅只是看看某單元或者節點的各種計算結果,或者簡要的數據處理,臨時用一用,可以采用如下方式,不必費心寫復雜的程序,不值當浪費時間, 青春易逝,頭發寶貴 ABAQUS批量提交Job與Python讀取ODB結果應力應變數據的圖5ABAQUS批量提交Job與Python讀取ODB結果應力應變數據的圖6。當然了,通過阿信這里給出的基本程序改一改,能省幾根頭發。

ABAQUS批量提交Job與Python讀取ODB結果應力應變數據的圖7



       限于時間關系,這里只列出基本的應力提取程序,寫入文本比較簡單,隨意百度即可實現,不再給出。

# coding: utf-8#微信公眾號:ABAQUS二次開發#作者:阿信老師CAE#email:axin_cae@163.com#2022.03.17
from odbAccess import *from visualization import *
frame_num = 20             #定義需要輸出的幀odbName = 'X:/***/***.odb' #odb路徑和名稱elemSetName = '***'        #單元setodb = openOdb(path=odbName)#打開odbregion = odb.rootAssembly.elementSets[elemSetName]frameRps = odb.steps['Step-1'].framesf_S1 = frameRps[frame_num].fieldOutputs['S']  #需要輸出的場變量sub_f_S1 = f_S1.getSubset(region=region) S_Value = sub_f_S1.values#讀取所有單元的應力值for i in range(len(S_Value)):    Stress =S_Value[i].data    print Stressodb.close()

若有緣,江湖再會。
阿信
2022.3.17


ABAQUS批量提交Job與Python讀取ODB結果應力應變數據的圖8


文章來源:ABAQUS二次開發

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

TOP

4
1
15