找回密码
 注册
Simdroid-非首页
查看: 652|回复: 8

[二次开发] abaqusPython后处理的非典型应用

[复制链接]
发表于 2011-7-8 16:53:30 | 显示全部楼层 |阅读模式 来自 上海
本来是为上次那个后处理帖子准备的,不过当时没调试出来(主要是不知道怎么写ODB),这周花了些时间弄了一下。

实现的功能:
从一个odb结果文件中copy建立另一个新的ODB

本身可能没有多大意思,不过可以给入门的人作为一个例子用,涉及odb中material的读取,各种set的读取与建立。
另外:这个只针对我所附的INP的odb有效(CAX4R单元,轴对称问题),其他的odb需要对程序作相应修改。

  1. from odbAccess import *
  2. from abaqusConstants import *
  3. ##
  4. originODB   =   'testODB.odb'
  5. odb0    =   openOdb(path=originODB)
  6. ########
  7. from odbMaterial import *
  8. from odbSection import *
  9. from odbMaterial import *
  10. ##create odb file name odb1.odb
  11. analysisTitle0  =   odb0.analysisTitle
  12. description0    =   odb0.description
  13. myodb = Odb(name='myData',analysisTitle=analysisTitle0,description=description0,path='odb1.odb')
  14. root0   =   odb0.rootAssembly
  15. parts0  =   odb0.parts
  16. myroot   =   myodb.rootAssembly
  17. ##copy material from previous odb
  18. allMaterials = odb0.materials
  19. for material0 in allMaterials.values():
  20.     Mname=material0.name
  21.     Mmaterial=myodb.Material(name=Mname)
  22.     if hasattr(material0,'elastic'):
  23.         elastic = material0.elastic
  24.         MEtype=elastic.type
  25.         MEtemp=elastic.temperatureDependency
  26.         MEdep=elastic.dependencies
  27.         MEdata=elastic.table
  28.         MEnocomp=elastic.noCompression
  29.         MEnoten=elastic.noTension
  30.         MEmodu=elastic.moduli
  31.         Mmaterial.Elastic(type=MEtype,temperatureDependency=MEtemp, dependencies=MEdep,noCompression=MEnocomp, noTension=MEnoten,moduli=MEmodu, table=MEdata)        
  32.     if hasattr(material0,'plastic'):
  33.         plastic = material0.plastic
  34.         PEtable=plastic.table
  35.         Mmaterial.Plastic(table=PEtable)
  36. ##copy sectioncategory from previous odb
  37. allsectionca = odb0.sectionCategories
  38. for sectionca0 in allsectionca.values():
  39.     Sname=sectionca0.name
  40.     Sdescri=sectionca0.description
  41.     Spoint=sectionca0.sectionPoints
  42.     mysectionca=myodb.SectionCategory(name=Sname,description=Sdescri)
  43. ##copy section from previous odb
  44. from odbSection import *
  45. allSections = odb0.sections
  46. for Section0 in allSections.values():
  47.     if type(Section0) == HomogeneousSolidSectionType:
  48.         mysectionN=Section0.name
  49.         mysectionM=Section0.material
  50.         mysectiont=Section0.thickness
  51.         mysection=myodb.HomogeneousSolidSection(name=mysectionN,material=mysectionM,thickness=mysectiont)
  52. ##create part
  53. for part0 in parts0.values():
  54.     mypart=myodb.Part(name=part0.name,embeddedSpace=THREE_D,type=part0.type)
  55.     instName0=part0.name+'-1'
  56.     inst0=root0.instances[instName0]
  57.     mynodes=inst0.nodes
  58.     myelements=inst0.elements
  59.     nodelist=[]
  60.     for i in range(len(mynodes)):
  61.         idnodes=(mynodes[i].label,mynodes[i].coordinates[0],mynodes[i].coordinates[1],mynodes[i].coordinates[2])
  62.         nodelist.append(idnodes)
  63.     elemlist=[]
  64.     for i in range(len(myelements)):
  65.         idelem=(myelements[i].label,myelements[i].connectivity[0],myelements[i].connectivity[1],myelements[i].connectivity[2],myelements[i].connectivity[3])
  66.         elemlist.append(idelem)
  67.     mypart.addNodes(nodeData=nodelist,nodeSetName=part0.name)
  68.     mypart.addElements(elementData=elemlist, type='CAX4R', elementSetName=part0.name, sectionCategory=mysectionca)
  69. ##create instance & nodeset & elementset
  70. instanceN=[]
  71. for instance0 in root0.instances.values():
  72.     instanceN.append(instance0.name)
  73.     mypart=myodb.parts[instance0.name[:-2]]
  74.     myinstance=myroot.Instance(name=instance0.name,object=mypart)
  75. for nodeset0 in root0.nodeSets.values():
  76.     nodeset0Label=[]
  77.     for i in range(len(instanceN)):
  78.         nodeset0Label.append([instanceN[i],[]])
  79.         for node in nodeset0.nodes[0]:        
  80.             if node.instanceName==instanceN[i]:
  81.                 nodeset0Label[i][1].append(node.label)
  82.     nodeset=myroot.NodeSetFromNodeLabels(name=nodeset0.name,nodeLabels=nodeset0Label)
  83. for eleset0 in root0.elementSets.values():
  84.     eleset0Label=[]
  85.     for i in range(len(instanceN)):
  86.         eleset0Label.append([instanceN[i],[]])
  87.         for element in eleset0.elements[0]:        
  88.             if element.instanceName==instanceN[i]:
  89.                 eleset0Label[i][1].append(element.label)
  90.     eleset=myroot.ElementSetFromElementLabels(name=eleset0.name,elementLabels=eleset0Label)
  91. ## assign section to instance
  92. eleset0=root0.elementSets[' ALL ELEMENTS']
  93. eleset0Label=[]
  94. for i in range(len(instanceN)):
  95.     eleset0Label=[]
  96.     for element in eleset0.elements[0]:
  97.         if element.instanceName==instanceN[i]:
  98.             eleset0Label.append(element.label)
  99.     eleset=myroot.instances[instanceN[i]].ElementSetFromElementLabels(name=instanceN[i],elementLabels=eleset0Label)
  100.     myroot.instances[instanceN[i]].assignSection(region=eleset,section=mysection)
  101. #for surface0 in root0.surface.values():
  102. #    print surface0.name
  103. ##
  104. for step0 in odb0.steps.values():
  105.     myname=step0.name
  106.     mydescription=step0.description
  107.     mydomain=step0.domain
  108.     mytimePeriod=step0.timePeriod
  109.     mypreviousStepName=step0.previousStepName
  110.     mytotalTime=step0.totalTime
  111.     mystep=myodb.Step(name=myname,description=mydescription,domain=mydomain,timePeriod=mytimePeriod,previousStepName=mypreviousStepName,totalTime=mytotalTime)
  112.     firstFrame = step0.frames[0]
  113.     myframeincr=firstFrame.incrementNumber
  114.     myframevalue=firstFrame.frameValue
  115.     myframedescription=firstFrame.description
  116.     frame0 = mystep.Frame(incrementNumber=myframeincr,frameValue=myframevalue,description=myframedescription)
  117.     for foutput in firstFrame.fieldOutputs.values():
  118.         frame0.FieldOutput(foutput)        
  119.     lastFrame = step0.frames[-1]
  120.     myframeincr=lastFrame.incrementNumber
  121.     myframevalue=lastFrame.frameValue
  122.     myframedescription=lastFrame.description
  123.     frame1 = mystep.Frame(incrementNumber=myframeincr,frameValue=myframevalue,description=myframedescription)
  124.     for foutput in lastFrame.fieldOutputs.values():
  125.         frame1.FieldOutput(foutput)
  126. ##
  127. odb0.close()
  128. myodb.save()
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

