ABAQUS程序化建模教程(二)——模型的創(chuàng)建和批量修改【轉(zhuǎn)發(fā)】

2017-01-20  by:CAE仿真在線  來源:互聯(lián)網(wǎng)





太長不想看

1. 如何用python創(chuàng)建模型?

2. 如何用python批量剖分模型?

3. 你們還是仔細看看吧,別偷懶了。




上回小胖給大家介紹了Python與ABAQUS的一些相關(guān)基礎內(nèi)容(自己挖的坑,跪著也要填完),當然針對是菜鳥寶寶的。高手可以對本系列教程無視,只“贊賞”就好了。


ABAQUS程序化建模教程(二)——模型的創(chuàng)建和批量修改【轉(zhuǎn)發(fā)】abaqus有限元圖片1


后面我們具體講一下如何在CAE界面內(nèi)運行你所需要的命令。今天我們先講一下建模相關(guān)的。


ABAQUS程序化建模教程(二)——模型的創(chuàng)建和批量修改【轉(zhuǎn)發(fā)】abaqus有限元圖片2
Abaqus的Python版本

ABAQUS程序化建模教程(二)——模型的創(chuàng)建和批量修改【轉(zhuǎn)發(fā)】abaqus有限元圖片3


最近的4個Abaqus版本中,6.12和6.13采用的是Python 2.6.2, 6.14和2016(內(nèi)部版本6.16)采用的是Python 2.7.3。這可以在CAE界面中的Help-about abaqus中查詢得到。

ABAQUS程序化建模教程(二)——模型的創(chuàng)建和批量修改【轉(zhuǎn)發(fā)】abaqus有限元圖片4


Abaqus應該是集成了Python的基本程序包,所以各位應該不用擔心自己系統(tǒng)內(nèi)的Python會和Abaqus自帶的Python產(chǎn)生沖突。Python程序基本的功能,包括文件讀寫、函數(shù)運算甚至系統(tǒng)命令的調(diào)用,你都可以在CAE內(nèi)通過run script完成。借用 Simwe/Abaqus 吳聊SP版主的一句話——Abaqus采用Python做前后處理,簡直太英明了。


ABAQUS程序化建模教程(二)——模型的創(chuàng)建和批量修改【轉(zhuǎn)發(fā)】abaqus有限元圖片2
Part創(chuàng)建命令

ABAQUS程序化建模教程(二)——模型的創(chuàng)建和批量修改【轉(zhuǎn)發(fā)】abaqus有限元圖片3

小胖現(xiàn)在CAE里建立了這么一個三維塊體



ABAQUS程序化建模教程(二)——模型的創(chuàng)建和批量修改【轉(zhuǎn)發(fā)】abaqus有限元培訓資料圖片7


方法嘛,當然是part-create,然后通過sketch畫好截面圖后拉伸形成的啦。我們看看相關(guān)jnl文件中的對應命令是什么


ABAQUS程序化建模教程(二)——模型的創(chuàng)建和批量修改【轉(zhuǎn)發(fā)】abaqus有限元培訓資料圖片8

////////////////////////////////////////////////////////////////////////////////////////

from part import *
from material import *
from section import *
from assembly import *
from step import *
from interaction import *
from load import *
from mesh import *
from optimization import *
from job import *
from sketch import *
from visualization import *
from connectorBehavior import *

