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),))
#单元集合的建立方式类似
结果数据读取
场输出
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])
历史输出
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']#系统内能