
發布
注冊
/
登錄ODB++的案例
abaqus 獲取odb場輸出中某一集合的數據
contextscope=all
odb = openOdb(path='Job-2.odb') # 打開odb文件
print odb.rootAssembly.elementSets.keys() # 查看odb文件中可用的單元集合
elementset=odb.rootAssembly.elementSets[odb.rootAssembly.elementSets.keys()[1]] # 創建一個OdbSet
stressField = odb.steps['Step-1'].frames[1].fieldOutputs['S'] # 創建整個場輸出數據
field = stressField.getSubset(region=elementset, position=INTEGRATION_POINT, elementType='C3D6') # 獲取單元集的輸出數據
fieldValues = field.values # fieldValues的數據類型為 FieldValueArray
for v in fieldValues:
print v
# 想獲取什么內容,就輸入對應的名稱,比如v.data=[ 1.71781802177429, 0.00304327975027263, 0.0132824070751667, 1.27494768094039e-05, 8.11893332866021e-05,-0.0778346583247185]
# v.elementLabel=18080
#{'baseElementType': 'C3D6', 'conjugateData': None, 'conjugateDataDouble': 'unknown',
# 'data': array([1.71781802177429, 0.00304327975027263
展開 ODB to Output2:將ABAQUS結果文件轉譯為NASTRAN的output2文件
這個問題的主要原因是:比如nCode2018只支持ABAQUS2017的odb文件。甚至軟件如果更新的比較頻繁,發布的月份都會有影響。
我在工作中就遇見過類似的問題:ABAQUS2018版本的odb文件不能被nCode2018和Altair2018讀取。通過錯誤提示,我發現nCode2018和Altair2018均只支持ABAQUS2017。
所以我采用的解決方法是使用ABAQUS內置的轉譯功能將odb文件轉譯成output2文件,這樣一來2018的odb就變成了2017的output2,就可以在nCode2018和Altair2018之間通用了。
ABAQUS提供的轉譯語句是:
abaqus toOutput2 job=jobname odb=odbname step=stepid
使用方法:
打開Abaqus Command;
指定當前工作目錄到需要轉譯的odb文件所在的目錄;
鍵入命令:abaqus toOutput2 job=jobname odb=odbname step=stepid。
展開 利用Python批量打開ODB文件,提取位移數據寫入txt文件 ¥2
借助abaqus在參數分析時經常遇見大量的odb數據需要處理,本人結合個人經驗,編制了以下腳本,可打開多個odb模型,并進行數據處理。
odb模型列表如下:
Job-2000.odb
Job-2500.odb
Job-3000.odb
Job-3500.odb
Job-4000.odb
利用Python提取ABAQUS的.odb結果中的輪軌接觸信息 ¥500
ABAQUS 顯式explicit計算時所有結果都將寫入到.odb文件中,在GUI界面進行數據提取時效率較低,且有些詳細結果不能直接從.odb中獲取。因此,需要利用python讀取.odb,然后進行提取關心的數據,以此進行下一步計算。