mdb.models['Model-1'].ConstrainedSketch(name='__profile__', sheetSize=200.0)
mdb.models['Model-1'].sketches['__profile__'].Line(point1=(0.0, 0.0), point2=(
15.0, 0.0))
mdb.models['Model-1'].sketches['__profile__'].HorizontalConstraint(
addUndoState=False, entity=
mdb.models['Model-1'].sketches['__profile__'].geometry[2])
mdb.models['Model-1'].sketches['__profile__'].Line(point1=(15.0, 0.0), point2=(
15.0, 15.0))
mdb.models['Model-1'].sketches['__profile__'].VerticalConstraint(addUndoState=
False, entity=mdb.models['Model-1'].sketches['__profile__'].geometry[3])
mdb.models['Model-1'].sketches['__profile__'].PerpendicularConstraint(
addUndoState=False, entity1=
mdb.models['Model-1'].sketches['__profile__'].geometry[2], entity2=
mdb.models['Model-1'].sketches['__profile__'].geometry[3])
mdb.models['Model-1'].sketches['__profile__'].Line(point1=(15.0, 15.0), point2=
(0.0, 15.0))
mdb.models['Model-1'].sketches['__profile__'].HorizontalConstraint(
addUndoState=False, entity=
mdb.models['Model-1'].sketches['__profile__'].geometry[4])
mdb.models['Model-1'].sketches['__profile__'].PerpendicularConstraint(
addUndoState=False, entity1=
mdb.models['Model-1'].sketches['__profile__'].geometry[3], entity2=
mdb.models['Model-1'].sketches['__profile__'].geometry[4])
mdb.models['Model-1'].sketches['__profile__'].Line(point1=(0.0, 15.0), point2=(
0.0, 0.0))
mdb.models['Model-1'].sketches['__profile__'].VerticalConstraint(addUndoState=
False, entity=mdb.models['Model-1'].sketches['__profile__'].geometry[5])
mdb.models['Model-1'].sketches['__profile__'].PerpendicularConstraint(
addUndoState=False, entity1=
mdb.models['Model-1'].sketches['__profile__'].geometry[4], entity2=
mdb.models['Model-1'].sketches['__profile__'].geometry[5])
mdb.models['Model-1'].Part(dimensionality=THREE_D, name='soil', type=
DEFORMABLE_BODY)
mdb.models['Model-1'].parts['soil'].BaseSolidExtrude(depth=20.0, sketch=
mdb.models['Model-1'].sketches['__profile__'])

/////////////////////////////////////////////////////////////////////////////

其實前面紅字部分的眾多import,只有part和sketch是對這一步創(chuàng)建part有用的。寶寶們可以通過命令mdb.models['Model-1'].sketches系列命令看出如何在命令窗口用Python操作sketch。


各個命令基本都有相應的CAE操作對應,舉個栗子:

mdb.models['Model-1'].Part(dimensionality=THREE_D, name='soil', type=
DEFORMABLE_BODY)

mdb.models['Model-1'].parts['soil'].BaseSolidExtrude(depth=20.0, sketch=
mdb.models['Model-1'].sketches['__profile__'])

就對應以下操作:


ABAQUS程序化建模教程(二)——模型的創(chuàng)建和批量修改【轉(zhuǎn)發(fā)】abaqus有限元資料圖片9


各位寶寶其實可以保存jnl文件,如果沒有CAE文件或相關(guān)文件丟失時,可以直接運行jnl中相關(guān)命令,很快可以恢復模型。事實上,Abaqus自己recovery的時候應該也是以jnl文件為依據(jù)的。


ABAQUS程序化建模教程(二)——模型的創(chuàng)建和批量修改【轉(zhuǎn)發(fā)】abaqus有限元圖片2
Part剖分命令

ABAQUS程序化建模教程(二)——模型的創(chuàng)建和批量修改【轉(zhuǎn)發(fā)】abaqus有限元圖片3


剖分的CAE操作,寶寶們想必已然很熟悉了。但在實際工程的模擬中,往往需要剖幾十次甚至上百次,這就不好玩了。比如一個隧道,需要模擬100步的開挖,那么就需要沿著軸線方向至少剖分100次。這種情況看起來比較復雜,其實還是有規(guī)律可循的——因為沿著軸線方向每隔比如2米就剖分一次,寶寶們很容易想到用循環(huán)命令?,F(xiàn)在小胖提供一個速成的方法。


