abaqus后处理(odb对象的使用)

abaqus的计算结果,有限元模型的节点信息,单元信息,都储存在.odb文件当中。我们知道abaqus的前后处理是基础python开发的,python是一种面向对象的开发语言,odb正是一种数据对象,我们有必要了解对象的数据结构,成员类型,下面介绍为成员类型表与数据结构图。

成员类型 名称 作用
构造函数 session.Odb() 创建新的Odb对象
session.openOdb() 从现有的Odb文件创建Odb对象(CAE内打开Odb)
odbAccess.openOdb() 从现有的Odb文件创建Odb对象(CAE外打开Odb)
成员函数 save() 将当前Odb对象的数据写入Odb文件中
close() 关闭当前打开的Odb对象
getFrame() 返回指定时间或者频率或者模态附近的数据帧
…… ……
成员变量 isReadOnly 当前Odb对象是否只读的标志
interactions interaction对象仓库
interactionProperties interactionProperties对象仓库
amplitudes Amplitude对象仓库
rootAssembly OdbAssembly对象
parts OdbPart对象仓库
materials Material对象仓库
steps Odbstep对象仓库
sections Section对象仓库
profiles Profile对象仓库

Odb对象的成员信息

Odb的数据结构

节点与单元的访问

节点与单元信息存储在rootassembly对象中。

o=session.openOdb(name='test.odb',readOnly=False)
a=o.rootAssembly
i=a.instances
i1=i['part-1']

#part-1节点
ns=i1.nodes
#part-1单元
es=i1.elements

#输入第一个节点的编号、坐标、所属instance名
print (ns[0].label,ns[0].coordinates,ns[0].instanceName)
#输出第一个单元的编号、包括的节点、所属instance名,单元类型
print (es[0].label,es[0].connectivity,es[0].instanceName,es[0].type)

#查找节点或者单元信息
node20=i1.getNodeFromLabel(label=20)
ele20=i1.getElementFromLabel(label=20)

节点、 单元集合对象

o=session.openOdb(name='test.odb',readOnly=False)
a=o.rootAssembly
i=a.instances
i1=i['part-1']
i2=i['part-2']
#使用节点对象建立集合
nodes1=i1.nodes[1:10]#获取part1节点对象序列
nodes2=i2.nodes[1:10]#获取part2节点对象序列
setOnpart1=i1.NodeSet(name='setOnpart1',nodes=node1)
setOnAssembly=a.NodeSet(name='setOnAssembly',nodes=(node1,node2))
#使用节点编号建立集合
label1=[2,3,5]
label2=[1,7,8]
setOnpart1=i1.NodeSetFromNodeLabels(name='setOnpart1',nodeLabels=(label1,))
setOnAssembly=a.NodeSetFromNodeLabels(name='setOnAssembly',nodeLabls=(('part-1',label1),('part-2',label2),))

#单元集合的建立方式类似

结果数据读取

  1. 场输出fieldOutputs的使用。

    import os,os.path
    from odbAccess import *
    dir_path='D:/Tower section research'
    files=os.listdir(dir_path)
    odbs=[file for file in files if '.odb' in file]
    list_stress=[]
    for odb in odbs:
       o=openOdb(path=odb,readOnly=False)
       f1=o.steps['Step-1'].frames[-1]
       fop=f1.fieldOutputs
       fops=fop['S']
       max_stress=max(fops.values[i].mises for i in range(len(fops.values)))
       list_stress.append([odb,max_stress])  
    
  2. 历史输出historyOutputs的使用

    from odbAccess import *
    ...
    step=o.steps['Step-1']
    hr=step.historyRegions
    #第一个历史输出步
    hr0=hr[hr.keys()[0]]
    hop=hro.historyOutputs
    allae=hop['ALLAE']#系统伪应变能
    allie=hop['ALLIE']#系统内能