Abaqus 中输出场⽂件odb 的数据结构及Python 读取
Abaqus所⽣成的Odb⽂件对象,包含了我们建模中的模型信息,⽐如:part;assembly;material;section;profiles;interaction等模型信息;在不考虑结果数据的情况下,我们可以把Odb对象与Model对象相对⽐开看,他们包含了有限元模型的⼤部分信息,Odb对象的成员信
息如下:
下⾯是⼀个⼩实例,读取odb⽂件中的模型信息:下⾯我们通过构造函数对odb对象进⾏操作:新建材料对象和属性
o = session.openOdb(name='HertzContact.odb',readOnly = False )#通过已有odb ⽂件来创建Odb 对象
>>> p = o.parts #获取访问odb 对象中的part 仓库
>>> print  p
{'ASSEMBLY': 'Part object', 'BALL': 'Part object', 'BASE': 'Part object'}
>>> m = o.materials #访问材料仓库
>>> print  m
{'STEEL': 'Material object'}
>>> print  m.keys
<AbaqusMethod  session.openOdb(r'C:/windows/system32/HertzContact.odb').models['Default Mod
el'].materials.keys>
>>> m0 = m[m.keys()[0]]
>>> print  m0.name
STEEL
#获取材料的模型键值对信息
>>> print  m0.density.table
((7.9e-09,),)
>>> print  m0.elastic.table
python怎么读取文件中的数据((210000.0, 0.3),)
>>> print  pe
ISOTROPIC
⼀、⽹格信息
从Odb结果⽂件中,我们可以得到就有独⽴⽹格部件的model对象,这是因为Odb对象存储了模型的基本⽹格组织信息,Odb对象中的孤⽴⽹格信息存在于rootAssembly对象。rootAseembly是odbAssembly的实例对象。
其中rootAssembly对象中具有以下的信息:
以上各属性的访问⽅式充分体现⾯向对象的编程思想,通过实例化类的实例来调⽤对象的属性,和属性值。
另外⼀部分就是结果信息,⽽Odb对象中的结果数据都是保存在steps对象仓库中;分为场变量结果(fieldOutputs)和历史变量结果(historyOutputs);
#在当前odb 对象o 中创建Newsteel 的新材料属性对象
m1 = o.Material(name='NewSteel')
#为m1添加密度对象参数
>>> m1.Density(table=((7.9e-09,),))
session.openOdb(r'C:/windows/system32/HertzContact.odb').models['DefaultModel'].materials['NewSteel'].options['density']
#为m1添加弹性对象属性
>>> m1.Elastic(table=((210000.0,0.3),),type=ISOTROPIC)
>>> print  m.keys()
['NewSteel', 'STEEL']#已经创建到材料库中
Odb的模型数据结构在参考⼿册的图解为:
根据图解路径所⽰,我们要访问Odb⽂件中的场输出数据就必须指定正确的访问路径和场路径索引; 如:
odb.steps[].frames[].filedOutputs[].values[]
odb.historyRegions[].historyOutput[]
其中‘[ ]’中我们可以指定具体的名称或者索引值。
⼀:场变量数据的对象信息:
⼆,应⽤实例:读取odb⽂件中的节点和坐标
# -*- coding: mbcs -*-
import os, os.path, sys
from odbAccess import *
from abaqusConstants import *
def extractNodes(odbname, tname, tpath=None):
if tpath==None:
tpath = os.getcwd()
tname = tname + '.inp'
oname = odbname+'.odb'
tFile=os.path.join(tpath,tname)
oPath=os.path.join(tpath,oname)
f = open(tFile, 'w')
o = openOdb(path=oPath)
instes = o.rootAssembly.instances
for key in instes.keys():
labels, xyz = [], []
for node in instes[key].nodes:
labels.append(node.label)
xyz.dinates)
cc = dict(zip(labels, xyz))
aa = sorted(labels)
bb = [cc[item] for item in aa]
f.write('*Instance '+instes[key].name+'\n')
for i in range(len(aa)):
tepS = str(aa[i])+', '+str(bb[i][0])+', '+str(bb[i][1])+', '+\
str(bb[i][2])+'\n'
f.write(tepS)
f.close()
o.close()
if __name__=="__main__":
extractNodes(odbname='HertzContact', tname='hertzcontact')

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