Abaqus利用Python腳本建模實例

Abaqus利用Python腳本建模實例

1 概述

通過Python編寫的命令能夠通過Abaqus的內核執行,編寫Python腳本快速建模使Abaqus高級用戶經常使用的功能之一。本次以一個實例,說明通過Python腳本語言進行Abaqus有限元分析的過程,模型如圖1所示。

13.1.png

1 模型

2 過程

1)建模:代碼如下:

from abaqus import *       #引入模塊

from abaqusConstants import *

session.Viewport(name='Viewport: 1', origin=(0.0, 0.0), width=359.549987792969,

    height=234.613327026367)     #Viewport表示創建一個視圖,是Abaqus的函數

session.viewports['Viewport: 1'].makeCurrent()   #這里的viewport則表示視圖對象

session.viewports['Viewport: 1'].maximize()

from caeModules import *

from driverUtils import executeOnCaeStartup

executeOnCaeStartup()

session.viewports['Viewport: 1'].partDisplay.geometryOptions.setValues(

    referenceRepresentation=ON)

Mdb()        #模型庫

session.viewports['Viewport: 1'].setValues(displayedObject=None)

s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__',

    sheetSize=200.0)          #創建草圖窗口

g, v, d, c = s.geometry, s.vertices, s.dimensions, s.constraints

s.setPrimaryObject(option=STANDALONE)

s.rectangle(point1=(-20.0, -10.0), point2=(20.0, 10.0))  #創建矩形

s.CircleByCenterPerimeter(center=(0.0, 0.0), point1=(5.0, 0.0))   #創建圓

p = mdb.models['Model-1'].Part(name='Part-1', dimensionality=TWO_D_PLANAR,

    type=DEFORMABLE_BODY)

p = mdb.models['Model-1'].parts['Part-1']

p.BaseShell(sketch=s)

s.unsetPrimaryObject()

p = mdb.models['Model-1'].parts['Part-1']

session.viewports['Viewport: 1'].setValues(displayedObject=p)

del mdb.models['Model-1'].sketches['__profile__']

Abaqus命令行窗口輸入后窗口出現幾何模型如圖2.

13.2.png

2 幾何模型

2)切割。代碼如下:

p = mdb.models['Model-1'].parts['Part-1']

f = p.faces

pickedFaces = f.getSequenceFromMask(mask=('[#1 ]', ), )

v1, e, d1 = p.vertices, p.edges, p.datums

p.PartitionFaceByShortestPath(faces=pickedFaces, point1=p.InterestingPoint(

    edge=e[3], rule=MIDDLE), point2=p.InterestingPoint(edge=e[1], rule=MIDDLE))

p = mdb.models['Model-1'].parts['Part-1']

f = p.faces

pickedFaces = f.getSequenceFromMask(mask=('[#3 ]', ), )

v2, e1, d2 = p.vertices, p.edges, p.datums

p.PartitionFaceByShortestPath(faces=pickedFaces, point1=p.InterestingPoint(

    edge=e1[9], rule=MIDDLE), point2=p.InterestingPoint(edge=e1[2],

    rule=MIDDLE))

輸入后窗口為圖3

13.3.png

3 切分

3)材料屬性。代碼如下:

mdb.models['Model-1'].Material(name='Material-1')

mdb.models['Model-1'].materials['Material-1'].Elastic(table=((201000.0, 0.3),

    ))

mdb.models['Model-1'].HomogeneousSolidSection(name='Section-1',

    material='Material-1', thickness=1.0)

p = mdb.models['Model-1'].parts['Part-1']

f = p.faces

faces = f.getSequenceFromMask(mask=('[#f ]', ), )

region = p.Set(faces=faces, name='Set-1')

p = mdb.models['Model-1'].parts['Part-1']

p.SectionAssignment(region=region, sectionName='Section-1', offset=0.0,

    offsetType=MIDDLE_SURFACE, offsetField='',

    thicknessAssignment=FROM_SECTION)

輸入之后材料屬性即設置完畢,主要使彈性模量和泊松比。

