您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > python后处理详解
3n&{0x0Tg)A's!l!Y本来这个打算发在一个针对python初学者的帖子里面,作为后处理的部分的,但是鉴于它比较重要所以单独列出来,希望用abaqus的都能看到,都可以根据这个里面的描述了解odb文件的数据结构,都能根据自己的要求读出自己需要的数据。如果能跟着我的这个流程走一遍,我相信这两个目的都不是问题。关键是自己要在自己的电脑上照这个流程运行一遍,看看结果,然后再根据自己的要求试着对自己的一个odb文件读一下数据,下一步就可以进一步扩展,把这些数据写入文本文件或者是excel了。%`'@(d$l'j#R2?4F0D)f2J8Y*N,i8l)g3w4a5q图1r;`9z#K:Z'h-N9n0D!o4h9D#Y$YOdb结构如图上所示(来自于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来进行解释说明的。7n(g2A;a0k1F-Z/~$z;J0A7[/w3G*qf.D0a图2#{)o#t%R,Q(t,T#X.\.Babaqus\CAE的命令行如上,Z'I4},f-U#?*x1^/h@3~9c&z2E1H首先我们需要用到读取odb文件的python包,得用到import。1.fromodbAccessimport*复制代码打开你要读的文件,这里就是viewer_tutorial.odb:1.odb=openOdb(r'c:\sujinghe\viewer_tutorial.odb')复制代码.K8B)j4~*v8b0A,|!o%]5a#P:m5`#o*V1_______________________________________________________________________________________查看这个odb文件的具体信息:(H\0P3r&l,~8E.q&wo1.printodb复制代码n:S'j$T%V5\*w*a8M输出如下:7K'f%D|4G0_6y({'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'})8Z*M-@$p&G0L`可以显示各种数据的储存格式,其中可以看到OdbAssemblyobject存放当前odb的Assembly相关信息,而其他的Repositoryobject表示当前对象存储在类似字典类型的数据结构中。整体用()括起来表示这应该是一个对象,而后面{}里面的都是这个对象的成员(members),他们可以用odb.XXX来获得引用,下面逐一查看。$Q;xe0Y$J#w3s9E/o察看analysisTitle:1.printodb.analysisTitle复制代码即可.L7v+L1h+a1_2________________________________________________________________________________________________6u)M*d3L1JU*A.[u'X*A1VP/w4b察看rootAssembly:5z-F-B0Em9Q&A1.assembly=odb.rootAssembly9`&B*u7R(M*f:x5X2.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'})继续:printassembly.name,即可得到assembly的名字Assembly-1我们详细查看几个数据:nodes,instances,nodeSetsp:?K(NL2.11.node=assembly.nodes#wd(d(Y+L7b#G2.printlen(node)复制代码看到输出为0,odb中node信息应该单独存在每个instance中的。'V)p,W4?8W7q;D!r!Y;W0H'|4Q0e5RY,}'b2.21.inst=assembly.instances/o8I/G0g5o/e!^2.printinst复制代码(B2t+{1F7r输出:{'PART-1-1':'OdbInstanceobject'}0q7X-n3D7b'}2y0H1.inst=inst['PART-1-1']2.printinst复制代码输出:({'analyticSurface':None,'beamOrientations':'BeamOrientationArrayobject','elementSets':'Repositoryobject','elements':'OdbMeshElementArrayobject','embeddedSpace':AXISYMMETRIC,'materialOrientations':'MaterialOrientationArrayobject','name':'PART-1-1','nodeSets':'Repositoryobject','nodes':'OdbMeshNodeArrayobject','rebarOrientations':'RebarOrientationArrayobject','rigidBodies':'OdbRigidBodyArrayobject','sectionAssignments':'SectionAssignmentArrayobject','surfaces':'Repositoryobject','type':DEFORMABLE_BODY})5M(VI%b4t9Z2o)\0^*N可以看到上面列出了这个instance的各种信息(L!S.[$v'|9K5o2.2.1instance上面定义的elementSet1.printinst.elementSets复制代码E)[8p$|,G8K5_%j输出:{'CENT':'OdbSetobject','ETOP':'OdbSetobject','FOAM':'OdbSetobject','PMASS':'OdbSetobject','UPPER':'OdbSetobject'}只有{},这个表示这个对象是一个字典类型的数据,得用XXX[‘YYY’]来获得引用,比如1.printinst.elementSets['CENT']复制代码9z@&n/s0n,o2K输出:({'elements':'OdbMeshElementArrayobject','faces':None,'instances':None,'isInternal':False,'name':'CENT','nodes':None})1.printinst.elementSets['CENT'].elements复制代码输出:({'elements':'OdbMeshElementArrayobject','faces':None,'instances':None,'isInternal':False,'name':'CENT','nodes':None})1.printinst.elementSets['CENT'].elements复制代码6B$]:^:o\输出:['OdbMeshElementobject','OdbMeshElementobject','OdbMeshElementobject','OdbMeshElementobject','OdbMeshElementobject','OdbMeshElementobject','OdbMeshElementobject',。。。。继续深入:1.Ele=inst.elementSets['CENT'].elements[0]3v&q(S(~;P2i8[$q2.printEle复制代码输出:({'connectivity':(3,43,41,1),'instanceName':'PART-1-1','instanceNames':('PART-1-1','PART-1-1','PART-1-1','PART-1-1'),'label':1,'sectionCategory':'SectionCategoryobject','type':'CAX4'}),c)nC-J6^.zj'@可以看到单元集合中每个单元的详细数据,编号,节点,单元类型等,注意这个也是一个对象(用()括起来的),必须用XXX.XXX来引用,如Ele.connectivity。*W.g)O$w+]'K/x.Z(q)J#o9[2.2.2instance上面定义的nodeset-^$j%U3Z7{5?2N6h4x1.nodeset=inst.nodeSets2.printnodeset复制代码;G6O:E&}1x.n*f2p9@输出:{'ALLN':'OdbSetobject','BOT':'OdbSetobject','CENTER':'OdbSetobject','N1':'OdbSetobject','N19':'OdbSetobject','N
本文标题:python后处理详解
链接地址:https://www.777doc.com/doc-4211500 .html