在abaqus平臺通過python腳本生成非均質(zhì)材料
(1)寫作動機(jī)
在網(wǎng)上相對容易找到在abaqus平臺生成非均質(zhì)材料的視頻,但是很多視頻扣扣嗖嗖不愿意把代碼分享出來,代碼很簡單的,但是對剛?cè)腴T的萌新實(shí)在是不知道如何下手,本文提供了在abaqus平臺上通過python腳本生成非均質(zhì)材料的簡單代碼,希望達(dá)到拋磚引玉的效果。
(2)方法步驟
本文通過對每個(gè)單元賦不同的彈性模量,以達(dá)到非均質(zhì)材料生成的目的。在abaqus平臺創(chuàng)建模型,然后對模型創(chuàng)建集合Set-all,然后運(yùn)行如下python腳本文件。如圖1,其中彈性模量可以用不同的分布函數(shù)生成,如正態(tài)分布、韋伯分布等。圖2的python腳本文件提供了詳細(xì)注釋,以供查閱,


此外,視需求可以劃分多個(gè)Set,對不同的Set分別賦材料參數(shù),如圖3。注意如果分別對多個(gè)Set分別賦材料參數(shù),建議修改setname、matname、secname,如將代碼中的setname中的‘Set-’修改為'Set1-',防止多次生成時(shí)材料信息不知道屬于哪一個(gè)集合(不過好像也無所謂)。

圖3 對部分區(qū)域賦非均質(zhì)屬性
(3)方法拓展
本方法是通過對網(wǎng)格單元賦值,也即是說該方法不具有單元類型依賴性,無所謂三角形、四邊形、四面體等單元,都可以適用;
本方法演示了對單元賦值不同的彈性模量,泊松比等其他參數(shù)同樣適用,其中如果想對材料內(nèi)聚力、內(nèi)摩擦角等其他參數(shù)賦值,可以采用插件PythonReader查看關(guān)鍵詞,PythonReader相關(guān)插件及使用方法在網(wǎng)絡(luò)上查找,或者打開abaqus生成的rpy文件和jnl文件查看相關(guān)關(guān)鍵詞。
可以采用讀取文件數(shù)據(jù),然后保存為數(shù)組,然后從數(shù)組中按序取數(shù)據(jù)對模型進(jìn)行賦值,以達(dá)到按照任意分布方式、一定比例占比對模型進(jìn)行參數(shù)賦值。
本方法也有局限性,目前暫時(shí)不知道怎么圖中的網(wǎng)格按照數(shù)據(jù)大小進(jìn)行顯示,即使在賦值參數(shù)都一樣,也是顯示不同網(wǎng)格顏色,某種程度無法告訴讀者模型材料參數(shù)所謂何樣。之前通過修改網(wǎng)格的色卡顏色,無奈色卡采用16進(jìn)制表示的,筆者本來以為顏色范圍都是0~255,按照數(shù)據(jù)大小映射到色卡上,但是沒有成功,因?yàn)楣P者搞不懂16進(jìn)制怎么轉(zhuǎn)換為10進(jìn)制,或者即使知道了也不知道能不能解決這個(gè)顏色顯示問題,因此淺嘗未果。如果有人知道如何解決色卡顯示的問題,希望不吝賜教。此外,用戶子程序應(yīng)該能解決這個(gè)問題,可以通過場變量的方式顯示數(shù)值大小,但是在一般情況下,還是盡量用能解決問題的簡單辦法吧。

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# Do not delete the following import lines
import numpy as np
import math
from abaqus import *
from abaqusConstants import *
import __main__
mymodel = mdb.models['Model-1']
mypart = mdb.models['Model-1'].parts['Part-1']
#
session.journalOptions.setValues(replayGeometry=COORDINATE,recoverGeometry= COORDINATE)
myset_all = mypart.sets['Set-all']
np.random.seed(1)
for ele_index in myset_all.elements:
? ? ele = ele_index.label
? ? Matname = 'Mat-'+ str(ele)
? ? myMaterial = mymodel.Material(name=Matname)? ? ??
? ? EE = (2000*math.pow(-math.log(np.random.rand()),1.0/3)+15000)*1e6
? ? vv = 0.25
? ? elasticProperties = (EE, vv)
? ? myMaterial.Elastic(table=(elasticProperties, ))
? ? myMaterial.Permeability(specificWeight = 9800.0, inertialDragCoefficient=0.142887,table=((1e-07,0.2), ))? ? ? ?
? ? sectionname = 'Sec-'+ str(ele)
? ? mySection = mymodel.HomogeneousSolidSection(name=sectionname, material=Matname, thickness=None)
? ? setname = 'Set-' + str(ele)
? ? mypart.Set(elements=mypart.elements[ele-1:ele], name=setname)
? ? region = mypart.sets[setname]
? ? mypart.SectionAssignment(region=region, sectionName=sectionname)