運用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的庫、方法這麼多,寫程序的時候能記住嗎?