将Abaqus宏转换为python脚本

时间:2016-09-23 13:39:29

标签: python macros abaqus

我正在使用Abaqus(6.13)来运行FEM热模拟。我需要在该模型上获得总的外部热通量。我的搜索表明,获得它的唯一方法是在整个模型上求和RFLE历史输出并且它工作正常。问题是我有一个~300 000元素模型,而Report / XY窗口的简单打开需要几个小时。

为了简化我的导出,我使用Abaqus的宏管理器创建了一个导出宏。记录在abaqus中导入odb之前开始,并在导出包含X / Y数据的报告后结束。 这个生成的宏很大(~90万行),所以我在这里给你一个裁剪版本:

Fragments

我在最后根据搜索结果添加了对OdbMacro1的调用。

我想从python文件中运行GUI外部的宏(或至少是有用的部分)。当我这样做时(使用" C:\ Path \ to \ python \ file \ folder> abaqus python macro.py"),我收到错误:

XML

。我不明白问题所在。我尝试添加"导入odbAccess"在文件的开头但我得到了同样的错误。我想我应该在开始时添加一些代码,但我无法绕过哪些代码。你能帮帮我吗?

顺便说一下,它是次要的,但我觉得我可以简化功能:

  • 在功能开头的一堆导入中,我不是 确定我需要删除一些吗?
  • 所有历史节点 输出在一组中的相同操作中求和(或平均)。 是不是有办法使用它来避免使用每个单独的历史记录 输出宏?

感谢您的回答。 :)

1 个答案:

答案 0 :(得分:0)

这是一个基本上可以满足您需求的脚本: (你看我们只需要三个导入

from abaqus import *
from abaqusConstants import *
import visualization
odb=session.openOdb(name='/full/path/Job-1.odb')
session.viewports['Viewport: 1'].setValues(displayedObject=odb)
session.xyDataListFromField(odb=odb, outputPosition=NODAL,
          variable=(('NT11', NODAL),  ),
                   nodeSets=('PART-1-1.SETNAME', ))
keyname='From Field Data: NT11  at part instance PART-1-1'
# run this to see what the keys look like:
# [ o.description for o in session.xyDataObjects.values() ]
temp=[o for o in session.xyDataObjects.values() if
         o.description.find(keyname)==0]
#note if you only have requested one data type you could just do:
#temp=session.xyDataObjects.values()
session.writeXYReport(fileName='test.rpt', xyData=temp)
#alternate way to directly write data instead of using writexyreport:
f=open('test.dat','w')
for o in temp: f.write('%i %g\n'%
     (int(o.description.split()[-1]),o.data[-1][-1]))
f.close()

使用abaqus cae -noGUI script.pyabaqus cae noGUI=script.py

运行