我有一個.odb文件,名爲plate2.odb,我想從中提取應變數據。爲此,我構建了下面的簡單代碼,通過每個元素的字段輸出E(應變)循環並將其保存到列表中。加速Abaqus-python代碼中的緩慢循環以從.odb文件提取應變數據
from odbAccess import openOdb
import pickle as pickle
# import database
odbname = 'plate2'
path = './'
myodbpath = path + odbname + '.odb'
odb = openOdb(myodbpath)
# load the strain values into a list
E = []
for i in range(1000):
E.append(odb.steps['Step-1'].frames[0].fieldOutputs['E'].values[i].data)
# save the data
with open("mises.pickle", "wb") as input_file:
pickle.dump(E, input_file)
odb.close()
問題是將應變值加載到列表中的for循環需要很長時間(對於1000個元素爲35秒)。按照這個速度(0.035次查詢/秒),我需要2個小時才能提取20萬個元素的模型數據。爲什麼這需要這麼長時間?我怎樣才能加速這個?
如果我在任何Python lool之外進行單個應變查詢,它需要0.04秒,所以我知道這不是Python循環的問題。
請注意,您可以使用列表理解'E = [v.v.data for v in EE.values]'(也許性能也有所提高) – agentp
不錯。順便說一句,這種技術(在Abaqus腳本用戶手冊的「創建保存臨時變量的對象」一節中也提到過)可用於任何Python腳本中,您希望避免重複重建一系列對象。 –