- 积分
- 9
- 注册时间
- 2010-5-13
- 仿真币
-
- 最后登录
- 1970-1-1
|
本帖最后由 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建模的一般思路
现在比较晚了哈,我也有点懒,没有做视图的切换,大家切换一下就可以正常显示模型了。还有就是自己加上荷载就可以计算
附图,弹性地基梁的变形和地基反力
代码:- # -*- coding: cp936 -*-
- from abaqus import *
- from abaqusConstants import *
- import connectorBehavior
- import math
- import mesh
- import numpy as np
- import os
- import regionToolset
- import step
- #准备数据
- Hei=0.6 #梁厚度
- pos=0.2 #泊松比
- ela=3.45E7 #弹模
- beam_len = 10 #梁长度
- stif = 1000 #单个地基弹簧刚度
- elastic = (ela , pos)
- #创建模型
- md_1 = mdb.Model(name='Beam on Plastic Foundation')
- #定义材料
- mat = md_1.Material(name='mat')
- mat.Elastic ( table = ( elastic,))
- #定义截面
- mat= md_1.RectangularProfile( name='beam' , a=1,b=Hei)
- #===============================================================================
- #开始画SKETCH
- ##画弹性地基梁
- sk_beam = md_1.ConstrainedSketch(name='beam', sheetSize = 100);
- sk_beam.Line( point1=(-beam_len/2,0), point2=(beam_len/2,0))
- ##细分地基梁
- kkk = sk_beam.geometry.keys()
- while max([sk_beam.geometry.getSize() for i in kkk])>1:
- for j in kkk:
- edg=sk_beam.geometry[j]
- sz = edg.getSize()
- if sz>1:
- v1,v2=edg.getVertices()
- cord1=v1.coords
- cord2=v2.coords
- print cord1, cord2
- mid_pt =( (cord1[0]+cord2[0])/2 , (cord1[1]+cord2[1])/2)
- sk_beam.Line ( point1=mid_pt, point2=cord2)
- sk_beam.Line ( point2=mid_pt, point1=cord1)
- sk_beam.delete( (edg,))
- kkk = sk_beam.geometry.keys()
- #===============================================================================
- #画完 sketch,添加到part中
- pt_beam = md_1.Part(name='beam',dimensionality=TWO_D_PLANAR,type=DEFORMABLE_BODY)
- pt_beam.BaseWire(sketch=sk_beam)
- #赋截面
- md_1.BeamSection(name='sec_beam', profile='beam',integration=DURING_ANALYSIS,
- material = 'mat')
- region = regionToolset.Region(edges = pt_beam.edges)
- pt_beam.SectionAssignment ( region=region, sectionName ='sec_beam',
- offsetType=MIDDLE_SURFACE)
- pt_beam.assignBeamSectionOrientation(region=region, method=N1_COSINES, n1=(0.0, 0.0,-1.0))
- #组装Assembly
- as_1 = md_1.rootAssembly
- ins_1 = as_1.Instance(name='beam',part = pt_beam,dependent=ON)
- ###===============================================================================
- #画wire
- #画AXIAL连接单元,定义受压不受拉的弹簧单元
- rfid1=[]
- rfid2=[]
- mer=1
- a = md_1.rootAssembly
- sec_conn_2 = md_1.ConnectorSection(name='Spring', translationalType=AXIAL)
- elastic_1 = connectorBehavior.ConnectorElasticity(components=(1, ), behavior=NONLINEAR,
- table=((0.0, 1.0), (0.0, 0.0), (-stif, -1.0)))
- elastic_1.ConnectorOptions()
- mer=1
- v11 = a.instances['beam'].vertices
- csys=a.DatumCsysByThreePoints(origin=(0,0,0), point1= (0,10,0),
- point2=(10,10,0),name='Datum csys', coordSysType=CARTESIAN)
- for v in v11:
- md_1.sections['Spring'].setValues( behaviorOptions = (elastic_1, ) )
- p1on =(v.pointOn[0][0],v.pointOn[0][1]-1,v.pointOn[0][2])
- prf = a.ReferencePoint(point= p1on)
- as_1.WirePolyLine(points=((as_1.referencePoints[prf.id],v), ), mergeWire=False, meshable=False)
- edge1 = as_1.edges.findAt( (p1on, ) )
- as_1.Set ( name='tmp' , edges=edge1 )
- region = regionToolset.Region(edges=as_1.sets['tmp'].edges)
- csa=as_1.SectionAssignment(sectionName='Spring',region=region)
- dt=as_1.datums[csys.id]
- as_1.ConnectorOrientation( region=csa.getSet(), localCsys1 = dt)
- #建地基弹簧的集合
- if mer:
- as_1.Set( name='groundConnnector',edges=edge1 )
- mer=0
- else:
- as_1.SetByMerge( name='groundConnnector',sets=(as_1.sets['tmp'],as_1.sets['groundConnnector']))
- del as_1.sets['tmp']
- #给参考点建集合,加约束
- refs = tuple( [as_1.referencePoints for i in as_1.referencePoints.keys()])
- as_1.Set( referencePoints = refs, name='prfs')
- md_1.DisplacementBC(name='BC-prfs',
- createStepName='Initial',region=as_1.sets['prfs'], u1=SET, u2=SET, ur3=SET)
- verts = v11.findAt( ((-beam_len/2,0,0),),((beam_len/2,0,0),) )
- as_1.Set(vertices = verts, name='bc')
- md_1.DisplacementBC(name='fix-bc',
- createStepName='Initial',region=as_1.sets['bc'], u1=SET, u2=UNSET, ur3=UNSET,
- amplitude=UNSET, distributionType=UNIFORM, fieldName='', localCsys=None)
- #建立分析步
- as_1.Set(edges=ins_1.edges , name='all')
- st_1 = md_1.StaticStep(name='Step-1', previous='Initial',initialInc=0.1)
- #场变量
- reg=as_1.sets['all']
- md_1.FieldOutputRequest(name='F-Output-3',
- createStepName='Step-1', variables=('U', 'RF', 'SF'),region=reg )
- #画网格
- pt_beam.seedEdgeBySize(edges=pt_beam.edges, size=1, deviationFactor=0.1,
- constraint=FINER)
- elemType1 = mesh.ElemType(elemCode=B23, elemLibrary=STANDARD)
- pt_beam.setElementType ( regions=(pt_beam.edges,),elemTypes=(elemType1,))
- pt_beam.generateMesh()
- #===============================================================================
- #创建JOB
- mdb.Job(name='Job-1', model='Beam on Plastic Foundation')
复制代码 .py文件
前面又看了一下代码,代码里面有一个import numpy as np,我机器上能运行,大家用的话应该会提示错误,把这句删掉就行,因为后面的代码里面没有用到numpy模块
现在提一个问题~~
abaqus能不能用uel实现弹性地基梁,哪位前辈可以给点建议,或者给个例子? |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
×
评分
-
1
查看全部评分
-
|