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

[二次开发] 用PYTHON实现弹性地基梁

[复制链接]
发表于 2011-4-13 21:53:02 | 显示全部楼层 |阅读模式 来自 上海
本帖最后由 nbiao 于 2011-4-14 15:08 编辑

我是新手的,之前潜水比较多,在坛子里学了很多东西。
从开始学习python也要快一个月了,深感python的在abaqus中的例子很少,帮助文档也不够特别清楚,abaqus自己的python类使用起来也特别麻烦。所以想和大家交流一下,共同提高

因为回答了论坛里面几个朋友关于python的一些问题,被版主zsq-w加分了,感谢版主对我的支持哈!~~
应版主的要求,现在用python做一个弹性地基梁的例子。
这个例子中几个可以看看的地方有:
1、python用连接单元实际单向受压的地基弹簧
2、python中批量选择wire赋连接单元属性
3、python实现集合set的合并
4、python建模的一般思路

现在比较晚了哈,我也有点懒,没有做视图的切换,大家切换一下就可以正常显示模型了。还有就是自己加上荷载就可以计算
附图,弹性地基梁的变形和地基反力




代码:
  1. # -*- coding: cp936 -*-
  2. from abaqus import *
  3. from abaqusConstants import *

  4. import connectorBehavior
  5. import math
  6. import mesh
  7. import numpy as np
  8. import os
  9. import regionToolset
  10. import step

  11. #准备数据
  12. Hei=0.6  #梁厚度
  13. pos=0.2  #泊松比
  14. ela=3.45E7 #弹模
  15. beam_len = 10 #梁长度
  16. stif = 1000 #单个地基弹簧刚度
  17. elastic = (ela , pos)
  18. #创建模型
  19. md_1 = mdb.Model(name='Beam on Plastic Foundation')
  20. #定义材料
  21. mat = md_1.Material(name='mat')
  22. mat.Elastic ( table = ( elastic,))
  23. #定义截面
  24. mat= md_1.RectangularProfile( name='beam' , a=1,b=Hei)

  25. #===============================================================================
  26. #开始画SKETCH
  27. ##画弹性地基梁
  28. sk_beam = md_1.ConstrainedSketch(name='beam', sheetSize = 100);
  29. sk_beam.Line( point1=(-beam_len/2,0), point2=(beam_len/2,0))
  30. ##细分地基梁
  31. kkk = sk_beam.geometry.keys()
  32. while max([sk_beam.geometry.getSize() for i in kkk])>1:
  33.     for j in kkk:
  34.         edg=sk_beam.geometry[j]
  35.         sz = edg.getSize()
  36.         if sz>1:
  37.             v1,v2=edg.getVertices()
  38.             cord1=v1.coords
  39.             cord2=v2.coords
  40.             print cord1, cord2
  41.             mid_pt =( (cord1[0]+cord2[0])/2 , (cord1[1]+cord2[1])/2)
  42.             sk_beam.Line ( point1=mid_pt, point2=cord2)
  43.             sk_beam.Line ( point2=mid_pt, point1=cord1)
  44.             sk_beam.delete( (edg,))
  45.         kkk = sk_beam.geometry.keys()
  46. #===============================================================================
  47. #画完 sketch,添加到part中
  48. pt_beam = md_1.Part(name='beam',dimensionality=TWO_D_PLANAR,type=DEFORMABLE_BODY)
  49. pt_beam.BaseWire(sketch=sk_beam)
  50. #赋截面
  51. md_1.BeamSection(name='sec_beam', profile='beam',integration=DURING_ANALYSIS,
  52.                  material = 'mat')
  53. region = regionToolset.Region(edges = pt_beam.edges)
  54. pt_beam.SectionAssignment ( region=region, sectionName ='sec_beam',
  55.                                 offsetType=MIDDLE_SURFACE)
  56. pt_beam.assignBeamSectionOrientation(region=region, method=N1_COSINES, n1=(0.0, 0.0,-1.0))
  57. #组装Assembly
  58. as_1  = md_1.rootAssembly
  59. ins_1 = as_1.Instance(name='beam',part = pt_beam,dependent=ON)
  60. ###===============================================================================
  61. #画wire
  62. #画AXIAL连接单元,定义受压不受拉的弹簧单元
  63. rfid1=[]
  64. rfid2=[]
  65. mer=1
  66. a = md_1.rootAssembly
  67. sec_conn_2 = md_1.ConnectorSection(name='Spring', translationalType=AXIAL)
  68. elastic_1 = connectorBehavior.ConnectorElasticity(components=(1, ), behavior=NONLINEAR,
  69.                                                   table=((0.0, 1.0), (0.0, 0.0), (-stif, -1.0)))
  70. elastic_1.ConnectorOptions()
  71. mer=1
  72. v11 = a.instances['beam'].vertices
  73. csys=a.DatumCsysByThreePoints(origin=(0,0,0), point1= (0,10,0),
  74.                                  point2=(10,10,0),name='Datum csys', coordSysType=CARTESIAN)
  75. for v in v11:
  76.     md_1.sections['Spring'].setValues(  behaviorOptions = (elastic_1, ) )
  77.     p1on =(v.pointOn[0][0],v.pointOn[0][1]-1,v.pointOn[0][2])
  78.     prf = a.ReferencePoint(point= p1on)
  79.     as_1.WirePolyLine(points=((as_1.referencePoints[prf.id],v), ), mergeWire=False, meshable=False)
  80.     edge1 = as_1.edges.findAt( (p1on, ) )
  81.     as_1.Set ( name='tmp' , edges=edge1 )
  82.     region = regionToolset.Region(edges=as_1.sets['tmp'].edges)
  83.     csa=as_1.SectionAssignment(sectionName='Spring',region=region)
  84.     dt=as_1.datums[csys.id]
  85.     as_1.ConnectorOrientation( region=csa.getSet(), localCsys1 = dt)
  86.     #建地基弹簧的集合
  87.     if mer:
  88.         as_1.Set( name='groundConnnector',edges=edge1 )
  89.         mer=0
  90.     else:
  91.         as_1.SetByMerge( name='groundConnnector',sets=(as_1.sets['tmp'],as_1.sets['groundConnnector']))
  92. del as_1.sets['tmp']
  93. #给参考点建集合,加约束
  94. refs = tuple( [as_1.referencePoints for i in as_1.referencePoints.keys()])
  95. as_1.Set( referencePoints = refs, name='prfs')
  96. md_1.DisplacementBC(name='BC-prfs',
  97. createStepName='Initial',region=as_1.sets['prfs'], u1=SET, u2=SET, ur3=SET)
  98. verts = v11.findAt( ((-beam_len/2,0,0),),((beam_len/2,0,0),) )
  99. as_1.Set(vertices = verts, name='bc')
  100. md_1.DisplacementBC(name='fix-bc',
  101.     createStepName='Initial',region=as_1.sets['bc'], u1=SET, u2=UNSET, ur3=UNSET,
  102.     amplitude=UNSET, distributionType=UNIFORM, fieldName='', localCsys=None)
  103. #建立分析步
  104. as_1.Set(edges=ins_1.edges , name='all')
  105. st_1 = md_1.StaticStep(name='Step-1', previous='Initial',initialInc=0.1)
  106. #场变量
  107. reg=as_1.sets['all']
  108. md_1.FieldOutputRequest(name='F-Output-3',
  109. createStepName='Step-1', variables=('U', 'RF', 'SF'),region=reg )
  110. #画网格
  111. pt_beam.seedEdgeBySize(edges=pt_beam.edges, size=1, deviationFactor=0.1,
  112. constraint=FINER)
  113. elemType1 = mesh.ElemType(elemCode=B23, elemLibrary=STANDARD)
  114. pt_beam.setElementType ( regions=(pt_beam.edges,),elemTypes=(elemType1,))
  115. pt_beam.generateMesh()
  116. #===============================================================================
  117. #创建JOB
  118. mdb.Job(name='Job-1', model='Beam on Plastic Foundation')
