2006年12月1日星期五

关于SAP2000和ABAQUS的文件转换问题

关于SAP2000和ABAQUS的文件转换问题
总是有一些时候必须在不同的软件中进行格式转换。最近遇到的问题是准备利用abaqus强大的弹塑性分析功能和SAP2000的快速建模功能来实现某些弹塑性动力时程分析。
由于SAP2000有比较明确的文件格式.S2K,那么可以通过一定的方式转换为ABAQUS的.DAT格式。
最简单的方法莫过于采用ABAQUS内置的PYTHON语言进行开发转换了,就可以省去中间软件的过程。
大概用一小段(2、30句)就可以实现几何方面的连接了。
下面是一段梁单元的转换过程。版本是sap2000 7.44,abaqus 6.5.1

这个文件保存为.py格式,第一第二句的文件名和目录改一下,可以实现sap2000中梁的就可以把7.44的sap2000的s2k文件转换成abaqus的dat文件了.(里面有一句梁单元赋予的话没有写,在导入abaqus之前,可以修改一下dat文件,:p,偷懒了

其实只是一种思路而已,程序本身并没有什么。
py文件的内容大致如下(由于blogspot会自动删除空格,下面的代码不能直接使用,还是下载那个py文件的好
f=open('e:/work/new/mys2k.s2k', 'r')
fw=open('e:/work/new/mys2k.inp', 'w')
print f
f.seek(0)
alllines=f.readlines()
i=0
for x in alllines:
i=i+1
j=0
for x in alllines:
if (x.find("JOINT\n")<>-1):
indexjoint=j
if (x=="RESTRAINT\n"):
indexres=j
if (x=="FRAME\n"):
indexframe=j
if (x=="LOAD\n"):
indexload=j
j=j+1
temp=indexjoint+1
temp1=indexres-1
fw.write("*node\n")
for x in alllines[temp:temp1]:
y=x.split(" ")
nodenum=y[2]
nodex=y[4]
nodexw=nodex[2:]
nodey=y[6]
nodeyw=nodey[2:]
nodez=y[8]
nodezw=nodez[2:]
all=nodenum+","+nodexw+","+nodeyw+","+nodezw
print all
fw.write(all)
temp2=indexframe+1
temp3=indexload-1
fw.write("*element\n")
for x in alllines[temp2:temp3]:
y=x.split(" ")
elenum=y[2]
eleij=y[4]
eleijw=eleij[2:]
all1=elenum+","+eleijw+"\n"
print all1
fw.write(all1)
f.close()
fw.close()