代码如下:
from abaqus import *
from abaqusConstants import *
import regionToolset
import sketch
import part
import material
import section
import assembly
import step
import mesh
import visualization
session.viewports['Viewport: 1'].setValues(displayedObject = None)
#Create model
model = mdb.models['Model-1']
#create sketch
mSketch = model.ConstrainedSketch(name = 'Model_Sketch', sheetSize = 5)
mSketch.rectangle(point1= (0.1,0.1), point2=(0.3,-0.1))
#create solid part from sketch
mPart = model.Part(name = 'Solid_Part' , type = DEFORMABLE_BODY, dimensionality = THREE_D)
mPart.BaseSolidExtrude(sketch =mSketch , depth = 5)
#create material
mMat = model.Material(name = 'steel')
mMat.Density(table = ((7872,),))
mMat.Elastic(table = ((200e9,0.29),))
#create and assign section
mSection = model.HomogeneousSolidSection(name='Model_Section' , material = 'steel')
mRegion = (mPart.cells,)
mPart.SectionAssignment(region = mRegion, sectionName = 'Model_Section')
#create instance
mInstance = model.rootAssembly.Instance(name='Model_Instance', part = mPart, dependent =ON)
#create load step
model.StaticStep(name='Static_Load', previous = 'Initial')
#fieldOutputvariables
model.fieldOutputRequests.changeKey(fromName = 'F-Output-1', toName = 'Field Outputs')
model.fieldOutputRequests['Field Outputs'].setValues(variables=('S','E','PEMAG','U','RF','CF'))
#apply pressure
topPt = (0.2,0.1,2.5)
topFace = mInstance.faces.findAt((topPt,))
topFaceRegion = regionToolset.Region(side1Faces = topFace)
model.Pressure(name = 'Model_Load', region = topFaceRegion, createStepName = 'Static_Load',
distributionType = UNIFORM, magnitude =10, amplitude=UNSET)
#bc
sidePt = (0.2,0,0)
sideFace = mInstance.faces.findAt((sidePt,))
sideFaceRegion = regionToolset.Region(faces = sideFace)
model.EncastreBC(name = 'Encastre' , region= sideFaceRegion, createStepName='Initial')
#generate mesh
elemType = mesh.ElemType(elemCode = C3D8R, elemLibrary = STANDARD, kinematicSplit = AVERAGE_STRAIN,
secondOrderAccuracy = OFF, hourglassControl = DEFAULT, distortionControl = DEFAULT )
inPt = (0.2,0,2.5)
mCells = mPart.cells.findAt((inPt,))
meshRegion = (mCells,)
#assign
mPart.setElementType(regions = meshRegion, elemTypes= (elemType,))
mPart.seedPart(size=0.2, deviationFactor = 0.1)
mPart.generateMesh()
mdb.Job(name='cantileverJob', model = 'Model-1', type = ANALYSIS, explicitPrecision = SINGLE,
nodalOutputPrecision = SINGLE, parallelizationMethodExplicit =DOMAIN, multiprocessingMode = DEFAULT,
numDomains = 1, userSubroutine = '', numCpus =1, memory = 50, memoryUnits = PERCENTAGE, scratch='',
echoPrint = OFF, modelPrint = OFF, contactPrint=OFF, historyPrint = OFF)
mdb.jobs['cantileverJob'].submit(consistencyChecking=OFF)
mdb.jobs['cantileverJob'].waitForCompletion()
beam_viewport = session.Viewport(name = 'Beam results viewport')
beam_Odb_Path= 'cantileverJob.odb'
an_odb_object = session.openOdb(name= beam_Odb_Path)
beam_viewport.setValues(displayedObject = an_odb_object)
beam_viewport.odbDisplay.display.setValues(plotState=(DEFORMED,))
重要代码讲解:
基于坐标点位置获取面id,并施加压力载荷
#apply pressure
topPt = (0.2,0.1,2.5) #面上坐标点
topFace = mInstance.faces.findAt((topPt,))
#获取面id
topFaceRegion = regionToolset.Region(side1Faces = topFace)
model.Pressure(name = 'Model_Load', region = topFaceRegion, createStepName = 'Static_Load',
distributionType = UNIFORM, magnitude =10, amplitude=UNSET)
边界约束:
#输入点坐标
sidePt = (0.2,0,0)
#获取面对象id
sideFace = mInstance.faces.findAt((sidePt,))
sideFaceRegion = regionToolset.Region(faces = sideFace)
#约束
model.EncastreBC(name = 'Encastre' , region= sideFaceRegion, createStepName='Initial')
生成网格:基于坐标点获取区域位置
#坐标点位置
inPt = (0.2,0,2.5)
mCells = mPart.cells.findAt((inPt,))
#获取区域id
meshRegion = (mCells,)
#对区域划分网格
mPart.setElementType(regions = meshRegion, elemTypes= (elemType,))
mPart.seedPart(size=0.2, deviationFactor = 0.1)
mPart.generateMesh()
运行脚本
结果: