Load命令:使用region参数指定施加荷载的区域
Mesh命令:使用region参数指定单元类型、网格种子的定义区域
Set命令:使用region参数定义节点集、单元集
#!/user/bin/python
# -* - coding:UTF-8 -*-
# 导入脚本中使用的各个模块
from abaqus import *
from abaqusConstants import *
from caeModules import *
#创建新模型 Model-1
myModel = mdb.models['Model-1']
# 创建新的视口
myViewport=session.Viewport(name='Region syntax',
origin=(20, 20), width=200, height=100)
# 创建一个草图,并绘制两个矩形
mySketch = myModel.ConstrainedSketch(name='Sketch A',
sheetSize=200.0)
mySketch.rectangle(point1=(-40.0, 30.0),
point2=(-10.0, 0.0))
mySketch.rectangle(point1=(10.0, 30.0),
point2=(40.0, 0.0))
# 对上面创建的两个矩形进行拉伸操作,生成三维部件
door = myModel.Part(name='Door',
dimensionality=THREE_D, type=DEFORMABLE_BODY)
door.BaseSolidExtrude(sketch=mySketch, depth=20.0)
# 创建部件实例
myAssembly = myModel.rootAssembly
doorInstance = myAssembly.Instance(name='Door-1',
part=door, dependent=OFF)
# 选择两个顶点
pillarVertices = doorInstance.vertices.findAt(
((-40,30,0),), ((40,0,0),) )
# 创建静力分析步(static)
myModel.StaticStep(name='impact',
previous='Initial', initialInc=1, timePeriod=1)
# 在选择的顶点上施加集中力
myPillarLoad = myModel.ConcentratedForce(
name='pillarForce', createStepName='impact',
region=(pillarVertices,), cf1=12.50E4)
# 选择两个面
topFace = doorInstance.faces.findAt(((-25,30,10),))
bottomFace = doorInstance.faces.findAt(((-25,0,10),))
# 在选择的面上施加压力(pressure)
# 对于同一部件实例的相同类型的实体,可以使用 + 号
myFenderLoad = myModel.Pressure(
name='pillarPressure', createStepName='impact',
region=((topFace+bottomFace, SIDE1),),
magnitude=10E4)
# 在同一部件实例上选择两条边
myEdge1 = doorInstance.edges.findAt(((10,15,20),))
myEdge2 = doorInstance.edges.findAt(((10,15,0),))
# 对一个面、两条边和两个顶点施加边界条件
myDisplacementBc= myModel.DisplacementBC(
name='xBC', createStepName='impact',
region=(pillarVertices, myEdge1+myEdge2,
topFace), u1=5.0)
# 使用面上的任意点选择两个面
faceRegion = doorInstance.faces.findAt(
((-30,15,20), ), ((30,15,20),))
# 创建包含两个面(face)的表面(surface)
mySurface = myModel.rootAssembly.Surface(
name='exterior', side1Faces=faceRegion)
# 使用这个表面来创建弹性地基(elastic foundation)
myFoundation = myModel.ElasticFoundation(
name='elasticFloor', createStepName='Initial',
surface=mySurface, stiffness=1500)
# 显示施加荷载和边界条件后的装配件
myViewport.setValues(displayedObject=myAssembly)
myViewport.assemblyDisplay.setValues(step='impact',
loads=ON, bcs=ON, predefinedFields=ON)
重点讲解:
28:调用findAt()方法时,里面点的坐标应是三维坐标,在二维平面内绘制草图时z坐标应为0;
42~45:在同一部件实例中,相同类型实体(topFace和bottomFace均为表面),可以使用“+”进行合并。
补充:用findAt捕捉点:
a1 = mdb.models['Model-1'].rootAssembly
v1 = a1.instances['Part-1-1'].vertices
verts1 = v1.findAt(((5.0,5.0,200.0),))
region = a1.Set(vertices=verts1, name='Set-2')
选择一条弧线进行加载:
import math
cood_x=5.0*math.sin(45.0/180.0*math.pi)
cood_y=5.0*math.cos(45.0/180.0*math.pi)
side1Edges3 =s1.findAt(((cood_x,cood_y,0.0),))
region3 = a.Surface(side1Edges=side1Edges3, name='Surf-1')
mdb.models['Model-1'].Pressure(name='Load-1', createStepName='Step-1',
region=region3, distributionType=UNIFORM, field='', magnitude=-pp,
amplitude=UNSET)
选择四个点施加集中力:
a1 = mdb.models['Model-1'].rootAssembly
v1 = a1.instances['Part-1-1'].vertices
verts1 = v1.findAt(((5.0,5.0,200.0),),((5.0,-5.0,200.0),),((-5.0,-5.0,200.0),),((-5.0,5.0,200.0),))
region = a1.Set(vertices=verts1, name='Set-2')
mdb.models['Model-1'].ConcentratedForce(name='Load-1', createStepName='Step-1',
region=region, cf3=1000.0, distributionType=UNIFORM, field='',
localCsys=None)
对于刚开始接触Python二次开发的童鞋们,强烈推荐大家一个利器:Python Reader
公众号内回复:reader即可自动获取
Pyhton Reader的用法:
打开Abaqus后,点击运行Python Reader,会出现如图所示:
右边那个框框就是PythonReader的界面,同学们先不要被这么多命令流吓到哈,这个小软件做的特别良心,你在软件里每操作一步,小框框里就会显示相应的命令流,并进行高亮,所以我们刚开始接触Python二次开发的时候这个小软件会帮助我们不少忙。给大家示范一下:把背景换为白色
View-Graphics Options-Viewport Background
这时会出现这样的画面:
小框框内高亮的部分即为刚刚的操作,将它复 制到软件下面命令行,即可通过命令流控制背景颜色了。
往期推荐
相关文章,在仿真秀官网搜索:
Python二次开发—创建输出数据库并添加数据
Python脚本——输出场输出数据
ABAQUS自定义插件制作
Abaqus二次开发之Python(1)