Abaqus子程序開(kāi)發(fā)過(guò)程中的那些坑(給初學(xué)者的建議)
【聲明】原創(chuàng)作品,首發(fā)于“復(fù)合材料力學(xué)”微信公眾號(hào)。
初學(xué)者學(xué)習(xí)子程序的時(shí)候,不知如何下手,便會(huì)四處逛論壇,各種群里去打聽(tīng)、咨詢,零零散散的信息堆積在一個(gè)初學(xué)者面前,往往會(huì)一頭霧水,信息交錯(cuò)混亂還有可能會(huì)打擊自己的積極性,小編當(dāng)年也是走彎路走過(guò)來(lái)的,謹(jǐn)以此文分享一些經(jīng)驗(yàn),歡迎批評(píng)指正。
初學(xué)者學(xué)習(xí)子程序開(kāi)發(fā)一定要先看幫助文檔!!!
看幫助文檔!!!
幫助文檔!!!
很多人都不喜歡看幫助文檔,而Abaqus的幫助文檔信息是相當(dāng)齊全的,各種論壇、QQ群、公眾號(hào)發(fā)布的多數(shù)有關(guān)Abaqus分析的內(nèi)容都可以在幫助文檔中找到影子。
Abaqus幫助文檔中跟子程序相關(guān)的主要有
Abaqus User Subroutines Reference Guide用戶子程序參考指南
Abaqus Example Problems Guide案例指南
01
用戶子程序參考指南
打開(kāi)用戶子程序參考指南,可以看出,幫助文檔子程序部分主要包含“User Subroutines”和“Utility Routines”兩大類。
“User Subroutines”又分為“Abaqus/Standard subroutines”、“Abaqus/Explicit subroutines”及“Abaqus/CFD subroutines”子程序三類,分別對(duì)應(yīng)Standard隱式求解器、Explicit顯式求解器及CFD計(jì)算流體力學(xué)求解器。再往下細(xì)分,“Abaqus/Standard subroutines”中包含CREEP、DISP、DLOAD、FRIC、SVDINI、UAMP、UDMGINI、UEL、UMAT、USDFLD、UVARM子程序等60余種子程序;“Abaqus/Explicit subroutines”中又包含VDISP,VDLOAD、VFRIC、VUAMP、VUEL、VUMAT、VUSDFLD等等20多種子程序。
當(dāng)你想在CAE分析過(guò)程中自定義一些信息時(shí),可以先瀏覽子程序參考手冊(cè),看一下有沒(méi)有對(duì)應(yīng)的子程序類別。
“Utility Routines”這類子程序中包含幾十種內(nèi)嵌的應(yīng)用程序,方便用戶通過(guò)調(diào)用該類程序快速獲取計(jì)算過(guò)程中的一些信息。
“User Subroutines”和“Utility Routines”的區(qū)別是,“User Subroutines”核心部分代碼是需要用戶自己去編寫(xiě)的,從程序接口中獲取只讀數(shù)據(jù)信息,通過(guò)中間的自定義部分進(jìn)行數(shù)據(jù)處理,如自定義輸出變量、自定義材料本構(gòu),自定義損傷判據(jù)等,最后將處理后的數(shù)據(jù)信息傳入接口程序的讀寫(xiě)變量中。
而“Utility Routines”是Abaqus內(nèi)嵌的一些工具類的子程序,不需要自己去編寫(xiě)復(fù)雜的代碼,而是在“User Subroutines”開(kāi)發(fā)過(guò)程中去簡(jiǎn)單調(diào)用“Utility Routines”,這類程序一般都很簡(jiǎn)潔,僅有一行語(yǔ)句,按照指定的格式調(diào)用即可。比如,在USDFLD場(chǎng)變量子程序或者UMAT自定義材料子程序開(kāi)發(fā)過(guò)程中,當(dāng)需要獲取積分點(diǎn)上的應(yīng)力、應(yīng)變等數(shù)據(jù)時(shí),就可以通過(guò)“Utility Routines”中的GETVRM程序?qū)崿F(xiàn),如下:
CALL GETVRM('VAR',ARRAY,JARRAY,FLGRAY,JRCD,JMAC,JMATYP,MATLAYO,
LACCFLA)
02
案例參考指南
案例參考指南中包含了大量Abaqus分析 案例,其中更多的案例是跟子程序無(wú)關(guān)的,要想找到自己想要學(xué)習(xí)的案例,通過(guò)關(guān)鍵字進(jìn)行搜索即可,如上圖所示,想要學(xué)習(xí)UMAT子程序開(kāi)發(fā),只需要搜索"UMAT"關(guān)鍵字即可。可以發(fā)現(xiàn)在靜力分析部分有57條與UMAT這個(gè)關(guān)鍵字相關(guān)的信息,可以逐個(gè)打開(kāi),也可以打開(kāi)對(duì)應(yīng)關(guān)鍵字信息最多的章節(jié)查看。
比如打開(kāi)損傷與斷裂一章,其中有一節(jié)是纖維-金屬?gòu)?fù)合材料(GLARE層板)開(kāi)孔板失效分析的案例,記住一句話,案例參考指南中必定有模型文件和源代碼!運(yùn)氣好的時(shí)候連參數(shù)化python建模腳本都有。
那么,打開(kāi)這一節(jié)內(nèi)容,看一看案例指南的套路:
(1)首先是交代當(dāng)前案例問(wèn)題的背景,并做內(nèi)容概述
(2)模型信息介紹,包括幾何、材料、分析類別、邊界載荷等
(3)理論詳解:因?yàn)檫@個(gè)案例是要自定義一種復(fù)合材料的損傷本構(gòu)模型,所以要把用到的本構(gòu)關(guān)系講解清楚、包含了損傷起始判據(jù)、損傷演化、剛度折減等,想學(xué)復(fù)合材料UMAT子程序開(kāi)發(fā)的同學(xué)看到這里眼前是不是一亮?
剛度折減和雅可比矩陣都給你準(zhǔn)備好了。
(4)模型介紹完了以后會(huì)展示一些計(jì)算結(jié)果。
(5)接下來(lái)是最重要的模型和程序源代碼
這次很幸運(yùn),有python參數(shù)化建模腳本
模型的文件及源代碼
點(diǎn)擊,打開(kāi)源代碼文件,就可以看到針對(duì)這個(gè)案例所開(kāi)發(fā)的UMAT子程序代碼了,參照一個(gè)完整代碼,從頭到尾讀懂這一類子程序怎么編寫(xiě)就基本搞定了。
03
子程序與模型文件的對(duì)應(yīng)
有一些同學(xué)是有源代碼的,但不會(huì)用。這種情況下,先確定自己的子程序是哪一類,同樣去幫助文檔中搜索代碼及模型文件,模型文件中一般需要調(diào)用子程序的地方都會(huì)有user的關(guān)鍵字,仍然以上述復(fù)合材料UMAT子程序?yàn)槔鋵?duì)應(yīng)的模型計(jì)算文件里就有下面一段代碼:
其中user material表示自定義材料,constants=14表示自定義材料中有14個(gè)材料常數(shù),接下來(lái)幾行便是14個(gè)材料常數(shù)的具體數(shù)值,按照模型文件編寫(xiě)規(guī)則,一行8個(gè)數(shù)據(jù)。
這里的14個(gè)數(shù)據(jù)是具有實(shí)際的物理意義的,如果將模型輸入文件導(dǎo)入abaqus CAE或者用python腳本創(chuàng)建模型的話,可以在模型材料中看到下圖所示的信息,14個(gè)數(shù)據(jù)一次列在材料常數(shù)列表中,此時(shí)的數(shù)據(jù)只有數(shù)值和先后順序,沒(méi)有明確的物理意義。
其物理意義需要在子程序中指定,于是再回到源代碼,可以在程序接口中找到一個(gè)PROPS的數(shù)組,這里面存儲(chǔ)的就是CAE或者模型輸入文件中定義的14個(gè)數(shù)據(jù),在代碼里指定其物理意義,例如有的是模量,有的是泊松比,有的是強(qiáng)度數(shù)值等等。這樣就能把CAE模型中定義的信息與子程序接口的變量信息對(duì)應(yīng)起來(lái)了。
除了上述UMAT代碼之外,CAE建模過(guò)程中有對(duì)應(yīng)user選項(xiàng)的地方一般都對(duì)應(yīng)有一種子程序,但不是所有子程序都能在CAE中找到對(duì)應(yīng)的位置,有些是需要編輯關(guān)鍵字的。
復(fù)合材料分析中常用的另一類子程序USDFLD/VUSDFLD場(chǎng)變量子程序在下圖所示的位置定義:
同時(shí)在材料定義中選上用戶自定義場(chǎng)。
如果想自定義abaqus自身不具備的一些輸出變量,可以在材料定義中選擇General→user output variables,然后設(shè)置自定義變量的數(shù)量即可。
如果想自定義載荷,則需要在設(shè)置載荷選項(xiàng)中將分布類型切換為自定義,這樣在計(jì)算的時(shí)候就會(huì)去調(diào)用DLOAD子程序。
同樣的邊界條件也可以通過(guò)DISP子程序來(lái)定義。
在interaction模塊,還可以自定義接觸屬性中的切向摩擦行為。,需要用到FRIC或者VFRIC子程序。
04
學(xué)習(xí)子程序開(kāi)發(fā)的步驟
(1)明確自己需要哪種子程序,如果是隱式的就去隱式子程序分類中去找,顯式的就去顯式分類中尋找,分析類別與子程序類別整錯(cuò)了等于南轅北轍,同一功能的子程序在顯式和隱式求解器中的體現(xiàn)形式是完全不一樣的,代碼風(fēng)格、變量調(diào)用方式也是完全不一樣的。另外,同一種功能可能可以通過(guò)好幾類子程序都能實(shí)現(xiàn),比如隱式分析中單純想控制材料的非線性UMAT和USDFLD都可以實(shí)現(xiàn),USDFLD寫(xiě)起來(lái)很簡(jiǎn)單,但是USDFLD對(duì)材料參數(shù)的控制具有時(shí)間上的延遲,用起來(lái)需要注意增量步要控制的小一些,UMAT寫(xiě)代碼復(fù)雜,但是對(duì)材料參數(shù)的控制具有時(shí)效性。因此,先明確自己的問(wèn)題關(guān)心什么,然后確定選用哪一類子程序。
(2)幫助文檔子程序參考指南中去詳細(xì)了解該類子程序的接口和變量信息以及一些其他注意事項(xiàng)。變量中要明確其物理意義、維度、只讀變量還是讀寫(xiě)變量,這類子程序最終需要返回哪些變量等等,這些在幫助文檔中都有明確說(shuō)明,并且一般在說(shuō)明的結(jié)尾會(huì)附帶一個(gè)完整的代碼。以VUMAT子程序為例,幫助文檔中會(huì)介紹VUMAT子程序的功能、張量存儲(chǔ)順序、初始計(jì)算及檢查、變形梯度、材料點(diǎn)刪除、程序接口、變量解釋等。
其中比較關(guān)鍵的是了解從子程序接口中傳來(lái)的變量都是什么物理意義?其維度是什么樣的?哪些參數(shù)是只讀的?哪些是必須定義的?哪些是可定義的?
(3)幫助文檔案例中找一個(gè)完整的帶有模型文件和源代碼的案例,了解子程序是如何與模型文件聯(lián)系在一起的。
(4)認(rèn)真學(xué)習(xí)一套代碼,幫助文檔中的代碼都是比較經(jīng)典的案例,可以作為模板程序進(jìn)行改寫(xiě)。讀懂一套代碼,其他的自然就通了。
(5)檢索、閱讀文獻(xiàn):有很多歪果仁寫(xiě)文章是很厚道的,尤其是學(xué)位論文,都會(huì)有源代碼,以一個(gè)初學(xué)者的水平,你能想到的點(diǎn)子,別人在若干年前可能早就干出來(lái)了,并且代碼都有,提高自己的文獻(xiàn)檢索能力,能讓你事半功倍。這里并不是鼓勵(lì)大家去抄襲別人的程序,借鑒學(xué)習(xí),
。
05
子程序開(kāi)發(fā)要克服的困難
(1)心理上的困難:對(duì)于有些人這條可能沒(méi)有,但對(duì)于有些人來(lái)講這條可能是致命的。一聽(tīng)到子程序就頭大,其實(shí)并不是所有的子程序都很復(fù)雜。有相當(dāng)一部分子程序體量是很小的,比如,UVARM、DLOAD、DISP、FRIC等子程序,自定義部分只有十幾行或者幾十行,USDFLD、VUSDFLD子程序只需要幾十或者百十行就能對(duì)材料力學(xué)性能進(jìn)行復(fù)雜的控制,只有到UMAT、VUMAT、UEL、VUEL等程序的時(shí)候可能才需要幾百行幾千行的代碼。
(2)語(yǔ)法上的困難:這方面的困難是相對(duì)容易克服的,F(xiàn)ORTRAN 語(yǔ)言在科學(xué)計(jì)算領(lǐng)域有不可撼動(dòng)的地位,可參考的語(yǔ)法書(shū)、代碼資料數(shù)不勝數(shù)。而我們一般在子程序開(kāi)發(fā)過(guò)程中所用到的語(yǔ)法也相對(duì)比較簡(jiǎn)單。
公眾號(hào)后臺(tái)回復(fù)“FORTRAN”或"fortran"可以獲取一份FORTRAN基本語(yǔ)法的總結(jié)。
(3)理論知識(shí)的困難:對(duì)于復(fù)雜子程序,這一點(diǎn)是避免不了的,也是必須要過(guò)的一關(guān),以復(fù)合材料漸進(jìn)損傷材料子程序?yàn)槔紫纫缿?yīng)應(yīng)變關(guān)系、損傷起始判據(jù),損傷起始以后的損傷演化、剛度的折減、單元?jiǎng)h除控制策略,UMAT子程序中還要推導(dǎo)雅可比矩陣以及粘性正則化對(duì)損傷變量以及彈性矩陣的影響等等。
(4)程序調(diào)試的困難:Abaqus子程序調(diào)試不像VS環(huán)境下調(diào)試那么容易,初學(xué)者會(huì)犯各種各樣的錯(cuò)誤,模型錯(cuò)誤、語(yǔ)法錯(cuò)誤、邏輯錯(cuò)誤,在程序調(diào)試方面,我們之前已經(jīng)寫(xiě)過(guò)兩篇詳細(xì)的文章了,可以點(diǎn)擊下方鏈接直接跳轉(zhuǎn)去閱讀一下。
Abaqus中Fortran子程序的調(diào)試方法(一)
VS環(huán)境下Abaqus Fortran子程序的高級(jí)調(diào)試(二)
總而言之:
(1)初學(xué)者學(xué)習(xí)子程序開(kāi)發(fā)要戰(zhàn)略上藐視它,戰(zhàn)術(shù)上重視它
(2)多看幫助文檔,會(huì)看幫助文檔!
另外,有關(guān)復(fù)合材料子程序開(kāi)發(fā)方面的視頻課程可點(diǎn)擊以下鏈接:
工程師必備
- 項(xiàng)目客服
- 培訓(xùn)客服
- 平臺(tái)客服
TOP




















