Python处理Abaqus多实例odb文件以生成inp模型数据的方法

在一些情况下,odb文件中包含有多个instances,instances之间会有节点和单元是重合。很多情况下需要得到该odb模型数据,并将其导入hypermesh进行前处理。如果直接从abaqus中得到odb模型数据的inp输入导入到hypermesh中,会有重合节点和单元报错,然而利用python可以解决该问题。代码参考如下:

################################################
from abaqus import *
from abaqusConstants import *
from viewerModules import *
import math
from odbAccess import *
################################################
myPath='D:/2017/model/*.odb'
datapath='D:/2017/model/'
dataoutput=datapath+'engine.inp'
odb=openOdb(path=myPath)
################################################
myassembly=odb.rootAssembly
myinstances=myassembly.instances
################################################
types=locals()
for instanceEach in myinstances.keys():
        name=instanceEach.replace('-','_')
        instanceNum.append(name)
        types['elemDic_%s'%name]={}
        types['nodeDic_%s'%name]={}
        types['nodeList_%s'%name]=[]
        for elementEach in myinstances[instanceEach].elements:
                elementType=elementEach.type       
                if 'C3D' in elementType:
                        types['nodeList_%s'%name].extend(list(elementEach.connectivity))
                        types['elemDic_%s'%name][elementEach.label]=elementEach.connectivity
        types['nodeList_%s'%name]=list(set(types['nodeList_%s'%name]))
        for nodeEach in myinstances[instanceEach].nodes:
                types['nodeDic_%s'%name][nodeEach.label]=nodeEach.coordinates        
################################################
k=0
for name in instanceNum:
        elemidMin=min(types['elemDic_%s'%name].keys())
        elemidMax=max(types['elemDic_%s'%name].keys())
        if elemidMin<k:
                for elementLabel in types['elemDic_%s'%name].keys():
                        elemnewid=elementLabel+k
                        types['elemDic_%s'%name][elemnewid]=types['elemDic_%s'%name].pop(elementLabel)
                elemidMax=max(types['elemDic_%s'%name].keys())
                k=elemidMax
        else:
                k=elemidMax
################################################
k=0
for name in instanceNum:
        nodeidMin=min(types['nodeList_%s'%name])
        nodeidMax=max(types['nodeList_%s'%name])
        if nodeidMin<k:
                for elementLabel, elementConnect in types['elemDic_%s'%name].items():
                        elementnewConnect=[]
                        for connectEach in elementConnect:
                                connectnewEach=connectEach+k
                                elementnewConnect.append(connectnewEach)
                for nodeEach in types['nodeList_%s'%name]:
                        nodesOutput[nodeEach+k]=types['nodeDic_%s'%name][nodeEach]
                nodeidMax=max(types['nodeList_%s'%name])+k
                k=nodeidMax
        else:
                for nodeEach in types['nodeList_%s'%name]:
                        nodesOutput[nodeEach]=types['nodeDic_%s'%name][nodeEach]
                k=nodeidMax
################################################
typeNum=[]
for name in instanceNum:
        for elementLabel, elementConnect in types['elemDic_%s'%name].items():
                k=len(elementConnect)
                if locals().has_key('typeList%s'%k):
                        types['typeList%s'%k][elementLabel]=elementConnect
                else:
                        types['typeList%s'%k]={}
                        typeNum.append(k)
                        types['typeList%s'%k][elementLabel]=elementConnect
################################################
outputfile=open(dataoutput,'w')
data='*NODE, NSET=NALL'
outputfile.write(str(data))
outputfile.write('\n')

for nodeLabel,nodeCoordinates in nodesOutput.items():
        data='%15u%2s%10.5f%2s%10.5f%2s%10.5f'%(nodeLabel, ',', nodeCoordinates[0], ',', nodeCoordinates[1], ',', nodeCoordinates[2])
        outputfile.write(str(data))
        outputfile.write('\n')

for typeEach in typeNum:
        data='*ELEMENT,TYPE=C3D' + str(typeEach) + ',ELSET=C3D'+str(typeEach)
        outputfile.write(str(data))
        outputfile.write('\n')
        for elementLabel, elementconnect in types['typeList%s'%typeEach].items():
                data='%15u'%(elementLabel)
                for i in range(0,typeEach):
                        data=data + '%2s%15u'%(',', elementconnect[i])
                outputfile.write(str(data))
                outputfile.write('\n')

outputfile.close()
################################################

该代码用于导出odb模型数据的所有的3D单元及相关的节点。



免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空