[原創]Abaqus UFIELD 和 USDFLD子程序詳解
UFIELD和USDFLD子程序詳解
———公眾號‘CAE仿真實驗室’出品
UFIELD和USDFLD是Abaqus極具迷惑性的兩個子程序,這兩個家伙長得就比較像兄弟,而且都是用來自定義場變量的,同時還有一個狀態變量state variable摻和在中間,再加上幫助里面的解釋也基本上不是人話,很容易就把人搞二了,今天帖主就來理一理這兩個子程序。
1、自定義場變量
Abaqus中場變量可以先簡單的理解為每個單元或者每個節點都有一個值的變量,像結果輸出中的溫度、應力和應變等。有時候我們也需要定義Abaqus中不存在的一些稀奇古怪,有意義或無意義的場變量,比如濃度場,固化度場,損傷度。場變量最場用于定義變化的材料參數,即讓材料屬性如密度,彈性模量和一個場變量相關,通過更新場變量的值來改變材料參數(這一點和溫度相關的材料參數本質上是一致的),而場變量的更新在這兩個子程序中均可以完成,UFIELD是用來指定預定義場變量的,USDFLD對積分點的場變量重新定義。UFIELD和USDFLD的本質上的區別是一個是定義在節點上的,一個是定義在單元材料積分點上的,同時這兩個又可以相互搭配,干活不累
2、簡單實例
先通過一個小例子來領會一下它們的要義,本實例通過自定義場變量來定義隨時間變化的彈性模量,如圖所示,定義彈性常數的時候,number of field variable 設為1,下面兩行參數表示Field變量為1時彈性模量為10000,Field變量為2時彈性模量為20000
inp中定義Ufield和Usdfld的關鍵字和Ufield代碼如下:
![wpsD0B6.tmp.jpg [原創]Abaqus UFIELD 和 USDFLD子程序詳解的圖2](http://img.jishulink.com/upload/201703/1490876732127_wpsD0B6.tmp.jpg)
如下應力應變曲線可以看出,時間步0.5s之前彈性模量為10000,0.5s后彈性模量為20000,確實是按照預期效果改變的。
通過給定field 不同的值,研究彈性模量的變化,發現當場變量小于1的時候,取的時1對應的值,大于2的時候,是2對應的值,在1和2之間,則是通過插值得到。
當然這個例子比較簡單,可以不用子程序,直接通過*field 來實現
![wpsD0D9.tmp.jpg [原創]Abaqus UFIELD 和 USDFLD子程序詳解的圖7](http://img.jishulink.com/upload/201703/1490876734200_wpsD0D9.tmp.jpg)
最后,通過USDFLD也可以實現單元生死,將在以后說明。
3、UFIELD
Abaqus中可以通過關鍵字*Field來定義預定義場變量,對于簡單的問題,可以直接通過數據行的形式來定義場變量值,如下小例子,可以通過inp文件直接給定節點場變量的值,在field output中可以選上FV,就可以在后處理中查看場變量云圖了,但需要注意的是云圖顯示的并非節點值而是插值得到的積分點的值。對于較為復雜的場變量,往往沒辦法直接通過數據行的形式定義,這個時候就需要用到自定義場變量子程序了,即UFIELD子程序。
![wpsD0DA.tmp.jpg [原創]Abaqus UFIELD 和 USDFLD子程序詳解的圖8](http://img.jishulink.com/upload/201703/1490876734863_wpsD0DA.tmp.jpg)
在UFIELD中可以隨時更新場變量,有兩種更新方法,獨立更新方法(Individual variable updates)和同時更新方法(Simultaneous variable updates),獨立更新就是每次調用子程序只更新一個場變量,如果有多個場變量需要更新,就調用多次。同時更新就是一次調用子程序時,更新多個場變量,獨立更新是默認的更新方法,同時更新一般用于場變量之間相互關聯的時候,兩者的子程序格式和inp文件中的接口 略有差異,說明如下
獨立更新時,FIELD(NSECPT,NFIELD)的大小為FIELD(1,1),但是可以通過KFIELD的值來判別這個場變量屬于哪一個,Inp中*FIELD,USER中也需要指定哪一個場變量,下圖中為三個場變量,所以需要添加三行,子程序中通過IF(KFIELD=1or2or3)來判斷對應關系。
*Field,user,variable=1
*Field,user,variable=2
*Field,user,variable=3.
同時更新時,FIELD(NSECPT,NFIELD)的大小為FIELD(1,NFIELD),這時NFIELD=3,FIELD(1,1),FIELD(1,2),FIELD(1,3)之間是相互關聯的,用獨立更新的辦法顯然比較難實現,在Inp中,子程序關鍵字則為*FIELD,user,number=3
4、USDFLD
USDFLD子程序我已在之前的一篇帖子[ http://www.yqgqt.org.cn/content/post/315597 Abaqus傳熱分析HETVAL和USDFLD子程序聯合]中介紹過,它與UFIELD不同的地方是,它是對積分點的場變量進行重新定義。通過initial condition 或者*field定義的預定義場變量是定義在節點上的,在調用USDFLD之前,積分點處的場變量值是通過節點處的值插值得到的(插值方法和溫度場插值一樣),在調用USDFLD后,積分點處的場變量被重新定義
1)UFIELD可以指定預定場,并且可以更新節點處場變量,并且可以插值到積分點
2)USDFLD可以直接重定義結分店的值,而不影響節點處的值
3)依賴于場變量的材料屬性是根據積分點處的場變量值來更新材料參數的
USDFLD 還有一個比較有用的功能就是可以和其他子程序聯合使用,以達到傳遞數據的作用,STATEV ()數組可以傳遞到 CREEP, HETVAL, UEXPAN, UMAT, UMATHT, 和UTRS等子程序。
5、USDFLD和DFIELD聯合使用,
當同時定義了這兩個子程序的時候,讓人較為困惑的是場變量到底根據那個子程序來更新呢,這就和先調用哪一個程序關系很大了,我們通過輸出場變量的值和時間進行測試:
我們可以發現,abaqus是先調用UFIELD再調用USDFLD的, 由于材料參數是用在材料積分點上的,因而場變量相關的材料參數,依賴積分點的場變量,而不是節點的場變量,也就當同時通過UFIELD和USDFLD來定義場變量時,實際是根據USDFLD來更新材料參數了。下圖說明了UFIELD和USDFLD調用的情況,USDFLD調用于增量步開始,UFIELD調用于增量步結束
3、幾點總結
UFIELD是指定預定義節點場變量的、USDFLD是用來重新定義材料積分點的場變量,當沒有用USDFLD定義材料積分點的場變量時,會通過節點場變量插值得到。當改變材料積分點場變量時,節點值不會改變。
USDFLD定義后是沒有激活的,必須通過*Field或*initial condition,type=field關鍵字來激活,或者定義場變量依賴的材料參數也可以激活
*field和*initial condition關鍵字都不支持abaqus CAE操作的,可以編輯inp或者edit keyword
學習有限元奇巧淫技
學習有限元理論知識
了然于心、游刃有余
CAE仿真實驗室,更多有限元干貨等你來拿!歡迎留言討論、若有疑問可私信~

工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















