2021-05-24

该博客文章提供了一个使用ABAQUS进行 Cantilever Beam 的静态分析教程。首先创建了模型、视口和材料属性,然后定义了固定边界条件和荷载。接着,进行了网格划分并提交作业进行求解。最后,展示了分析结果并输出了Mises等值线图。
摘要由CSDN通过智能技术生成
#!/user/bin/python
# -* - coding:UTF-8 -*-
#cantilever beam

from abaqus import *
import testUtils
testUtils.setBackwardCompatibility()
from abaqusConstants import *
Mdb()

#建立模型
myModel = mdb.Model(name='Beam')

# 创建新视口来显示模型和分析结果。
myViewport = session.Viewport(name='Cantilever Beam Example',
    origin=(20, 20), width=150, height=120)
    
# 导入part模块。
import part

# 创建基础特征的草图。
mySketch = myModel.ConstrainedSketch(name='beamProfile',sheetSize=250.)

# 绘制矩形截面。
xyCoordsInner = ((10,0),(10,5),(2.5,5),(2.5,20),(10,20),(10,25),(-10,25),(-10,20),(-2.5,20),(-2.5,5),(-10,5),(-10,0),(10,0))
for i in range(12): mySketch.Line(point1=xyCoordsInner[i],point2=xyCoordsInner[i+1])

# 创建三维变形体部件。
myBeam = myModel.Part(name='Beam', dimensionality=THREE_D,
         type=DEFORMABLE_BODY)

# 通过对草图拉伸200.0来创建部件。
myBeam.BaseSolidExtrude(sketch=mySketch, depth=200.0)

# 导入material模块。
import material

# 创建材料。
mySteel = myModel.Material(name='Steel')

# 定义弹性材料属性,杨氏模量为209.E3,泊松比为0.3。
elasticProperties = (209.E3, 0.3)
mySteel.Elastic(table=(elasticProperties, ) )

# 导入section模块。
import section

# 创建实体截面。
mySection = myModel.HomogeneousSolidSection(name='beamSection',
    material='Steel', thickness=1.0)

# 为部件分配截面属性。
region = (myBeam.cells,)
myBeam.SectionAssignment(region=region,sectionName='beamSection')

# 导入assembly模块。
import assembly

# 创建部件实例。
myAssembly = myModel.rootAssembly
myInstance = myAssembly.Instance(name='beamInstance',part=myBeam, dependent=OFF)

# 导入step模块。
import step

# 在初始分析步Initial之后创建一个分析步。静力分析步的时间为1.0,初始增量为0.1。
myModel.StaticStep(name='beamLoad', previous='Initial', timePeriod=1.0,
   initialInc=0.1,description='Load the top of the beam.')

# 导入load模块。
import load

# 通过坐标找出端部所在面。
endFaceCenter = (0,25,200)
endFace = myInstance.faces.findAt((endFaceCenter,) )

# 在梁端部创建固定端约束。
endRegion = (endFace,)
myModel.EncastreBC(name='Fixed',createStepName='beamLoad',region=endRegion)

# 通过坐标找到上表面。
topFaceCenter = (0,25,100)
topFace = myInstance.faces.findAt((topFaceCenter,) )

# 在梁的上表面施加压力荷载。
topSurface = ((topFace, SIDE1), )
myModel.Pressure(name='Pressure', createStepName='beamLoad',
    region=topSurface, magnitude=2)

# 导入mesh模块。
import mesh

# 为部件实例指定单元类型。
region = (myInstance.cells,)
elemType = mesh.ElemType(elemCode=C3D8I, elemLibrary=STANDARD)
myAssembly.setElementType(regions=region, elemTypes=(elemType,))

#工字梁进行切分部件
a = mdb.models['Beam'].rootAssembly
c1 = a.instances['beamInstance'].cells
pickedCells = c1.getSequenceFromMask(mask=('[#1 ]', ), )
v11 = a.instances['beamInstance'].vertices
a.PartitionCellByPlaneThreePoints(point1=v11[4], point2=v11[18], 
    point3=v11[19], cells=pickedCells)

a = mdb.models['Beam'].rootAssembly
c1 = a.instances['beamInstance'].cells
pickedCells = c1.getSequenceFromMask(mask=('[#1 ]', ), )
v1 = a.instances['beamInstance'].vertices
a.PartitionCellByPlaneThreePoints(point1=v1[21], point2=v1[16], point3=v1[13], 
    cells=pickedCells)

a = mdb.models['Beam'].rootAssembly
c1 = a.instances['beamInstance'].cells
pickedCells = c1.getSequenceFromMask(mask=('[#1 ]', ), )
v11 = a.instances['beamInstance'].vertices
a.PartitionCellByPlaneThreePoints(point1=v11[1], point2=v11[0], point3=v11[8], 
    cells=pickedCells)

a = mdb.models['Beam'].rootAssembly
c1 = a.instances['beamInstance'].cells
pickedCells = c1.getSequenceFromMask(mask=('[#1 ]', ), )
v1 = a.instances['beamInstance'].vertices
a.PartitionCellByPlaneThreePoints(point1=v1[10], point2=v1[14], point3=v1[8], 
    cells=pickedCells)

a = mdb.models['Beam'].rootAssembly
c1 = a.instances['beamInstance'].cells
pickedCells = c1.getSequenceFromMask(mask=('[#10 ]', ), )
v11 = a.instances['beamInstance'].vertices
a.PartitionCellByPlaneThreePoints(point1=v11[17], point2=v11[14], 
    point3=v11[9], cells=pickedCells)

a = mdb.models['Beam'].rootAssembly
c1 = a.instances['beamInstance'].cells
pickedCells = c1.getSequenceFromMask(mask=('[#20 ]', ), )
v1 = a.instances['beamInstance'].vertices
a.PartitionCellByPlaneThreePoints(point1=v1[6], point2=v1[10], point3=v1[24], 
    cells=pickedCells)

# 为部件实例撒种子。
myAssembly.seedPartInstance(regions=(myInstance,), size=10.0)

# 为部件实例划分网格。
myAssembly.generateMesh(regions=(myInstance,))

# 显示划分网格后的梁模型。
myViewport.assemblyDisplay.setValues(mesh=ON)
myViewport.assemblyDisplay.meshOptions.setValues(meshTechnique=ON)
myViewport.setValues(displayedObject=myAssembly)

# 导入job模块。
import job

# 为模型创建并提交分析作业。
jobName = 'beam_tutorial'
myJob = mdb.Job(name=jobName, model='Beam',description='Cantilever beam tutorial')

# 等待分析作业完成。
myJob.submit()
myJob.waitForCompletion()
print 'The analysis has been completed successfully'

# 导入visualization模块。
import visualization

# 打开输出数据库,显示默认的等值线图。
myOdb = visualization.openOdb(path=jobName + '.odb')
myViewport.setValues(displayedObject=myOdb)
myViewport.odbDisplay.display.setValues(plotState=CONTOURS_ON_DEF)
myViewport.odbDisplay.commonOptions.setValues(renderStyle=FILLED)

# 将Mises等值线图输出为PNG格式的文件。
session.printToFile(fileName='Mises', format=PNG,  canvasObjects=(myViewport,))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值