有限元理論基礎及Abaqus內部實現方式研究系列8:UMAT用戶子程序開發步驟(原創)
(原創,轉載請注明出處)
==概述==
在CAE領域,從學校、實驗室的自研算法到實現真正的商業化軟件是一條無比漫長的道路。我們不研究有限元的新方法、新理論,只是研究商用有限元軟件的實現方式。有限元的理論發展了幾十年已經相當成熟,商用有限元軟件同樣也是采用這些成熟的有限元理論,只是在實際應用過程中,商用軟件在這些傳統的理論基礎上會做相應的修正以解決工程中遇到的不同問題,且各家軟件的修正方法都不一樣,每個主流商用軟件手冊中都會注明各個單元的理論采用了哪種理論公式,但都只是提一下用什么方法修正,很多沒有具體的實現公式。

一方面我們查閱Abaqus軟件手冊得到修正方法的說明,另一方面我們自己編程實現簡單的結構有限元求解器,通過自研求解器和Abaqus的結果比較結合理論手冊如同管中窺豹一般來研究Abaqus的修正方法,從而猜測商用有限元軟件的內部計算方法。在研究的同時,準備將自己的研究成果記錄下來寫成一個系列文章,希望對那些不僅僅滿足使用軟件,而想了解軟件內部實現方法和想要突破商軟接口限制的朋友有些幫助。由于水平有限,里面可能有許多錯誤,歡迎交流討論。
==第八篇:UMAT用戶子程序開發步驟==
用戶子程序主要是將用戶特定的材料本構模型和單元算法等公式編寫為計算機語言表示的公式,并實現和商軟求解器之間的交互迭代,UMAT用戶自定義材料是其中比較重要的一類子程序。常用的商業有限元軟件都提供了用戶自定義子程序的功能,且一般都是Fortran語言開發,Fortran是上世紀70年代的語言,相對現代化的流行語言編寫,格式要求非常嚴格,編譯調試都比較繁瑣,使得開發效率低下,而且接口限制較多,除了商軟提供的功能外用戶基本沒法改動,靈活性較差。由于用戶子程序很多都涉及復雜的公式編寫,用戶除了需要扎實的理論基礎外,還需要較強的能將公式表達為Fortran語言的編程能力,這對非計算機專業出身的人來說往往在浪費了很多額外精力,使得很多理論高手都對用戶子程序望而卻步,難以入門。

商軟的用戶子程序的內部都是采用dll動態鏈接庫的形式實現的,商軟只是規定好接口并設置觸發尋找動態鏈接庫的機制,譬如當發現關鍵詞*User Material,主程序就調用指定dll中UMAT這個函數,至于這個dll是用什么語言編譯過來的,主程序不會管,只要這個函數包括相同的變量名就行,主程序就會將數據傳遞到這些變量中,同時從規定的變量名中讀取子程序的運行結果,整體流程和一般的混編語言開發類似。

如果了解了商軟的用戶子程序的實現原理后,完全可以用Matlab來代替Fortran開發子程序。在實際工作中,很多工程師用Matlab來編寫和推導公式,Matlab被認為是市面上最接近草稿紙上推導公式的一款軟件了,而且有限元在數值層面上的計算其實就是矩陣運算,所以Matlab這種數據按矩陣來組織非常適合用來開發有限元相關的程序。而現在市面上還沒有采用Matlab來開發商軟子程序的案例并不是dll混編語言的實現方式有多難,而是需要一種基于Matlab的調試方式,在Matlab中要重復商軟的有限元流程,并實現和商軟的雙向接口。iSolver是市面上第一款基于Matlab來開發商軟用戶子程序的軟件工具,支持用Matlab編寫和調試用戶子程序,并實現和Abaqus求解器的迭代調用。

本文首先簡單的討論了UMAT的一般含義,并詳細的介紹了基于Fortran和Matlab兩種方式的UMAT的開發步驟,對比發現開發步驟基本相同,同時采用Matlab更加高效和靈活。最后采用同一個算例驗證兩者分析結果完全一致,從而證明基于Matlab的UMAT的流程和結果的正確性。

==演示視頻==
http://www.yqgqt.org.cn/college/video/c12884
章節5:基于Matlab開發Abaqus的UMAT用戶子程序,視頻演示了基于Matlab的UMAT的開發步驟,并和Abaqus自帶材料對比證明結果的正確性。
==總結==
基于Fortran和Matlab兩種方式的UMAT的開發步驟和開發工具如下表:
項次 |
步驟 |
基于Fortran的開發工具 |
基于Matlab的開發工具 |
1 |
材料參數設置 |
Abaqus/CAE | Abaqus/CAE |
2 |
編寫 |
文本編譯器 |
Matlab |
3 |
編譯 |
VS+iVF |
無需編譯 |
4 |
調試 |
VS+iVF+DUS插件 |
Matlab+iSolver插件 |
5 |
運行 |
Standard.exe+UMAT.for |
iSolver.exe+UMAT.m |
6 |
關聯Abaqus |
/ |
Standard.exe+UMAT.m |
詳細研究方法,見附件:
有限元理論基礎及Abaqus內部實現方式研究系列8:UMAT用戶子程序開發步驟(SnowWave02 20190213).pdf
==以往的系列文章==
第一篇:S4殼單元剛度矩陣研究。介紹Abaqus的S4剛度矩陣在普通厚殼理論上的修正。
http://www.yqgqt.org.cn/content/post/338859
第二篇:S4殼單元質量矩陣研究。介紹Abaqus的S4和Nastran的Quad4單元的質量矩陣。
http://www.yqgqt.org.cn/content/post/343905
第三篇:S4殼單元的剪切自鎖和沙漏控制。介紹Abaqus的S4單元如何來消除剪切自鎖以及S4R如何來抑制沙漏的。
http://www.yqgqt.org.cn/content/post/350865
第四篇:非線性問題的求解。介紹Abaqus在非線性分析中采用的數值計算的求解方法。
http://www.yqgqt.org.cn/content/post/360565
第五篇:單元正確性驗證。介紹有限元單元正確性的驗證方法,通過多個實例比較自研結構求解器程序iSolver與Abaqus的分析結果,從而說明整個正確性驗證的過程和iSolver結果的正確性。
http://www.yqgqt.org.cn/content/post/373743
第六篇:General梁單元的剛度矩陣。介紹梁單元的基礎理論和Abaqus中General梁單元的剛度矩陣的修正方式,采用這些修正方式可以得到和Abaqus梁單元完全一致的剛度矩陣。
http://www.yqgqt.org.cn/content/post/403932
第七篇:C3D8六面體單元的剛度矩陣。介紹六面體單元的基礎理論和Abaqus中C3D8R六面體單元的剛度矩陣的修正方式,采用這些修正方式可以得到和Abaqus六面體單元完全一致的剛度矩陣。
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















