LS -DYNA的二次開發環境及應用 附LS-DYNA面中文教程下載
本文介紹了LS-DYNA新一代二次開發環境,編譯連接過程和新增功能。新的開發環境完全兼容原有的開發環境,包括所有的材料模型,狀態方程,單元類型,和求解器控制等各種用戶子程序。新開發環境簡化用戶子程序的編譯連接過程,直接生成動態連接庫,與LS-DYNA主執行程序完全脫離。LS-DYNA主程序支持多個用戶子程序的動態連接庫同時加載,按用戶規則同時調用。新增功能包括支持用戶自定義關鍵字,模型參數化及自動生成等。本文介紹了新開發環境的編譯環境設置和編譯連接過程,以及多個動態連接庫的同時加載和調用方法。
引言
LS-DYNA是一個大型的通用有限元程序,秉承一個執行程序,一個模型文件,執行多類型多物理分析的開發宗旨,致力簡化用戶建模過程并提高模型的重復利用率。LS-DYNA內置的顯式和隱式高效求解器及兩者之間的動態互換,對解決多重非線性的大規模問題具有獨特的優勢,在實際工程中也得到非常廣泛的應用。考慮到實際物理問題的復雜性和多樣性,LS-DYNA在開發初期就開放程序內核,讓用戶根據實際問題開發相應的用戶模塊來增強主程序的功能。現有的用戶子程序大體上包括以下幾類:
1)材料模型UMAT
2)熱材料模型TUMAT
3)狀態方程UEOS
4)單元UELEM
5)求解控制模塊
6)輸入輸出模塊
LS-DYNA為每個模塊都提供現成的模板程序,用戶根據需要修改相應模塊的模就可以實現二次開發。因此,對于有一定編程經驗的有限元開發人員來說,LS-DYNA的用戶模塊開發是相對比較簡單的,尤其是全套的模板程序提供了很好的示例和開發基礎,演示了在大變形大轉動及各種非線性下的高效編程。這么多年來,有大批用戶成功地根據自己的需要開發出高質量的用戶子程序,實現各種復雜問題的計算。
從目前的一些用戶的使用情況來看,二次開發比較容易出錯的一個環節是編譯和連接過程。目前LS-DYNA提供的一種開發方法是把所有主程序的OBJ文件打包成庫文件提供給用戶,而這些OBJ文件是在LS-DYNA標準編譯環境下編譯出來的半成品二進制文件。然后用戶在自己的開發環境下編譯其用戶子程序,與主程序的OBJ庫文件連接生成含有用戶子程序的LS-DYNA執行程序。該方法的好處是生成的LS-DYNA執行程序內含用戶子程序,方便執行。容易出錯的地方是用戶的編譯環境往往LS-DYNA的標準編譯環境不一樣,可能會導致連接后的LS-DYNA執行程序不能正常工作。兩個編譯環境之間的差異可能會存在于各個方面,比如操作系統類別和版本,FORTRAN編譯器的主版本及修正版本,C/C++編譯器的版本及其所帶的標準庫文件等等。這些差異導致的錯誤有時還很難發現,對二次開發造成一定的困擾。
另外,LS-DYNA得到越來越廣泛的應用,在有些工業領域逐漸被認為是行業的標準分析軟件。該行業的原材料供應商針對自己的材料等開發專門的材料模型及配套參數,提供給客戶對用其材料的產品利用LS-DYNA進行分析。近幾年來這種開發模式逐漸形成了一個發展趨勢。從另一面看,制造商在一次分析中可能要用到多個供應商的不同材料模型,而如何保證所有供應商的子程序OBJ版本都與LS-DYNA一致并正確地連接在一起,難度往往較大。LS-DYNA預分配的用戶材料號從41號到50號,總共只有10個,如何協調眾多供應商的材料號避免沖突,又增加協調的難度。因此,這些需求都對LS-DYNA的開發環境提出了更高的要求。
為此,在完全兼容現有用戶子程序的基礎上,LS-DYNA推出另一種新的開發環境,在方便性,兼容性和靈活性等方面有很大的提高。首先,LS-DYNA的主程序是一個可以進行獨立分析的標準版執行程序,與用戶子程序完全分離,也不依賴于任何用戶子程序;LS-DYNA的主程序可以單獨升級,同時保持對用戶子程序的兼容性,用戶子程序無需重新編譯和連接。其次,用戶子程序是在用戶的開發環境下的獨立編譯連接并生成的動態連接庫,其所用的系統庫函數不影響LS-DYNA主程序;動態連接庫也保證了用戶子程序的版本獨立性和兼容性,無需和LS-DYNA主程序同時升級;有些情況下,動態連接庫可以允許不同的FORTRAN編譯器來編譯和連接。最后,用戶可以根據模型需要,在模型文件里面指定加載一個或多個多動態連接庫,并與模型中的相應部件關聯,實現動態調用。此外,若將來用戶子程序的接口有一定的變化時,LS-DYNA的高版本將考慮對以前版本的用戶子程序的兼容性,可以直接加載以前版本的用戶子程序的動態連接庫,而用戶無需重新編譯和連接。
本文先對LS-DYNA的用戶子程序做一個概述,介紹新開發環境下的開發過程及對源程序進行跟蹤和調試過程,最后演示多個動態連接庫的加載和調用過程。
LS-DYNA用戶子程序
1)材料模型UMAT
用戶材料模型是用戶子程序中應用最廣泛的,也是最實用的模塊。LS-DYNA中的用戶材料號是從41號到50號,受關鍵字*MAT_USER_DEFINED_MATERIAL_MODELS控制。所有用戶材料子程序的統一入口子程序是dyn21.f中的
進入這個子程序后,再根據不同的單元類型選擇不同的材料子程序
urmathn: 體單元的三維材料模型
urmats: 殼單元的二維平面應力材料模型
urmats: 殼單元的二維平面應力材料模型
這三個不同子程序根據各自的單元特點對應力應變進行相應的處理,再進入具體的用戶子程序umat41, umat42, … , umat50。這10個子程序是標準的串行版本模板,演示不同類型的材料模型,用戶可以從這10個子程序模板中選一個較為貼近的開始。如果對計算效率要求較高,用戶可以選與其對應的矢量版的模板,umat41v, umat42v, … , umat50v。矢量版子程序的特點是利用現代128位或更多位CPU的寬度,一次對多個操作數同時進行運算,比如一個128位CPU一次對4個32位的單精度實數進行運算,而一個512位CPU則一次對16個單精度實數進行運算。用戶開發出這個umat子程序就可以進行顯式分析。如果要進行隱式分析,LS-DYNA還需要該材料的切線剛度陣子程序。不同單元的切線剛度陣入口子程序分別是:
urtanh: 體單元的三維材料模型
urtans: 殼單元的二維平面應力材料模型
urtanb: 三種不同的梁單元模型
這三個入口子程序也是根據各自的單元特點處理后,進入具體的切線剛度陣子程序 utan41, utan42, … , utan50, 或者其相應的矢量版子程序utan41v, utan42v, … , utan50v。用戶需要開發對應的utan子程序,就可以進行隱式分析了。
如果該材料需要支持LS-DYNA的界面單元,則用戶還要開發對應的用戶界面材料子程序(Cohesive Materials)。界面材料子程序的統一入口子程序是dyn21b.f中的
進入后轉入相應的具體界面材料子程序umat41c, umat42c, … , umat50c。
2)熱材料模型TUMAT
熱材料模型的材料號是從11號到15號,由關鍵字*MAT_THERMAL_USER_DEFINED控制。其統一入口子程序是dyn21b.f中的
3)狀態方程UEOS
狀態方程在LS-DYNA的顯式分析中非常重要,是沖擊力學的基礎。用戶狀態方程的號碼是從21號到30號,由關鍵字*EOS_USER_DEFINED控制。其入口子程序是dyn21b.f中的
相應的用戶狀態方程的子程序是ueos21s, ueos22s, … , ueos30s, 及其對應的矢量版分別是ueos21v, ueos22v, … , ueos30v。
4)單元UELEM
用戶單元開發分兩類,殼單元和體單元。用戶殼單元的號碼是從101號到105號,由關鍵字*SECTION_SHELL控制,統一入口子程序是dyn21b.f中的
進入到殼單元程序后,所有的變量都是在殼單元的單元坐標系中完成。殼單元的額外控制參數見*CONTROL_ACCURACY,*CONTROL_SHELL等。用戶單元開發的工作量及復雜度要遠超用戶材料模型的開發,涉及到單元的形函數,B矩陣,沙漏控制,單元內力集成等等。另外還需提供用戶殼單元的質量陣,見dyn21b.f中的
而用戶體單元的號碼也是從101號到105號,由關鍵字*SECTION_SOLID控制,統一入口子程序是dyn21b.f中的
質量陣的入口子程序是在dyn21b.f中
用戶體單元的變量都是在整體坐標系中進行,對各向異性材料需要轉動。開發的復雜度比較高,其模板中需要提供很多子程序。詳細情況參閱dyn21b.f的用戶單元模板。
5)求解控制模塊及輸入輸出模塊
這個部分的子程序很多,多數都在dyn21.f中,還有幾個在couple2other_user.f 和dynrfn_user.f中。這些子程序是分散在手冊的不同章節,沒有一個統一的說明。在關鍵字*MODULE_USE一節中,這些子程序都被簡單地分類處理。另外,在LS-DYNA手冊第一卷關鍵字手冊的附錄A-H中對二次開發有非常詳細的介紹。
LS-DYNA 用戶子程序的編譯和連接
在新的用戶子程序開發環境中,LS-DYNA的主程序與用戶子程序完全分開,二次開發包中也不包含LS-DYNA主程序的OBJ文件。因此,新的二次開發包的文件很小,全部打包壓縮后只有165KB,極大地提高了用戶子程序的編譯和連接速度,使得二次開發更加方便。
二次開發包中包括以下三部分內容:
1)各個用戶子程序的模板,是FORTRAN的源程序,包括dyn21.f和dyn21b.f等;
2)頭文件,也是源程序,包含LS-DYNA中各個COMMON BLOCK參數,供二次開發使用;
3)編譯腳本文件,Makefile,用于編譯和連接。
前兩部分的源程序與用戶子程序的具體功能相關。腳本文件 Makefile 是一個純文本文件,可以用普通的文本編輯器修改,主要內容包括以下幾個變量的設置:
其中:
MY_FLAG是FORTRAN編譯器的標準選項。如果用戶的FORTRAN編譯器和LS-DYNA主程序的編譯器的版本一樣,不建議更改這些標準選項。
FC指定MPP的FORTRAN編譯器,此例中給出的是platform_mpi的編譯器。
LC指定MPP的連接器,此例中給出的是platform_mpi的連接器。
Export MPI_F77是用來指定真正的FORTRAN編譯器,MPP編譯器會調用這個編譯器來編譯FORTRAN源程序。此例中指定了Intel FORTRAN編譯器的版本及其安裝路徑。FC,LC,MPI_F77中指定的程序都包含有安裝路徑。如果用戶機器上安裝路徑或版本與此不同,則需要修改相應的變量,否則不能正確編譯連接。
MY_TARGET是指定動態連接庫的名稱,在LINUX系統下一般以.so作為后綴,而Windows系統以.dll作為后綴
MY_OBJS包含LS-DYNA的所有模板子程序的FORTRAN源碼。有些模版源碼可能沒有用上,手工去掉或保留都可以,不影響真正開發部分的源碼的執行。用戶可以在這個變量里加入自己的源程序文件。
MY_INC包含LS-DYNA用戶開發包的所有的頭文件,用戶可以添加自己的頭文件,但不建議刪除已有的頭文件。
當這些變量都設置好后,在當前目錄下運行LINUX系統的命令“make”來執行這個編譯腳本文件,自動完成編譯和連接過程,并產生 MY_TARGET所指定的動態連接庫。如果源程序有錯誤,則打印相應的錯誤信息,并終止編譯連接過程。用戶在修改相應的源程序后,可以再次執行“make”命令來重試編譯和連接。另外,新的開發環境僅支持LINUX的單機或集群系統,對Windows系統暫時還不能支持。
在用戶子程序開發過程中,經常需要對源程序進行跟蹤和調試。用戶只需將Makefile中的MY_FLAG變量里的優化選項“-O2”改為“-g”,就可以關掉編譯器的優化功能并在動態連接庫中加入源程序信息,方便對源碼調試。調試MPP版本的LS-DYNA,用戶避免MPIRUN啟動多進程,而是直接啟用gdb(或者其它的跟蹤程序,如idb,ddd等)加載主程序,并在用戶子程序中設置斷點:
set breakpoint pending on
break <source file name>:<line number>
再用r命令啟動LS-DYNA進入單進程模式運行。LS-DYNA主程序加載帶有源程序信息的動態連接庫后就設置相應的斷點,并在進入該用戶子程序后就在該斷點處停下來等待調試。
LS-DYNA 用戶子程序的動態連接庫的調用
在一般情況下,LS-DYNA主程序進行普通分析是不加載任何用戶動態連接庫,也沒有必要。只有當模型需要用到某個用戶動態連接庫時,則在原來的關鍵字文件中加入一個新的關鍵字*MODULE_LOAD來實現加載。該關鍵字的格式如圖一所示:
圖一 關鍵字*MODULE_LOAD卡片
情形一:只有一個動態連接庫
當一個模型只用到一個動態連接庫的時候,只需要*MODULE_LOAD就可以:
第一張卡片是給這個動態連接庫在這個模型中定義一個標識名,不能重名。第二張卡片是動態連接庫的具體文件名,可以包含絕對路徑或者相對路徑。文件名及其路徑的長度限制為80個字符。如果不夠的話,則需要用到另外一個關鍵字*MODULE_PATH來指定動態連接庫的路徑。LS-DYNA則會搜索這個路徑并加載動態連接庫。
只有一個動態連接庫的情形是最簡單的,也和以前的開發模式完全兼容。此情形下,LS-DYNA主程序會自動把所有對用戶子程序的需求都轉到這個動態連接庫。
情形二:調用多個動態連接庫
若模型需要用到多個動態連接庫,則可使用關鍵字*MODULE_LOAD 來單獨加載每個動態連接庫:

