Python二次開發(fā)——findAt方法的正確食用方法

在講解 findAt() 方法之前,先讓我們簡單回顧一下Abaqus中需要指定區(qū)域(region)的情況吧~

Load命令:使用region參數(shù)指定施加荷載的區(qū)域

Mesh命令:使用region參數(shù)指定單元類型、網(wǎng)格種子的定義區(qū)域

Set命令:使用region參數(shù)定義節(jié)點(diǎn)集、單元集

當(dāng)我們在CAE中建立模型后,軟件會自動(dòng)為他們進(jìn)行編號,如節(jié)點(diǎn)編號、單元編號、各條邊等,如果我們在編寫腳本的時(shí)候選用模型的編號,一旦修改模型,編號將會全部打亂重新排列,會使腳本命令出現(xiàn)異常。另外Abaqus的新版本與老版本節(jié)點(diǎn)、單元編號順序可能也會出現(xiàn)不一樣。這時(shí)就體現(xiàn)出findAt方法的重要性啦~Python二次開發(fā)——findAt方法的正確食用方法的圖1
使用findAt方法可以捕捉包含該坐標(biāo)的邊、面或者模型中任意的點(diǎn),也可以是點(diǎn)的x、y、z坐標(biāo)(有沒有很強(qiáng)大!)
下面以曹老師書中的代碼為例詳細(xì)講解以下創(chuàng)建區(qū)域命令和findAt()方法的使用

#!/user/bin/python

# -* - coding:UTF-8 -*-

# 導(dǎo)入腳本中使用的各個(gè)模塊

from abaqus import *

from abaqusConstants import *

from caeModules import *

#創(chuàng)建新模型 Model-1

myModel = mdb.models['Model-1']

# 創(chuàng)建新的視口

myViewport=session.Viewport(name='Region syntax', 

               origin=(20, 20), width=200, height=100)

# 創(chuàng)建一個(gè)草圖,并繪制兩個(gè)矩形 

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))

# 對上面創(chuàng)建的兩個(gè)矩形進(jìn)行拉伸操作,生成三維部件

door = myModel.Part(name='Door',

    dimensionality=THREE_D, type=DEFORMABLE_BODY)

door.BaseSolidExtrude(sketch=mySketch, depth=20.0)

# 創(chuàng)建部件實(shí)例

myAssembly = myModel.rootAssembly

doorInstance = myAssembly.Instance(name='Door-1',

    part=door, dependent=OFF)

# 選擇兩個(gè)頂點(diǎn)

pillarVertices = doorInstance.vertices.findAt(

    ((-40,30,0),), ((40,0,0),) )

# 創(chuàng)建靜力分析步(static)

myModel.StaticStep(name='impact',

    previous='Initial', initialInc=1, timePeriod=1)

# 在選擇的頂點(diǎn)上施加集中力

myPillarLoad = myModel.ConcentratedForce(

    name='pillarForce', createStepName='impact',

    region=(pillarVertices,), cf1=12.50E4)

# 選擇兩個(gè)面

topFace = doorInstance.faces.findAt(((-25,30,10),))

bottomFace = doorInstance.faces.findAt(((-25,0,10),))

# 在選擇的面上施加壓力(pressure)

# 對于同一部件實(shí)例的相同類型的實(shí)體,可以使用 + 號

myFenderLoad = myModel.Pressure(

    name='pillarPressure', createStepName='impact',

    region=((topFace+bottomFace, SIDE1),),

    magnitude=10E4)

# 在同一部件實(shí)例上選擇兩條邊

myEdge1 = doorInstance.edges.findAt(((10,15,20),))

myEdge2 = doorInstance.edges.findAt(((10,15,0),))

# 對一個(gè)面、兩條邊和兩個(gè)頂點(diǎn)施加邊界條件

myDisplacementBc= myModel.DisplacementBC(

    name='xBC', createStepName='impact',

    region=(pillarVertices, myEdge1+myEdge2,

    topFace), u1=5.0)

# 使用面上的任意點(diǎn)選擇兩個(gè)面

faceRegion = doorInstance.faces.findAt(

    ((-30,15,20), ), ((30,15,20),))

# 創(chuàng)建包含兩個(gè)面(face)的表面(surface)

mySurface = myModel.rootAssembly.Surface(

    name='exterior', side1Faces=faceRegion)

# 使用這個(gè)表面來創(chuàng)建彈性地基(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)

重點(diǎn)講解:

28:調(diào)用findAt()方法時(shí),里面點(diǎn)的坐標(biāo)應(yīng)是三維坐標(biāo),在二維平面內(nèi)繪制草圖時(shí)z坐標(biāo)應(yīng)為0;

42~45:在同一部件實(shí)例中,相同類型實(shí)體(topFace和bottomFace均為表面),可以使用“+”進(jìn)行合并。

補(bǔ)充:用findAt捕捉點(diǎn):

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')

選擇一條弧線進(jìn)行加載:

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)

選擇四個(gè)點(diǎn)施加集中力:

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二次開發(fā)的童鞋們,強(qiáng)烈推薦大家一個(gè)利器:Python Reader

公眾號內(nèi)回復(fù):reader即可自動(dòng)獲取

Pyhton Reader的用法:

打開Abaqus后,點(diǎn)擊運(yùn)行Python Reader,會出現(xiàn)如圖所示:

Python二次開發(fā)——findAt方法的正確食用方法的圖2


右邊那個(gè)框框就是PythonReader的界面,同學(xué)們先不要被這么多命令流嚇到哈,這個(gè)小軟件做的特別良心,你在軟件里每操作一步,小框框里就會顯示相應(yīng)的命令流,并進(jìn)行高亮,所以我們剛開始接觸Python二次開發(fā)的時(shí)候這個(gè)小軟件會幫助我們不少忙。給大家示范一下:把背景換為白色

View-Graphics Options-Viewport Background

這時(shí)會出現(xiàn)這樣的畫面:

Python二次開發(fā)——findAt方法的正確食用方法的圖3

小框框內(nèi)高亮的部分即為剛剛的操作,將它復(fù)制到軟件下面命令行,即可通過命令流控制背景顏色了。

Python二次開發(fā)——findAt方法的正確食用方法的圖4

以上就是木木今天所要分享的內(nèi)容了

木木自費(fèi)搞了個(gè)小抽獎(jiǎng),大家有興趣可以參加哦~在公眾號(易木木響叮當(dāng))內(nèi)回復(fù)“木木向上沖!”即可參與

登錄后免費(fèi)查看全文
立即登錄
App下載
技術(shù)鄰APP
工程師必備
  • 項(xiàng)目客服
  • 培訓(xùn)客服
  • 平臺客服

TOP

9
2
28