- 积分
- 48
- 注册时间
- 2010-7-6
- 仿真币
-
- 最后登录
- 1970-1-1
|
本来是为上次那个后处理帖子准备的,不过当时没调试出来(主要是不知道怎么写ODB),这周花了些时间弄了一下。
实现的功能:
从一个odb结果文件中copy建立另一个新的ODB
本身可能没有多大意思,不过可以给入门的人作为一个例子用,涉及odb中material的读取,各种set的读取与建立。
另外:这个只针对我所附的INP的odb有效(CAX4R单元,轴对称问题),其他的odb需要对程序作相应修改。
-
- from odbAccess import *
- from abaqusConstants import *
- ##
- originODB = 'testODB.odb'
- odb0 = openOdb(path=originODB)
- ########
- from odbMaterial import *
- from odbSection import *
- from odbMaterial import *
- ##create odb file name odb1.odb
- analysisTitle0 = odb0.analysisTitle
- description0 = odb0.description
- myodb = Odb(name='myData',analysisTitle=analysisTitle0,description=description0,path='odb1.odb')
- root0 = odb0.rootAssembly
- parts0 = odb0.parts
- myroot = myodb.rootAssembly
- ##copy material from previous odb
- allMaterials = odb0.materials
- for material0 in allMaterials.values():
- Mname=material0.name
- Mmaterial=myodb.Material(name=Mname)
- if hasattr(material0,'elastic'):
- elastic = material0.elastic
- MEtype=elastic.type
- MEtemp=elastic.temperatureDependency
- MEdep=elastic.dependencies
- MEdata=elastic.table
- MEnocomp=elastic.noCompression
- MEnoten=elastic.noTension
- MEmodu=elastic.moduli
- Mmaterial.Elastic(type=MEtype,temperatureDependency=MEtemp, dependencies=MEdep,noCompression=MEnocomp, noTension=MEnoten,moduli=MEmodu, table=MEdata)
- if hasattr(material0,'plastic'):
- plastic = material0.plastic
- PEtable=plastic.table
- Mmaterial.Plastic(table=PEtable)
- ##copy sectioncategory from previous odb
- allsectionca = odb0.sectionCategories
- for sectionca0 in allsectionca.values():
- Sname=sectionca0.name
- Sdescri=sectionca0.description
- Spoint=sectionca0.sectionPoints
- mysectionca=myodb.SectionCategory(name=Sname,description=Sdescri)
- ##copy section from previous odb
- from odbSection import *
- allSections = odb0.sections
- for Section0 in allSections.values():
- if type(Section0) == HomogeneousSolidSectionType:
- mysectionN=Section0.name
- mysectionM=Section0.material
- mysectiont=Section0.thickness
- mysection=myodb.HomogeneousSolidSection(name=mysectionN,material=mysectionM,thickness=mysectiont)
- ##create part
- for part0 in parts0.values():
- mypart=myodb.Part(name=part0.name,embeddedSpace=THREE_D,type=part0.type)
- instName0=part0.name+'-1'
- inst0=root0.instances[instName0]
- mynodes=inst0.nodes
- myelements=inst0.elements
- nodelist=[]
- for i in range(len(mynodes)):
- idnodes=(mynodes[i].label,mynodes[i].coordinates[0],mynodes[i].coordinates[1],mynodes[i].coordinates[2])
- nodelist.append(idnodes)
- elemlist=[]
- for i in range(len(myelements)):
- idelem=(myelements[i].label,myelements[i].connectivity[0],myelements[i].connectivity[1],myelements[i].connectivity[2],myelements[i].connectivity[3])
- elemlist.append(idelem)
- mypart.addNodes(nodeData=nodelist,nodeSetName=part0.name)
- mypart.addElements(elementData=elemlist, type='CAX4R', elementSetName=part0.name, sectionCategory=mysectionca)
- ##create instance & nodeset & elementset
- instanceN=[]
- for instance0 in root0.instances.values():
- instanceN.append(instance0.name)
- mypart=myodb.parts[instance0.name[:-2]]
- myinstance=myroot.Instance(name=instance0.name,object=mypart)
- for nodeset0 in root0.nodeSets.values():
- nodeset0Label=[]
- for i in range(len(instanceN)):
- nodeset0Label.append([instanceN[i],[]])
- for node in nodeset0.nodes[0]:
- if node.instanceName==instanceN[i]:
- nodeset0Label[i][1].append(node.label)
- nodeset=myroot.NodeSetFromNodeLabels(name=nodeset0.name,nodeLabels=nodeset0Label)
- for eleset0 in root0.elementSets.values():
- eleset0Label=[]
- for i in range(len(instanceN)):
- eleset0Label.append([instanceN[i],[]])
- for element in eleset0.elements[0]:
- if element.instanceName==instanceN[i]:
- eleset0Label[i][1].append(element.label)
- eleset=myroot.ElementSetFromElementLabels(name=eleset0.name,elementLabels=eleset0Label)
- ## assign section to instance
- eleset0=root0.elementSets[' ALL ELEMENTS']
- eleset0Label=[]
- for i in range(len(instanceN)):
- eleset0Label=[]
- for element in eleset0.elements[0]:
- if element.instanceName==instanceN[i]:
- eleset0Label.append(element.label)
- eleset=myroot.instances[instanceN[i]].ElementSetFromElementLabels(name=instanceN[i],elementLabels=eleset0Label)
- myroot.instances[instanceN[i]].assignSection(region=eleset,section=mysection)
- #for surface0 in root0.surface.values():
- # print surface0.name
- ##
- for step0 in odb0.steps.values():
- myname=step0.name
- mydescription=step0.description
- mydomain=step0.domain
- mytimePeriod=step0.timePeriod
- mypreviousStepName=step0.previousStepName
- mytotalTime=step0.totalTime
- mystep=myodb.Step(name=myname,description=mydescription,domain=mydomain,timePeriod=mytimePeriod,previousStepName=mypreviousStepName,totalTime=mytotalTime)
- firstFrame = step0.frames[0]
- myframeincr=firstFrame.incrementNumber
- myframevalue=firstFrame.frameValue
- myframedescription=firstFrame.description
- frame0 = mystep.Frame(incrementNumber=myframeincr,frameValue=myframevalue,description=myframedescription)
- for foutput in firstFrame.fieldOutputs.values():
- frame0.FieldOutput(foutput)
- lastFrame = step0.frames[-1]
- myframeincr=lastFrame.incrementNumber
- myframevalue=lastFrame.frameValue
- myframedescription=lastFrame.description
- frame1 = mystep.Frame(incrementNumber=myframeincr,frameValue=myframevalue,description=myframedescription)
- for foutput in lastFrame.fieldOutputs.values():
- frame1.FieldOutput(foutput)
- ##
- odb0.close()
- myodb.save()
复制代码 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
×
评分
-
1
查看全部评分
-
|