当前位置:服务支持 >  软件文章 >  提高访问Abaqus结果ODB文件效率的方法与技巧

提高访问Abaqus结果ODB文件效率的方法与技巧

阅读数 8
点赞 0
article_banner

在看达索的用户手册的时候看到这一节的内容,觉得很有用,遂拿过来翻译并自己组织了一下语言,贴在这里与大家分享:

正文:

如果有一个变量需要多次被访问,那么最好的办法就是将这个变量拿出来赋值给一个对象objectA,然后通过多次访问这个对象objectA,通过访问这个临时对象来避免对输出数据库的多次访问。

假如有以下代码,需要访问odb中的Mises应力和真实应变,如果Mises应力大于某个值,那么打印该单元的应变分量,一般的代码可能是这样做的:

stressField = frame.fieldOutputs['MISES']
strainField = frame.fieldOutputs['LE']
count = 0
for v in stressField.values:
  if v.mises > stressCap:
    if v.integrationPoint:
      print 'Element label = ', v.elementLabel, \
          'Integration Point = ', v.integrationPoint
    else:
      print 'Element label = ', v.elementLabel
    for component in strainField.values[count].data:
      print '%-10.5f' % component,
    print
  count = count + 1

在这段脚本中,定义一个strainField,在每次需要访问strainField中的应变值时,都需要调用strainField.values[count]来获得变量的值,由于对于odb数据库来说,每一次去调用这个values变量都需要进入到数据库中去查找并读取,所以这是一个非常费时的做法,但是对上述脚本做一个简单修改就可以大大改善访问效率,如下:

stressField = frame.fieldOutputs['MISES']
strainFieldValues = frame.fieldOutputs['LE'].values
count = 0
for v in stressField.values:
  if v.mises > stressCap:
    if v.integrationPoint:
      print 'Element label = ', v.elementLabel, \
          'Integration Point = ', v.integrationPoint
    else:
      print 'Element label = ', v.elementLabel
    for component in strainFieldValues[count].data:
      print '%-10.5f' % component,
    print
  count = count + 1

注意看第二行,直接通过一次访问,将所有的真实应变得值保存到一个对象中,这个对象是在内存中的,所以需要访问应变值得时候,不需要去输出数据库中去读取,只需要通过访问列表的方法去访问即可。

另外一个问题,如果需要访问多个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是更经济的做法。


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删
相关文章
QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空