1

查看全部评分

 楼主| 发表于 2011-7-8 16:54:04 | 显示全部楼层 来自 上海
Simdroid开发平台
CreatODB
回复 不支持

使用道具 举报

 楼主| 发表于 2011-7-8 16:54:48 | 显示全部楼层 来自 上海
本帖最后由 JingheSu 于 2011-7-8 16:56 编辑

Surface 2X2 Data plot using abaqus

这两楼先占着,后面续上。
给自己一点压力,不然太懒了。
回复 不支持

使用道具 举报

发表于 2011-7-8 20:24:39 | 显示全部楼层 来自 浙江杭州
谢谢楼主的贡献!我相信python会红火起来~,特别有abaqus这个大牛
回复 不支持

使用道具 举报

发表于 2013-6-24 19:53:25 | 显示全部楼层 来自 北京
这个用处不是特别大  因为一般后处理和cae都是在同一个人的  不过楼主另外一个关于python后处理的还是很好的
回复 不支持

使用道具 举报

发表于 2014-11-12 20:41:30 | 显示全部楼层 来自 浙江杭州
楼主这个太厉害了。。我最近在学习Python写脚本,想创建新的odb,看了您上面这个例子,我想问个问题,如果我的模型里面,同时有4节点和8节点的单元,那生成新的odb时候,在create part,读取单元时候应该怎么写呀?(对应您的代码64~69行。)我现在采用的方法是判断节点数来分别读取,但在读取8节点的时候总是报错,该如何处理呀。如果能解决,不胜感激吖~~
回复 不支持

使用道具 举报

发表于 2015-1-24 16:38:39 | 显示全部楼层 来自 天津
楼主,我想知道怎样用python导出abaqus的。rpt文件,因为我想要那里面的应力,位移之类的数据。
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-6-29 18:35 , Processed in 0.039403 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表