Python 提取 Abaqus ODB 中的场变量 (Field output) 与历史变量 (History output)方法
胡剑桥 (jianqiaohu@126.com) (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 = ',odb.rootAssembly.nodeSets.keys() print 'Node sets = ', odb.rootAssembly.instances['PART-1-1'].nodeSets.keys() 这两种分别能打印出所有节点集合,注意需要预先区分个人定义的节点集合是否在 instances 上。 定义需要输出区域的语句是: Region=odb.rootAssembly.nodeSets[‘要研究的 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’] Regioncare=odb.rootAssembly.nodeSets[‘Set-1’] RegioncareU3= RootU3.getSubset(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 之后的流程及基本一样,写入到文件即可。 因此,综合来讲,核心语句有:
odb = openOdb(path=odbPath,readOnly=TRUE) Step1=odb.steps['Step-1'] RegionPoint1=Step1.historyRegions['位置名称'] RFPoint1=RegionPoint1.historyOutputs['RF3'].data
联系客服