本来这个打算发在一个针对python初学者的帖子
/thread-988814-1-1.html里面,作为后处理的部分的,但是鉴于它比较重要所以单独列出来,希望用abaqus的都能看到,都可以根据这个里面的描述了解odb文件的数据结构,都能根据自己的要求读出自己需要的数据。如果能跟着我的这个流程走一遍,我相信这两个目的都不是问题。关键是自己要在自己的电脑上照这个流程运行一遍,看看结果,然后再根据自己的要求试着对自己的一个odb文件读一下数据,下一步就可以进一步扩展,把这些数据写入文本文件或者是excel了。
图1
Odb结构如图上所示(来自于doc),可以很明显地分成两部分:ModelData、ResultData。所以要获取节点信息,材料信息,part信息以及截面信息得用到odb.Assembly,odb.material,odb.parts,odb.sections;而要提取应力,应变等结果就得用到odb.steps。我们先一步步看看如何查看odb中的信息,最后汇总一下就知道如何写一个有特定功能的脚本了。
用的是例子中的odb,在abaquscommand命令行下输入:abaqusfetchjob=viewer_tutorial,在你的abaqus工作目录下就会有viewer_tutorial.odb文件。下面都是利用这个odb来进行解释说明的。
图2
abaqus\CAE的命令行如上
首先我们需要用到读取odb文件的python包,得用到import。
1.fromodbAccessimport*
复制代码
打开你要读的文件,这里就是viewer_tutorial.odb:
1.odb=openOdb(r'c:\sujinghe\viewer_tutorial.odb')
1_______________________________________________________________________________________
查看这个odb文件的具体信息:
1.printodb
输出如下:
({'analysisTitle':'DYNAMICLOADINGOFANELASTOMERIC,VISCOELASTIC','closed':False,'customData':pythonobjectwrapper,'description':'DDBobject','diagnosticData':'OdbDiagnosticDataobject','isReadOnly':False,'jobData':'JobDataobject','materials':
'Repositoryobject','name':'c:/sujinghe/viewer_tutorial.odb','parts':'Repositoryobject',
'path':'c:/sujinghe/viewer_tutorial.odb','profiles':'Repositoryobject','readInternalSets':False,'rootAssembly':'OdbAssemblyobject','sectionCategories':'Repositoryobject',
'sections':'Repositoryobject','sectorDefinition':None,'steps':'Repositoryobject',
'userData':'UserDataobject'})
据结构中。整体用()括起来表示这应该是一个对象,而后面{}里面的都是这个对象的成员(members),他们可以用odb.XXX来获得引用,下面逐一查看。
察看analysisTitle:
1.printodb.analysisTitle
即可
2________________________________________________________________________________________________
察看rootAssembly:
1.assembly=odb.rootAssembly
2.printassembly
({'connectorOrientations':'ConnectorOrientationArrayobject','datumCsyses':'Repositoryobject','elementSets':'Repositoryobject','elements':'OdbMeshElementArrayobject',
'instances':'Repositoryobject','name':'Assembly-1','nodeSets':'Repositoryobject',
'nodes':'OdbMeshNodeArrayobject','pretensionSections':'OdbPretensionSectionArrayobject','rigidBodies':'OdbRigidBodyArrayobject','sectionAssignments':
'SectionAssignmentArrayobject','surfaces':'Repositoryobject'})
继续:print,即可得到assembly的名字Assembly-1
我们详细查看几个数据:nodes,instances,nodeSets
2.1
1.node=assembly.nodes
2.printlen(node)
看到输出为0,odb中node信息应该单独存在每个instance中的。