4)建立組件。代碼如下:

a = mdb.models['Model-1'].rootAssembly

session.viewports['Viewport: 1'].setValues(displayedObject=a)

session.viewports['Viewport: 1'].assemblyDisplay.setValues(

    optimizationTasks=OFF, geometricRestrictions=OFF, stopConditions=OFF)

a = mdb.models['Model-1'].rootAssembly

a.DatumCsysByDefault(CARTESIAN)

p = mdb.models['Model-1'].parts['Part-1']

a.Instance(name='Part-1-1', part=p, dependent=ON)

5)建立載荷步。代碼如下:

mdb.models['Model-1'].StaticStep(name='Step-1', previous='Initial')

session.viewports['Viewport: 1'].assemblyDisplay.setValues(step='Step-1')

6)載荷與邊界。代碼如下:

a = mdb.models['Model-1'].rootAssembly

s1 = a.instances['Part-1-1'].edges

side1Edges1 = s1.getSequenceFromMask(mask=('[#1002 ]', ), )

region = a.Surface(side1Edges=side1Edges1, name='Surf-1')

mdb.models['Model-1'].Pressure(name='Load-1', createStepName='Step-1',

    region=region, distributionType=UNIFORM, field='', magnitude=-10.0,

    amplitude=UNSET)

a = mdb.models['Model-1'].rootAssembly

e1 = a.instances['Part-1-1'].edges

edges1 = e1.getSequenceFromMask(mask=('[#2100 ]', ), )

region = a.Set(edges=edges1, name='Set-1')

mdb.models['Model-1'].DisplacementBC(name='BC-1', createStepName='Step-1',

    region=region, u1=0.0, u2=0.0, ur3=UNSET, amplitude=UNSET, fixed=OFF,

    distributionType=UNIFORM, fieldName='', localCsys=None)

mdb.models['Model-1'].boundaryConditions['BC-1'].move('Step-1', 'Initial')

7)劃分網格。代碼如下:

p = mdb.models['Model-1'].parts['Part-1']

session.viewports['Viewport: 1'].setValues(displayedObject=p)

session.viewports['Viewport: 1'].partDisplay.setValues(mesh=ON)

session.viewports['Viewport: 1'].partDisplay.meshOptions.setValues(

    meshTechnique=ON)

session.viewports['Viewport: 1'].partDisplay.geometryOptions.setValues(

    referenceRepresentation=OFF)

p = mdb.models['Model-1'].parts['Part-1']

e = p.edges

pickedEdges = e.getSequenceFromMask(mask=('[#8250 ]', ), )

p.seedEdgeByNumber(edges=pickedEdges, number=12, constraint=FINER)

p = mdb.models['Model-1'].parts['Part-1']

p.seedPart(size=2.0, deviationFactor=0.1, minSizeFactor=0.1)

p = mdb.models['Model-1'].parts['Part-1']

p.seedPart(size=1.0, deviationFactor=0.1, minSizeFactor=0.1)

p = mdb.models['Model-1'].parts['Part-1']

p.generateMesh()

完成之后如圖4所示。

13.4.png

4 網格

8)創建Job求解。代碼如下:

a3 = mdb.models['Model-1'].rootAssembly

a3.regenerate()

a = mdb.models['Model-1'].rootAssembly

session.viewports['Viewport: 1'].setValues(displayedObject=a)

mdb.Job(name='Job-1', model='Model-1', description='', type=ANALYSIS,

    atTime=None, waitMinutes=0, waitHours=0, queue=None, memory=90,

    memoryUnits=PERCENTAGE, getMemoryFromAnalysis=True,

    explicitPrecision=SINGLE, nodalOutputPrecision=SINGLE, echoPrint=OFF,

    modelPrint=OFF, contactPrint=OFF, historyPrint=OFF, userSubroutine='',

    scratch='', multiprocessingMode=DEFAULT, numCpus=1, numGPUs=0)

mdb.jobs['Job-1'].submit(consistencyChecking=OFF)

 

全部執行完即可自動求解完成。

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

5
3
7