Python提取Abaqus ODB中的场变量(Field output)与历史变量(History
output)方法
胡剑桥(jianqiaohu@126)
(1)创建bat文件,这一步并不是必须的,但是推荐使用。用来提供ODB路径以及写出文件路径的方法。方便在windows command中提交。也可以直接在Python中提供读写路径。(2)关于场变量和历史变量的提取,Python对接odb时有很简单严格的数据结构。具体的ODB 数据结构如下所示:
(3)Field output提取方法。
场变量输出是以一个个set来输出的,如果不选择set,就默认为输出整个模型的对应的场变量,选择set
是为了输出研究者感兴趣区域的场变量。在abaqus model里面创建set时,是有两个地方是可以用来创建set,所以在选出需要输出场变量区域的时候就涉及到了如下的两种路径:
一是:odb—rootAssembly—Sets
二是:odb—rootAssembly—instances—Sets
用户可以通过相关命令查看对应的集合的名称,以节点集为例。
print 'Node sets = ',deSets.keys()
print 'Node sets = ', Assembly.instances['PART-1-1'].nodeSets.keys()
这两种分别能打印出所有节点集合,注意需要预先区分个人定义的节点集合是否在instances上。定义需要输出区域的语句是:
deSets[‘要研究的Set名’]
而定义相关场变量输出时,语句就非常简单了。
例如,用户想要输出在Step-3,第i个Frame时(也可以写个循环来调用不同Frame)的U3位移场,这
样定义的场变量方式为:
Frame=odb.steps[‘Step-3’].frame[i]
RootU3=Frame.fieldOutputs[‘U3’]
或者直接就是
RootU3= odb.steps[‘Step-3’].frame[i] .fieldOutputs[‘U3’]
后续写出数据到文件只需遵照Python的读写文件操作即可。读取Abaqus时所需要的头文件也都是一样的。
所以,采用Python读取Abaqus ODB局部区域的某一场变量的整理思想是:先定义所关心的Step 中所对应的第i个frame,然后定义自己关心区域,最后结合这两者。(注意大小写,)
如下最初输出Set-1集合上的U3存储到RegioncareU3中:
Frame=odb.steps[‘Step-3’].frame[i]
RootU3=Frame.fieldOutputs[‘U3’]
deSets[‘Set-1’]
RegioncareU3= Subset(region=Regioncare)
(4)History output提取方法
History output提取方法类似,首先是Pyhton中对应的一些头文件:
from odbAccess import *
from abaqusConstants import *
定义odb对应的路径,写出文件的路径(建议这部分在bat文件中进行,后续处理会更简单)。基本思路也是类似的,但需要注意的是,history output中并不存在Frame的问题。
所以定义需要输出的历史变量仅仅涉及到Step的问题。
于是定义区域基本语句为:
Step1=odb.steps['Step-1']
RegionPoint1=Step1.historyRegions['位置名称']
同样,此处需要知道自己输出了model中那些区域的“位置名称”,可以通过如下语句在屏幕中打印出来,打印出step-1加载步中输出的所有historyregions名称。
Step1=odb.steps['Step-1']
print Step1.historyRegions.keys()
通过以上命令打印出所有“位置名称”,选择自己关心的区域即可。
选择需要输出的场变量(输出之前选择的“位置名称”上的RF3),如下所示:
RFPoint1=RegionPoint1.historyOutputs['RF3'].data
之后的流程及基本一样,写入到文件即可。
output的反义词因此,综合来讲,核心语句有:
odb = openOdb(path=odbPath,readOnly=TRUE) Step1=odb.steps['Step-1']
RegionPoint1=Step1.historyRegions['位置名称'] RFPoint1=RegionPoint1.historyOutputs['RF3'].data

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。