隨著計算技術和計算機的快速發展,有限元軟體的發展速度迅速,功能日漸強大。目前國際上被廣泛採用的通用有限元軟體有 ansys、msc、abaqus 等。利用商業軟體進行計算現在已是科學研究中的一項重要手段。由於工程問題的千差萬別,不同的使用者有不同的專業背景和發展方向,通用軟體不免在具體的專業方面有所欠缺,針對這些不足,大部分的通用軟體都提供了二次開發功能,以幫助使用者減少重複性的程式設計工作、提高開發起點、縮短研發週期、降低開發成本,並能簡化後期維護工作,給使用者帶來很多方便。基於通用軟體平台進行開發,是目前研究的乙個重要發展方向。abaqus 也提供了若干使用者子程式(user subroutines)介面,它是乙個功能非常強大且適用的分析工具,與命令列的程式格式相比,使用者子程式的限制少得多,從而使用更加靈活方便。
abaqus不僅提供標準的有限元分析程式,而且具有良好的開放性,可利用它提供的使用者子程式介面生成非標準的分析程式來滿足使用者的需要,在實際工程中得到廣泛應用。abaqus的二次開發包括使用者子程式的開發以及abaqus和其他商業軟體介面處理兩種方式。本系列主要說明子程式的開發。
abaqus 允許使用者通過子程式以**的形式來擴充套件主程式的功能,並給使用者提供了強大而又靈活的使用者子程式介面和應用程式介面(utility routine),abaqus共有49個使用者子程式介面,15個應用程式介面,使用者可以定義包括邊界條件、荷載條件、接觸條件、材料特性以及利用使用者子程式和其它應用軟體進行數值交換等等。這些使用者子程式介面使得使用者解決一些問題時有很大的靈活性,同時大大的擴充了 abaqus 的功能。例如:通過使用者定義單元介面,使用者自定義的任何型別的線性或非線性單元都可以被引入模型中,對於線性單元剛度矩陣和質量矩陣可以直接確定。例如:如果荷載條件是時間的函式,這在abaqus/cae 和input檔案中是難以實現的,但在使用者子程式dload中就很容易實現。同時,使用者子程式也可被用來定義這些單元的線性和非線性特性。通過使用者材料子程式介面,使用者可定義任何補充的材料模型,不但任意數量的材料常數都可以作為資料被讀取,而且 abaqus 對於任何數量的與解相關的狀態變數在每一材料計數點都提供了儲存功能,以便在這些子程式中應用。
abaqus的使用者子程式是根據abaqus提供的相應介面,按照fortran語法,使用者自己編寫的**。它是乙個獨立的程式單元,可以獨立的被儲存和編譯,也能被其它程式單元引用,因此,利用它可帶回大量資料供引用程式使用,也可以用它來完成各種特殊的功能。它的一般結構形式是:
subroutine name (x1,x2,……,xn)
include 『aba_param.inc』 (用於 abaqus/standard 使用者子程式中)
orinclude 『vaba_param.inc』 (用於 abaqus/explicit 使用者子程式中)
…… return
end
其中,x1,x2,……,xn是abaqus提供的使用者子程式的介面引數,有些引數是abaqus傳到使用者子程式中的,例如:subroutine dload 中的 kstep、kinc、coords;有些是需要使用者自己定義的,例如 f。檔案 aba_param.inc 和 vaba_param.inc隨著abaqus 軟體的安裝而包含在作業系統中,它們含有重要的引數,幫助abaqus 主求解程式對使用者子程式進行編譯和鏈結。當控制遇到return語句時便返回到引用程式單元中去,end語句是使用者子程式結束的標誌。
在乙個算例中,使用者可以用到多個使用者子程式,但必須把它們放在乙個以.for為副檔名的檔案中。執行帶有使用者子程式的算例有兩種方法:一是在 cae 中執行,在 edit job 選單中的 general 子選單的 user subroutine file 對話方塊中選擇使用者子程式所在的檔案即可;另外是在 abaqus.command 中執行,語法如下:
abaqus job=job-name user=編制使用者子程式時應注意:
使用者子程式相互之間不能呼叫,但可以呼叫使用者自己編寫的 fortran 子程式和 abaqus 應用程式。abaqus 應用程式必須由使用者子程式呼叫。當使用者編寫fortran 子程式時,建議子程式名以k開頭,以免和 abaqus 內部程式衝突。
當使用者在使用者子程式中利用 open 開啟外部檔案時,要注意以下兩點:一是裝置號的選擇是有限制的,只能取 15~18 和大於 100 的裝置號,其餘的都已被abaqus 占用;二是使用者需提供外部檔案的絕對路徑而不是相對路徑。
對於不同的使用者子程式 abaqus 呼叫的時間是不同的,有的是在每個 step的開始,有的是 step 的結尾,有的是在每個 increment 的開始等等。當 abaqus呼叫使用者子程式時,都會把當前的 step 和 increment 利用使用者子程式的兩個實參 kstep 和 kinc 傳給使用者子程式,使用者可把它們輸出到外部檔案中,這樣就可清楚知道 abaqus 何時呼叫該使用者子程式。為保證使用者子程式的正確執行,子程式的書寫必須遵循 abaqus的相關規定。
此外,abaqus的指令碼語言介面非常友好,其自嵌的指令碼語言是python系國際上廣泛使用、功能強大、具有良好開放性的一種物件導向程式設計語言。所以,應用python在abaqus中進行二次開發也比較方便,且可移植性強。abaqus以基於python的語法規則向二次開發者提供了許多庫函式,這些庫函式主要是用來增強abaqus的互動式(gui)操作功能。使用者可以通過abaqus的互動式(gud介面實現分析物件的特徵造型、指定材料屬性、完成網格剖分和控制、提交並監控分析作業,也可以使用abaqus指令碼語言越過abaqus的互動式(gui)介面直接高效地向abaqus核心提交任務。使用python可以進行引數化建模,修改互動式建立的模型,還可以一次提交多個作業。 在國外,眾多的有限元分析和研究者熱衷於使用abaqus,乙個很重要的原因就在於abaqus給使用者提供了功能強大,使用方便的二次開發工具和介面,使得使用者可以方便的進行富含個性化的有限元建模、分析和後處理,滿足特定工程問題的需要。
abaqus使用者子程式大致可以分為7類,下面為具體的分類及使用者常用子程式。
使用者定義的初始條件
利用此類子程式可以在分析時定義初始條件,例如:初始應力場的定義,可以採用sigini使用者子程式來定義;在滲流場分析時定義初始孔隙水壓力分析可採用uporep使用者子程式;多孔介質初始孔隙度分布的定義可採用voidri使用者子程式。
使用者定義的邊界條件
利用此類子程式可以在結構分析或耦合分析時定義特殊型別的邊界條件,如定義節點位移,定義分布機械載荷,定義流體流速和流量等。例如:定義非均布的滲流流速和流量可採用dflow和dflux使用者子程式,以及定義非均布的滲流係數可採用flow使用者子程式;定義特殊型別的位移邊界可採用disp使用者子程式;定義特殊型別分布的面力載荷可採用dload子程式;定義特殊分布的牽引力可採用utracload子程式;定義溫度場邊界的utemp子程式。
使用者定義的材料特性和本構關係
利用此類子程式可以定義各種本構模型,如各向異性或正交各向異性的彈性應力-應變關係,各種非線性彈塑性本構關係、也可以定義蠕變應變率演化方程、定義非線性應力-應變關係,定義加工硬化或應變硬化曲線等。例如:採用umat子程式可以定義各類本構模型,包括非線性彈性、彈塑性以及蠕變等模型;例如採用creep子程式可以定義各類蠕變或膨脹演化方程;關於材料的熱力學特性可以採用umatht子程式;定義粘彈性材料或超彈性材料可以採用uhypel和uhyper子程式;mullins材料模型的損傷特性定義可以採用umullins使用者子程式。
使用者定義的單元
對於特殊型別的單元,可採用uel子程式進行定義。
使用者定義的狀態變數
狀態變數主要包括定義場變數、與求解過程相關的狀態變數,以後重新定義材料點的狀態變數,主要有ufield子程式、sdvini子程式和usdfld子程式。此外還包括定義摩擦接觸屬性的子程式,如定義摩擦接觸行為的fric子程式,以及接觸面行為定義的uinter子程式等。
定義輸出量的使用者子程式
此類使用者子程式可以定義提取單元結果,將單元量輸出,寫到後處理結果檔案中,如uvarm子程式;此外,讀取結果檔案可採用urdfil子程式。
其他使用者子程式
此外,還包括特殊型別用途的子程式,如定義多點約束的子程式mpc,定義區域性座標的orient子程式等。上述子程式的分類僅限於在岩土工程領域,其他領域有不同的分類方法。
ABAQUS的二次開發 UMAT
abaqus中雖然提供了很多的單元,很多的材料本構模型,但是有時候我們的分析的實際情況是比較複雜的,比如當我們要計算一種特定的橡膠材料的時候,已有的橡膠本構比如mooney等都有著這樣 那樣的不足,很難滿足我們的要求。又比如我們要計算土壤應力的時候,土壤本身受壓不受拉,有著很強的非線性因素,這時候就...
postek二次開發 POSTEK二次開發介面
例項簡介 例項截圖 核心 using system using system.collections.generic using system.componentmodel using system.data using system.drawing using system.text using ...
mcms二次開發 YzmCMS二次開發手冊
摘要 yzmcms是採用mvc設計模式開發,基於模組和操作的方式進行訪問,採用單一入口模式進行專案部署和訪問,無論訪問任何乙個模組或者功能,只有一.yzmcms是採用mvc設計模式開發,基於模組和操作的方式進行訪問,採用單一入口模式進行專案部署和訪問,無論訪問任何乙個模組或者功能,只有乙個統一的入口...