Abaqus的Python批量隨機幾何建模入門
在科研和工程實際問題中,經常會涉及到隨機幾何元素,例如:混凝土骨料、隨機纖維復合材料、多孔介質材料的傳熱和滲流問題、生物材料的細觀特征等等。這些材料中包含大量隨機尺寸、隨機位置分布的幾何特征,在有限元建模中可以使用自編二次開發程序的方法來實現復雜的幾何模型構造。
Abaqus支持使用Python語言進行二次開發建模,用戶可以利用Python代碼達成特殊的建模要求。在批量隨機幾何建模問題中,有兩個關鍵詞:一是批量、二是隨機。
1、批量建模
批量建模主要用到的技巧是循環。在此我們介紹兩種常用的Python語言循環控制代碼格式。
首先是while循環,也就是“當循環”。我們直接看一個例子:
i=1
注意:while下面的執行語句要空四個格!
第二種方式是for循環,也就是“歷遍循環”。還是直接看例子:
a=[1,2,3,4,5]
同樣需要注意,for下面的執行語句也要空四個格!
2、隨機建模
隨機建模主要用到的技巧是產生隨機數字。這就要用到Python的隨機模塊random了。我們首先輸入import random引入隨機數模塊,然后就可以使用這個模塊下面的方法來產生隨機數了。這里,我們介紹三個常用的函數:
3、應用舉例
下面我們用一個實例來說明建模的具體過程。這里我們希望建立一個100*50*10的方板,然后在上面隨機位置打10個孔,孔的直徑在2-10之間隨機變化。我們首先打開Abaqus cae軟件,創建帶一個孔的方板來提取對應代碼。
點擊工具欄左上角的“create part”按鈕創建部件。
然后在對話框中保持默認,單擊“continue”進入二維草圖。
在草圖界面繪制一個長寬為100*50的矩形,在中間創建一個直徑為10的圓。
單擊“done”后,在對話框輸入拉伸深度為10,單擊OK。
如此,我們就獲得了帶一個圓孔的方板。
下面,我們在Abaqus的工作目錄下面找到后綴名為rpy的文件,里面記錄了剛才所有操作的Python代碼。將它以文本格式打開后,提取建模過程的有效代碼如下:
from abaqus import *
from abaqusConstants import *
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=(0.0, 0.0), point2=(100.0, 50.0))
s.CircleByCenterPerimeter(center=(50.0, 25.0), point1=(50.0, 30.0))
p = mdb.models['Model-1'].Part(name='Part-1', dimensionality=THREE_D,
type=DEFORMABLE_BODY)
p = mdb.models['Model-1'].parts['Part-1']
p.BaseSolidExtrude(sketch=s, depth=10.0)
s.unsetPrimaryObject()
p = mdb.models['Model-1'].parts['Part-1']
session.viewports['Viewport: 1'].setValues(displayedObject=p)
del mdb.models['Model-1'].sketches['__profile__']
可以發現,其中標紅的兩句為創建矩形和圓形的命令。圓形給出了圓心坐標和圓上一點的坐標。我們可以對這行代碼稍加修改,完成批量隨機幾何建模。講圓創建的代碼改為:
i=0
while i < 10:
zhijing=random.uniform(2,10)
x_center=random.uniform(zhijing,100-zhijing/2)
y_center=random.uniform(zhijing,50-zhijing/2)
s.CircleByCenterPerimeter(center=(x_center, y_center), point1=(x_center, y_center+zhijing/2))
i=i+1
這樣就實現了圓心位置隨機,直徑在2-10之間隨機的10個圓的繪制。這里用到了random模塊,所以不要忘了在整個程序前面加上import random。
我們重啟Abaque后,單擊菜單欄中的“file”,然后點擊Abaqus PDE進入python開發環境。新建一個文件后,復制以上改好的代碼,注意空格的格式,確認無誤后保存。
將運行位置選項卡“run in”后面點選為“kernal”。最后單擊右箭頭“play”按鈕測試運行效果。
這時,我們發現,有時程序可以正常運行,而有時確無法運行。當我們把循環次數增加時,例如打50個孔,則幾乎無法正常實現。這是為什么呢?
這是由于我們沒有對孔的重合進行檢驗,造成圓與圓之間相互重疊交叉,無法完成拉伸動作。那么如何避免這種情況的發生呢?
本文來源:八大博士日常
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