我們還是以上邊那個三維實體為例,假如需要沿Z軸方向剖分100次,那么每次剖分間距即為20/100=0.2 m。在CAE中,我們通常直接選用cell的剖分模式。


ABAQUS程序化建模教程(二)——模型的創(chuàng)建和批量修改【轉(zhuǎn)發(fā)】abaqus有限元圖片12


如果需要用define cutting plane模式,那么需要沿Z軸先布置好對應的參考點(datum-point)。


ABAQUS程序化建模教程(二)——模型的創(chuàng)建和批量修改【轉(zhuǎn)發(fā)】abaqus有限元圖片13


ABAQUS程序化建模教程(二)——模型的創(chuàng)建和批量修改【轉(zhuǎn)發(fā)】abaqus有限元圖片14


我們以上圖箭頭所指向的點為參考點,沿Z軸正向偏移0.2,創(chuàng)建第一個datum point。然后保存,去jnl文件中查看相關(guān)命令:


mdb.models['Model-1'].parts['soil'].DatumPointByOffset(point=
mdb.models['Model-1'].parts['soil'].vertices[10], vector=(0.0, 0.0, 0.2))


我們看到最后一個vector=(0.0, 0.0, 0.2)那個命令中有0.2,就知道循環(huán)有望啊。按照以下命令:

from part import *
for i in range(1, 101):
mdb.models['Model-1'].parts['soil'].DatumPointByOffset(point=mdb.models['Model-1'].parts['soil'].vertices[10], vector=(0.0, 0.0, 0.2*i))


注意兩點:1. 不要忘了import;2.python循環(huán)計數(shù)是從0開始,循環(huán)至給定結(jié)尾的上一個整數(shù),對于我們上邊的例子也就是100。


先來看下效果:


ABAQUS程序化建模教程(二)——模型的創(chuàng)建和批量修改【轉(zhuǎn)發(fā)】abaqus有限元仿真圖片15


是不是很痛快?是不是覺得如果早知道,手就不用抽筋了?反正當時小胖是這么想的。我們再來看看剖分的命令能不能循環(huán)。先在CAE里剖分一下試試,看看jnl命令:


mdb.models['Model-1'].parts['soil'].PartitionCellByPlanePointNormal(cells=mdb.models['Model-1'].parts['soil'].cells.getSequenceFromMask(('[#1 ]', ), ), normal=mdb.models['Model-1'].parts['soil'].edges[1], point= mdb.models['Model-1'].parts['soil'].datums[105])


一臉懵逼啊,什么鬼啊?怎么還有亂碼亂入??getSequenceFromMask是哪國人?

ABAQUS程序化建模教程(二)——模型的創(chuàng)建和批量修改【轉(zhuǎn)發(fā)】abaqus有限元仿真圖片16

別著急?!?span style="color:#FF2941;">在做abaqus二次開發(fā)時,經(jīng)常會遇到getSequenceFromMask,里面給出的是一個掩碼編碼,一般不具備通用性,在參數(shù)化建?;蛘邇?yōu)化分析里面應避免使用它。”大家可以參考這個帖子

http://forum.simwe.com/forum.php?mod=viewthread&tid=1111700&highlight=abaqus%2Brpy%2Bmask


反正輸入命令

session.journalOptions.setValues(replayGeometry=INDEX,recoverGeometry=INDEX)

就對了。


然后我們看下命令形式是啥


mdb.models['Model-1'].parts['soil'].PartitionCellByPlanePointNormal(cells=mdb.models['Model-1'].parts['soil'].cells[0:1], normal=mdb.models['Model-1'].parts['soil'].edges[1], point=mdb.models['Model-1'].parts['soil'].datums[105])


是不是友好多啦?但datums后面中括號里的序號咋獲得?這個實際上可以通過建立datum point的時候采用命令


d=mdb.models['Model-1'].parts['soil'].DatumPointByOffset(point=mdb.models['Model-1'].parts['soil'].vertices[10], vector=(0.0, 0.0, 0.2))


