abaqus脚本快速建立单层k6(Kiewitt)空间网壳结构

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

#!/user/bin/python#coding:utf-8#########################################################本脚本用于在abaqus快速建立空间k6型单层网架############################################################考虑到网壳需要施加节点自重或者外荷载,或不同形的截面尺寸,建立节点set请用户自己访问数组Bfromabaqusimport*fromabaqusConstantsimport*importpartimportassemblyimportsketch#输入一些参数,我假设每层网架的圆都在一个半径为R的球面上,所以是一个球面网壳,用户可以随便设r和zR=6pi=3.1415926535898ax=-90#这个数是起始坐标轴的位置#这一步建立参考点,作为part,如果想在abaqus里建空间网架必须新建一个part再建空间线,abaqus只支持绘制平面草图p=mdb.models['Model-1'].Part(name='Part-1',dimensionality=THREE_D,type=DEFORMABLE_BODY)p.ReferencePoint(point=(0.0,0.0,R))p=mdb.models['Model-1'].parts['Part-1']importmathimportnumpyasnp#输入一个层数,就是你想要几个同心圆c=5#输入每层的半径,取递增比如1,2,3,4这样的间隔整数,当然也可以根据需要写公式或者直接输入r#比如r=[1,2,3,4,5]r=range(1,c+1)i=0ir=[]det=[]whileic:ir.append(i)i=i+1print[ir]session.viewports['Viewport:1'].view.setValues(session.views['Bottom'])#如果是球面网壳,自动计算各层在z方向上的高度#如果非球面网壳,请手动输入各层zz=[]foriinir:z.append(math.sqrt(R**2-r[i]**2))det.append(float(60.0000000/(i+1)))print(z=%r)%zprintdet#绘制节点n=0B=[0]*20000ii=1foriinir:theta1=0theta2=0num=0whiletheta2359:theta1=(theta2+ax)*pi/180xx=r[i]*np.cos(theta1)yy=r[i]*np.sin(theta1)B[ii]=p.DatumPointByCoordinate(coords=(xx,yy,z[i]))p=mdb.models['Model-1'].parts['Part-1']theta2=theta2+det[i]num=num+1ii=ii+1n=n+num#连接圆周线上的节点p=mdb.models['Model-1'].parts['Part-1']d=p.datumsn=int(n)i=int(1)forjinrange(1,c+1):foriinrange(3*(j-1)**2+3*(j-1)+1,3*j**2+3*j+1):p1=d[int(B[i].id)]ifi==3*j**2+3*j:p2=d[int(B[3*(j-1)**2+3*(j-1)+1].id)]else:p2=d[int(B[i+1].id)]p.WirePolyLine(points=((p1,p2)),mergeWire=OFF,meshable=ON)i=i+1#绘制其他线A=0iir=iriir.remove(0)foriiniir:A1=[]A=int(2*i+2)forjinrange(1,6):A1.append(A*j+1)nl=6*Ank=[]forkkinrange(0,nl):nk.append(0)nk[0]=3*i**2+3*i+1nk[1]=3*(i-1)**2+3*(i-1)+1k=0whileknl-2:ifk+2inA1:nk[k+2]=nk[k]else:nk[k+2]=nk[k]+1k=k+1nk[-1]=nk[-1]-6*iA2=[]forjinrange(1,7):A2=[]forjjinrange(1,A+1):A2.append(nk[jj+(j-1)*A-1])forjjinrange(1,A+1):ifjjA:p1=d[int(B[A2[jj-1]].id)]p2=d[int(B[A2[jj]].id)]p.WirePolyLine(points=((p1,p2)),mergeWire=OFF,meshable=ON)#建立视图session.viewports['Viewport:1'].setValues(displayedObject=p)

1 / 3
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功