abaqus 2017屈曲分析后處理odb轉vtu python文件 ¥100
(3)輸出 VTU 格式文件, 輸出位移
(4)函數調用buckle_output_result_vtu(job_path, job_name, step_name, Numeig,meshtype)
#job_path路徑
#job_name:odb名字
#step_name:載荷步名字
#Numeig:特征值個數
#meshtype = "UnstructuredGrid"
部分代碼:
def buckle_output_result_vtu(job_path, job_name, step_name, Numeig,meshtype):
#import abaqusConstants
odb = odbAccess.openOdb(path=os.path.join(job_path, str(job_name) + ".odb"))
write_eigenvalue_list(job_path,job_name,step_name)
assembly = odb.rootAssembly
step = odb.steps[step_name]
try:
for frame_index in range(1,Numeig+1):
last_frame = step.frames[frame_index]
#單元類型和VTU轉換關系
abaqus_to_vtu = {
"CAX3" : 5,
"CAX3H" : 5,
"CAX4R" : 9,
"CAX4I" : 9,
"C3D8" : 12,
"C3D8R" : 12,
"C3D8I" : 12,
"C3D6" : 13,
"C3D10M": 24,
"C3D4
展開 abaqus combine odbs
想將多個odb文件合并,在后處理中做成一個動畫,對于combine odb有問題,
查了,有用如下的
abaqus restartjoin originalodb=<original odb file name>
restartodb=<restart odb file name> [copyoriginal] [history]
[compressresult] ,
試了沒效果,
也看了abaqus插件中的combine odbs,
也試不出來。
求助
ABAQUS結果提取重構插件【ODB Extractor and Builder Tool】 ¥19.89
當我們用abaqus對一個模型計算完成后,會得到一個odb結果文件,該文件可大可小,有的結果文件甚至高達幾十上百G,如果我們想把該odb結果文件的部分信息提供給其他人查看,出于保密原因考慮,我們不能提供完整的結果文件,所以這個時候我們就可以使用插件OEBT來完成,提取我們想要的部分或全部結果信息。
這個插件提供了一種方法來重新創建Abaqus結果數據庫(.odb)的一部分作為一個新的.odb文件。具體有以下特點:
1 和分析團隊/外部合作伙伴分享部分結果數據信息;
2 減少odb數據庫加載時間(通過刪除不必要的數據);
3 通過縮減odb文件以只存儲某些相關結果來減少存儲空間占用;
OEBT插件界面
插件使用方法:
將壓縮包解壓,復制到*D:\SIMULIA\CAE\2019\win_b64\code\python2.7\lib\abaqus_plugins
下即可使用
注意:最新版插件名字已經由之前的OEBT改為了ORB,該插件對abaqus2018及以后的版本兼容,對早期低版本不兼容。
附件是該ORB2.3.0插件和使用說明書
展開 Python 提取odb結果
### python腳本提取解釋
# 導入模塊
from odbAccess import *
from abaqusConstants import *
from odbMaterial import *
from odbSection import *
import math
# 打開odb文件
odb = openOdb(path=r'G:\CABLE_CON\TEXT2\Job-1.odb')
Step_1=odb.steps['Step-1']
# 鎖定目標繩索
region = Step_1.historyRegions['Element ASSEMBLY.1']
xy1=region.historyOutputs['CTF1'].data[300]
# 取最后一幀數據,并將括號刪掉
s=str(xy1)
s = s.replace("(", "")
s = s.replace(")", "")
# 將繩力輸出到 F1.txt 文件
disFile=open('F1.txt','w')
disFile.write(s)
disFile.close()
# 取最后一幀數據
lastFrame=Step_1.frames[-1]
Zuobiao=lastFrame.fieldOutputs['COORD']
Regioncare=odb.rootAssembly.nodeSets['RP']
Coor1=Zuobiao.getSubset(region=Regioncare)
Zuobiao_x=Coor1.values[0].data[0]
Zuobiao_y=Coor1.values[0].data[1]
Zuobiao_z=Coor1.values[0].data[2]
Zhuanjiao=lastFrame.fieldOutputs
展開 用Python代碼獲得ODB文件中某些容器中的key(比如step的名字)
有時候在利用Python進行前后處理的時候,訪問容器中的某一個對象時,需要這個對象的名字,也就是這個對象的key,但是如果對這個ODB文件不是很了解,或者時間長了忘記了,那么可以通過如下方式來獲得容器中的所有key。
Abaqus-利用python處理有多個instances的odb文件,得到inp模型數據用于前處理
在一些情況下,odb文件中包含有多個instances,instances之間會有節點和單元是重合。很多情況下需要得到該odb模型數據,并將其導入hypermesh進行前處理。如果直接從abaqus中得到odb模型數據的inp輸入導入到hypermesh中,會有重合節點和單元報錯,然而利用python可以解決該問題。
ABAQUS odb數據解析系列文章---總綱
此系列文章將著手于odb文件的結構特征, 進而使得在后處理插件開發過程中少走彎路, 少做重復性工作.”
python是一種面向對象的高級語言, 那么在使用python處理odb的時候就要著手于對象, 將odb文件的對象譜系梳理清晰. 在完成上述工作之后, 再進行后處理二次開發的時候就可以直接按圖索驥, 快速找到自己需要使用的方法了.
01
—
解析過程中的重要工具
ABAQUS為其定義的所有類提供了兩個特別有用的方法:
object.__methods__: 可以查看該類內部的所有方法
object.__members__: 可以查看該類內部的所有屬性
這兩個方法為梳理ABAQUS對象譜系起到了很大的作用, 避免了使用python自帶的dir方法(因其將對象內部所有的方法與屬性同時返回, 導致解析困難).
ABAQUS還提供了優化了的print方法, 該方法位于ABAQUS的textRepr中, 名為prettyPrint.
展開 
一個提高訪問Abaqus結果ODB文件效率的方法技巧
另外一個問題,如果需要訪問多個frame,也是有兩種方式:
方式1:
for i in range(len(odb.steps[name].frames)-1):
frame[i] = odb.steps[name].frames[i]
方式2:
frameRepository = odb.steps[name].frames
for i in range(len(frameRepository)-1):
frame[i] = frameRepository[i]
明顯,方式2是更經濟的做法。
ABAQUS批量提交Job與Python讀取ODB結果應力應變數據
# 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二次開發
展開 用python保存odb文件中每一幀的mises應變
直接在abaqus里面調用就可以了
from abaqus import *
from abaqusConstants import *
from odbAccess import *
import numpy as np
import os
SavePath = 'G:/Abaqus_jobFile/6/'
odb = openOdb(path='G:/Abaqus_jobFile/6.odb ')
for i in range(len(odb.steps['static'].frames)):
frame = odb.steps['static'].frames[i]
#print frame.frameId
fileName = SavePath + str(frame.frameId)+'.txt'
with open(fileName,'a') as f:
s_field = frame.fieldOutputs['S'].values
for j in s_field:
data = str(j.elementLabel)+'\t' +str(j.mises) + '\n'
f.write(data)
展開 Abaqus采用Python腳本提取ODB信息,輸出為VTK的UnstructureGrid文件格式 ¥49.99
最近寫了兩個腳本,一個是保存VTK非結構網格格式的文件,一個是提取Abaqus計算結果中的網格信息、field信息,將兩個腳本結合起來就可以實現提取ODB中的信息,并保存成為VTK非結構網格文件,當然,還是需要有Abaqus環境。
注意:提取ODB信息的那個腳本目前僅僅是針對我自己提供的那個算例,有能力的朋友完全可以修改一下用于自己的情況。寫VTK非結構網格文件的那個腳本目前應該沒有太大的bug。ODB信息的提取還是需要有Abaqus環境,并不是解析二進制文件。請看清楚再確定是否需要。
之所以做這個,還是希望慢慢完善,從而積累出一定數量的腳本,用于ODB數據的提取。
以下是abaqus中的網格和云圖,和用paraview查看的vtk文件的網格和云圖:
展開