Abaqus中输出场文件odb的数据结构及Python读取
2017-10-16 15:41
2006 查看
Abaqus所生成的Odb文件对象,包含了我们建模中的模型信息,比如:part;assembly;material;section;profiles;interaction等模型信息;在不考虑结果数据的情况下,我们可以把Odb对象与Model对象相对比开看,他们包含了有限元模型的大部分信息,Odb对象的成员信息如下:
下面是一个小实例,读取odb文件中的模型信息:
下面我们通过构造函数对odb对象进行操作:新建材料对象和属性
一、网格信息
从Odb结果文件中,我们可以得到就有独立网格部件的model对象,这是因为Odb对象存储了模型的基本网格组织信息,Odb对象中的孤立网格信息存在于rootAssembly对象。rootAseembly是odbAssembly的实例对象。
其中rootAssembly对象中具有以下的信息:
以上各属性的访问方式充分体现面向对象的编程思想,通过实例化类的实例来调用对象的属性,和属性值。
另外一部分就是结果信息,而Odb对象中的结果数据都是保存在steps对象仓库中;分为场变量结果(fieldOutputs)和历史变量结果(historyOutputs);
Odb的模型数据结构在参考手册的图解为:
根据图解路径所示,我们要访问Odb文件中的场输出数据就必须指定正确的访问路径和场路径索引;
如:
odb.steps[].frames[].filedOutputs[].values[]
odb.historyRegions[].historyOutput[]
其中‘[ ]’中我们可以指定具体的名称或者索引值。
一:场变量数据的对象信息:
二,应用实例:读取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 Model'].materials.keys> >>> m0 = m[m.keys()[0]] >>> print m0.name STEEL #获取材料的模型键值对信息 >>> print m0.density.table ((7.9e-09,),) >>> print m0.elastic.table ((210000.0, 0.3),) >>> print m0.elastic.type ISOTROPIC
下面我们通过构造函数对odb对象进行操作:新建材料对象和属性
#在当前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结果文件中,我们可以得到就有独立网格部件的model对象,这是因为Odb对象存储了模型的基本网格组织信息,Odb对象中的孤立网格信息存在于rootAssembly对象。rootAseembly是odbAssembly的实例对象。
其中rootAssembly对象中具有以下的信息:
以上各属性的访问方式充分体现面向对象的编程思想,通过实例化类的实例来调用对象的属性,和属性值。
另外一部分就是结果信息,而Odb对象中的结果数据都是保存在steps对象仓库中;分为场变量结果(fieldOutputs)和历史变量结果(historyOutputs);
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.append(node.coordinates) 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')
相关文章推荐
- ABAQUS二次开发悬臂梁以及ODB文件信息的读取
- Abaqus-利用python处理有多个instances的odb文件,得到inp模型数据用于前处理
- 使用python读取csv文件,并将数据更新至mysql
- python ! 点菜脚本 | 正则表达式 | 文件读取
- Python 读取文件示例
- Python 读取指定目录下的所有子目录及所有文件
- Python中的readlines函数读取到特殊字符时会截断导致文件读取不完整
- Python按行读取大文件
- python中使用文件的读取编码问题和简单正则使用(一)
- 用Python3读取CSV类型文件时出现无效字节延续的问题
- python读取超大文件
- python遍历文件夹,并进行文件读取的方法
- python下学生管理系统:从文件中读取30位学生的信息(含邮箱),并实现简单的增、删、查找、统计(邮箱使用人数)。---附程序哦!
- python 文件处理模块的使用,如何读取文件中数据
- 利用python 模块读取csv文件信息
- sublime python3中读取和写入文件时如何解决编码问题
- python读取文件夹中的文件
- python3使用pickle读取文件提示TypeError或者UnicodeDecodeError的解决办法
- Python学习数据结构、输入输出、文件对象
- 【python】如何批量读取文件夹的所有文件数据,os模块与open函数结合使用实例