我有一个.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脚本中,您希望避免重复重建一系列对象。 –