Abaqus的Python批量隨機幾何建模入門

在科研和工程實際問題中,經常會涉及到隨機幾何元素,例如:混凝土骨料、隨機纖維復合材料、多孔介質材料的傳熱和滲流問題、生物材料的細觀特征等等。這些材料中包含大量隨機尺寸、隨機位置分布的幾何特征,在有限元建模中可以使用自編二次開發程序的方法來實現復雜的幾何模型構造。

Abaqus支持使用Python語言進行二次開發建模,用戶可以利用Python代碼達成特殊的建模要求。在批量隨機幾何建模問題中,有兩個關鍵詞:一是批量、二是隨機。

1、批量建模

批量建模主要用到的技巧是循環。在此我們介紹兩種常用的Python語言循環控制代碼格式。

首先是while循環,也就是“當循環”。我們直接看一個例子:

i=1 while i < 6:     print i     i=i+1     我們觀察以上代碼,它的意思是:當i小于6的時候,執行print i的命令,直到while后面的條件不成立(即i大于等于6)為止。在循環前,我們給i幅值為1,每一次循環又讓i在原來基礎上加一,這樣就實現了循環打印五個數字的效果。這里的i一般用于循環計數,自加的操作可以讓它記錄循環次數。

注意:while下面的執行語句要空四個格!

第二種方式是for循環,也就是“歷遍循環”。還是直接看例子:

a=[1,2,3,4,5] for i in a:     print i     這段代碼首先定義了一個列表a,它包含五個元素,分別是12345這五個整型變量。for i in a:的意思是讓虛擬元素ia中逐個變化,也就是第一次循環時,i=1,第二次循環時,i=2,依次把五個元素歷遍后循環終止。這段代碼的實現效果與第一段代碼相同。

同樣需要注意,for下面的執行語句也要空四個格!

2、隨機建模

隨機建模主要用到的技巧是產生隨機數字。這就要用到Python的隨機模塊random了。我們首先輸入import random引入隨機數模塊,然后就可以使用這個模塊下面的方法來產生隨機數了。這里,我們介紹三個常用的函數: random.random()        #生成0-1的隨機小數 random.uniform(a,b)   #生成a-b之間的隨機 random.randint(a,b)    #生成a-b之間的隨機整數     使用這些函數,就能產生我們需要的隨機數了。

3、應用舉例

下面我們用一個實例來說明建模的具體過程。這里我們希望建立一個100*50*10的方板,然后在上面隨機位置打10個孔,孔的直徑在2-10之間隨機變化。我們首先打開Abaqus cae軟件,創建帶一個孔的方板來提取對應代碼。

點擊工具欄左上角的create part”按鈕創建部件。

Abaqus的Python批量隨機幾何建模入門的圖1

然后在對話框中保持默認,單擊continue”進入二維草圖。

 Abaqus的Python批量隨機幾何建模入門的圖2

在草圖界面繪制一個長寬為100*50的矩形,在中間創建一個直徑為10的圓。

Abaqus的Python批量隨機幾何建模入門的圖3

單擊done”后,在對話框輸入拉伸深度為10,單擊OK

 Abaqus的Python批量隨機幾何建模入門的圖4

如此,我們就獲得了帶一個圓孔的方板。

 Abaqus的Python批量隨機幾何建模入門的圖5

下面,我們在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開發環境。新建一個文件后,復制以上改好的代碼,注意空格的格式,確認無誤后保存。

Abaqus的Python批量隨機幾何建模入門的圖6

將運行位置選項卡run in”后面點選為“kernal”。最后單擊右箭頭“play”按鈕測試運行效果。

Abaqus的Python批量隨機幾何建模入門的圖7

這時,我們發現,有時程序可以正常運行,而有時確無法運行。當我們把循環次數增加時,例如打50個孔,則幾乎無法正常實現。這是為什么呢?

Abaqus的Python批量隨機幾何建模入門的圖8

這是由于我們沒有對孔的重合進行檢驗,造成圓與圓之間相互重疊交叉,無法完成拉伸動作。那么如何避免這種情況的發生呢?

本文來源:八大博士日常

Abaqus的Python批量隨機幾何建模入門的圖9

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

TOP

3
20