复制代码
.py文件

前面又看了一下代码,代码里面有一个import numpy as np,我机器上能运行,大家用的话应该会提示错误,把这句删掉就行,因为后面的代码里面没有用到numpy模块
现在提一个问题~~
abaqus能不能用uel实现弹性地基梁,哪位前辈可以给点建议,或者给个例子?

本帖子中包含更多资源

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

×

评分

1

查看全部评分

发表于 2011-4-14 14:56:12 | 显示全部楼层 来自 江苏无锡
Simdroid开发平台
很好!该例子可以深度挖掘。
回复 不支持

使用道具 举报

发表于 2011-4-14 17:09:21 | 显示全部楼层 来自 广东佛山
进来学习下啊
回复 不支持

使用道具 举报

发表于 2011-4-23 19:51:38 | 显示全部楼层 来自 安徽铜陵
abaqus是做什么用的?
回复 不支持

使用道具 举报

 楼主| 发表于 2011-4-24 21:23:42 | 显示全部楼层 来自 上海
4# guiwh

好可爱啊...来这个论坛逛
回复 不支持

使用道具 举报

发表于 2017-4-11 11:02:44 | 显示全部楼层 来自 中国
mergeWire=False运行时提示关键字错误怎么回事啊
回复 不支持

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 09:29 , Processed in 0.041874 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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