運用Python語言對ABAQUS二次開發如何實現殺死單元?

最簡單的失效方式就好,其實就是想問,model change remove如何用python表達出來?


沒用python語言寫過abaqus的子程序,用fortran語言寫的。道理應該差不多,我講一下吧。

首先,我覺的「殺死」單元這個說法不是很合適,因為一般來講,單元損傷之後不會直接刪除單元,否則有可能會造成收斂問題。一般來講會折減剛度,就是漸進損傷。打個比方說,單元受力到達某值F後發生損傷,其模量由E1折減為E2。

在此過程中,我們要注意一個問題,即損傷是不可逆的。單元的剛度折減為E2之後,即使後續分析步中,此單元受力小於F,單元的模量也不會恢復。

例如,以下為我寫的UFLD子程序的一小部分。

CR1 = STATEV(1)

ST11 = ARRAY(1)

IF (CR1.LT.1) THEN

IF (ST11.GE.1000) THEN

CR1=1

ELSE

CR1=0

ENDIF

ENDIF

STATEV(1) = CR1

STATEV(1)為從主程序中調出的損傷狀態,初始值為0(未損傷)。將其賦給變數CR1

ARRAY(1) 為材料在1方向上的應力。賦給變數 ST11

然後進入判定。當CR1.LT.1,即材料未損傷時,檢測ST11是否大於1000,如大於1000,則材料損傷,否則材料不損傷。

循環結束後將CR1賦給損傷狀態STATEV(1)傳回給子程序,下一個分析布繼續循環這個子程序。如果損傷已經發生,即CR1=1,是不能進入循環的,損傷也就不會恢復了。

折減的具體數值E2是在主程序中設定的。


a = mdb.models["XXX"].rootAssembly

region =a.sets["YYY"]

mdb.models["XXX"].ModelChange(name="ZZZ",

createStepName="Step-1", region=region, activeInStep=False,

includeStrain=False)

根據GUI生成的命令,然後自己再加工下就好了,需要加循環的加循環等等。


是生死單元,做焊接模擬用過


(⊙o⊙) 這是誰邀的我……

完全看不懂……


推薦閱讀:

Python 中 str 對象 encode 到底是一個怎樣的過程,實現的目的是什麼?
在Python 3.x中經常看到定義函數有一個單獨的 * 參數?定義這樣參數的目的是?怎樣對其取值呢?
python的庫、方法這麼多,寫程序的時候能記住嗎?

TAG:有限元分析FEA | Abaqus | Python編程 |