此例演示了同時加載三個動態連接庫,并定義了相應的三個獨立標識名:“my_mode”,“mod_a”和“mod_b”。LS-DYNA把這些動態連接庫加載后,還需要另外一個關鍵字*MODULE_USE定義各種調用規則,把對用戶子程序的調用轉到相應的動態連接庫。關鍵字*MODULE_USE需要兩張或更多的卡片來定義一個動態連接庫的一個或多個調用規則。每個動態連接庫都需要至少一個單獨的*MODULE_USE關鍵字來定義其調用規則。

圖二 關鍵字*MODULE_USE卡片
*MODULE_USE的第一張卡片輸入動態連接庫的標識名,后續的調用規則只適用于該動態連接庫。第二張卡片定義規則,一張卡片定義一個規則。若需要定義多個規則,則可以重復這張卡片。當多個規則有沖突時,后輸入的規則為準,因此定義規則的時候要注意順序。另外也可利用順序,把普通的規則定義在先,再定義一些特殊的規則。
在多數情況下,調用規則都很簡單。借用上面的例子,假設模型中用到my_mod中UMAT41,mod_a中的UMAT42,以及mod_b中的UMAT45和UMAT46,則定義以下四個規則就可以了:
這樣LS-DYNA就會把所有用到UMAT41的材料轉到my_mod,而其它的UMAT轉到相應的動態連接庫mod_a或mod_b。假若模型里還用到了UMAT48,但沒有相應的規則指定如何調用,LS-DYNA主程序就會報告錯誤并終止執行,指明UMAT48沒有找到。
情形三:調用材料號有沖突的多個動態連接庫
假若情形二中用戶子程序有沖突,比如上例模型需要同時用到三個動態連接庫my_mod,mod_a,mod_b中的UMAT41子程序,則需要更詳細的規則來定義調用關系。上例的規則是針對真實的用戶子程序名字來定義的,而此例中真實子程序名字有了沖突,就需要定義一個虛擬的子程序名稱來。在LS-DYNA中的材料號從1001到2000被指定為用戶材料模型,也就是說關鍵字*MAT_USER_DEFINED_MATERIAL_MODELS的材料號MT既可以是41到50,也可以是1001到2000。這些虛擬的材料號并沒有真實的用戶子程序來對應的,必須通過規則來定義調用關系。有了這些虛擬材料號后,有沖突的材料號就可以重新定義:
所有用到my_mod中UMAT41的材料都定義為1001
所有用到mod_a中UMAT41的材料都定義為1002
所有用到mod_b中UMAT41的材料都定義為1003
然后定義下面三個規則:
用虛擬的材料號來定義規則比較簡單,只是需要對原來的模型文件中材料號做一點修改。除此之外,LS-DYNA還允許對材料的標識號(MATID)定義調用規則,不過LS-DYNA中的用戶材料模型限制同一個材料號(MT)的用戶子程序必須要有相同的控制參數,參閱關鍵字*MAT_USER_DEFINED_MATERIAL_MODELS中對MT的說明。因此,在實際使用上,虛擬材料號的方法比較適用,也不容易出錯。
另外,針對材料號的規則不是僅僅對UMAT子程序定義的,LS-DYNA會自動把這些規則應用到與UMAT的配套子程序上,如切線剛度陣子程序URTANH,URTANS,URTANB,及界面材料子程序UMATC等。切線剛度子程序的調用還會自動根據單元類型來進入正確的入口,無需用戶做更多的輸入。
本文針對材料號舉例演示了不同動態連接庫的調用規則,而關鍵字*MODULE_USE還可以對用戶開發包中的所有子程序都可以定義調用規則,包括用戶熱材料,用戶單元,用戶控制模塊。詳細的規則定義參閱關鍵字手冊中*MODULE一節。
LS-DYNA 二次開發的其它新增功能
用戶參數*USER_PARAMETER
為支持用戶二次開發,LS-DYNA的主程序還新增一些輔助功能,使得用戶子程序的功能更完善更強大。用戶參數*USER_PARAMETER支持用戶定義自己的標識字,并輸入相應的模型參數,可以同時輸入多個整數(I),實數(F),字符串(A),或者多行文本(L)。用戶子程序在運行時可以調用系統程序來獲取這些參數:
其中key就是用戶自定義的標識字,其長度可以多到80個字符。
用戶模型自動化*USER_KEYWORD
這個功能是讓LS-DYNA的主程序在讀取模型文件是,調用用戶子程序rdusrkwd,讓用戶子程序根據自己的參數來直接生成模型,或者模型中的部分部件。這個功能應用在在很多方面,比如:
企業可以將標準化部件的不同密度的網格集中存放在中央數據庫,用戶子程序可以根據部件的標識號,分析的類型和要求,動態調入相應的網格和計算參數,并加入到當前模型中。
用戶子程序在讀取模型中材料的供應商和標識號等信息后,直接從本地數據庫或供應商的遠程數據庫讀取相應的材料模型設置及參數,使得模型本身更加自動化和智能化。
用戶子程序可以為模塊化產品自動建模,生成LS-DYNA的模型,簡化建模過程。
用戶應用程序開發
目前的用戶二次開發是在LS-DYNA主程序的基礎上,利用子程序來增強LS-DYNA的功能,是限制在LS-DYNA主程序的框架內。LS-DYNA的最新開發環境將支持用戶的獨立應用程序開發,而不僅僅是動態連接庫。用戶自己的主程序在MPP的框架下與LS-DYNA進行實時交換數據,實現更加寬松的多物理場耦合分析。目前很多LS-DYNA的用戶都有自己獨特的獨立應用主程序,若要改造為LS-DYNA的動態連接庫運行,開發工作量較大,難度也較大。而新的開發環境將配備并行開發模板,該模板可以直接將用戶的應用主程序加入到LS-DYNA的MPP并行環境中,自動實現MPP初始化對接,并在運行時與LS-DYNA進行數據交換。因此,新的開發環境將極大地方便用戶進行不同層次的開發,與LS-DYNA實現耦合分析。
結束語
LS-DYNA新的二次開發環境在完全兼容原來的用戶子程序的基礎上,簡化了用戶開發過程,提供了支持多用戶模塊的無沖突加載解決方案,并實現用戶子程序的獨立模塊化。LS-DYNA新的二次開發環境還為用戶子程序提供自定義關鍵字,自動模型生成,用戶應用程序MPP 耦合等支持,使得用戶開發的模塊能全面地融入到LS-DYNA的開放架構中,解決更多的實際工程問題。
下載地址:LS-DYNA面中文教程
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