獲得。如果需要獲取id,那么直接“d.id”即可。這樣,我們就可以重新來一遍,思路是先創(chuàng)建一個datum point,然后獲取datum的id,再接著創(chuàng)建partition。因為如果還采用define cutting plane的方法創(chuàng)建partition的話,中間需要edges等幾何信息都會隨著剖分的進行而改變,因此,我們需要一個全局不變的參考方式。我們這里選擇先定義切割平面。有了datum point,自然很容易創(chuàng)建切割平面。但需要一個參考軸。我們可以先定義一個,即Z軸


mdb.models['Model-1'].parts['soil'].DatumAxisByPrincipalAxis(principalAxis=ZAXIS)


然后此時,我們的datum point也不宜在用偏移的方式,寶寶們可以直接采用coordinate的方式來獲取命令,也就是下圖所示


ABAQUS程序化建模教程(二)——模型的創(chuàng)建和批量修改【轉(zhuǎn)發(fā)】abaqus有限元仿真圖片17


然后我們就可以進行剖分程序了??偟某绦蛉缦?


from part import *
a=mdb.models['Model-1'].parts['soil'].DatumAxisByPrincipalAxis(principalAxis=ZAXIS)
aid=a.id # 創(chuàng)建參考軸線
for i in range(1, 101):
d=mdb.models['Model-1'].parts['soil'].DatumPointByCoordinate(coords=(0.0, 0.0, 0.2*i)) #以坐標的方式創(chuàng)建參考點們
did=d.id #當前創(chuàng)建的參考點的id號
p=mdb.models['Model-1'].parts['soil'].DatumPlaneByPointNormal(normal=mdb.models['Model-1'].parts['soil'].datums[aid], point=mdb.models['Model-1'].parts['soil'].datums[did]) #創(chuàng)建參考平面,將用來切割模型
pid=p.id #參考平面的id號
mdb.models['Model-1'].parts['soil'].PartitionCellByDatumPlane(cells=mdb.models['Model-1'].parts['soil'].cells[:], datumPlane=mdb.models['Model-1'].parts['soil'].datums[pid])
#批量切割


我們來看看效果


ABAQUS程序化建模教程(二)——模型的創(chuàng)建和批量修改【轉(zhuǎn)發(fā)】abaqus有限元仿真圖片18



ABAQUS程序化建模教程(二)——模型的創(chuàng)建和批量修改【轉(zhuǎn)發(fā)】abaqus有限元圖片2
小結(jié)


ABAQUS程序化建模教程(二)——模型的創(chuàng)建和批量修改【轉(zhuǎn)發(fā)】abaqus有限元圖片3


所謂授人以魚不如授人以漁。寶寶們可以按照小胖今天所講的方法自己探索Python的程序化建模方法。


轉(zhuǎn)自微信號:算盤坊

開放分享:優(yōu)質(zhì)有限元技術(shù)文章,助你自學成才

相關(guān)標簽搜索:ABAQUS程序化建模教程(二)——模型的創(chuàng)建和批量修改【轉(zhuǎn)發(fā)】 abaqus分析培訓 abaqus技術(shù)教程 abaqus巖土分析 鋼筋混凝土仿真 abaqus分析理論 abaqus軟件下載 abaqus umat用戶子程序編程 Abaqus代做 Abaqus基礎知識 Fluent、CFX流體分析 HFSS電磁分析 Ansys培訓 

編輯
在線報名:
  • 客服在線請直接聯(lián)系我們的客服,您也可以通過下面的方式進行在線報名,我們會及時給您回復電話,謝謝!
驗證碼

全國服務熱線

1358-032-9919

廣州公司:
廣州市環(huán)市中路306號金鷹大廈3800
電話:13580329919
          135-8032-9919
培訓QQ咨詢:點擊咨詢 點擊咨詢
項目QQ咨詢:點擊咨詢
email:kf@1cae.com