Abaqus子程序:基礎知識概述1

 

1

簡介


用戶子程序被提供來增加一些 Abaqus的功能,為分析提供強有力的和靈活的工具;編寫成C、C++或者FORTRAN代碼,并且在執行分析時必須包含在模型中,不能相互之間調用;可以在某些情況下調用Abaqus中也提供的工具程序。

 

2

模型中包含子程序


可以通過指定一個C、C++或者FORTRAN 源碼或者包含子程序的預編譯目標文件,在一個模型中包括一個或者多個用戶子程序。有兩種使用方法:

(1)在命令行中敲入下面的輸入:

    abaqus job =工作名稱 user =源文件

(2) Abaqus/CAE用法:

    Job 模塊—— job editor——General——User subroutine file

Abaqus子程序:基礎知識概述1的圖1

3

信息管理與交互


在Abaqus/Standard 中,有時候需要建立運行時間環境并管理與外部數據文件之間的交互作用,或者與用戶子程序連接中使用的并行進程之間的交互作用。例如,可以用在分析過程中的外部計算得到的歷史相關量,每個增量一次;或者可能為了后處理,需要將用戶子程序中的COMMON 塊變量所具有的在多個單元上積累得到的輸出量,在一個收斂的增量末尾處寫入到外部文件中。這樣的操作可以使用用戶子程序UEXTERNALDB來執行。此用戶接口可以潛在地用來與其他程序交換數據,允許 Abaqus/Stand-ard 和其他程序之間的交換信息。

4

子程序編寫流程


(1)需要 include的頭文件

對于Fortran編寫的子程序,每一個以FORTRAN編寫的用戶子程序必須包括一個下面的聲明,作為參數列表后的第一個聲明:

        Abaqus/Standard中 :

        include'aba_param.inc'

        Abaqus/Explicit:

        include'vaba_param.inc'

如果變量在主要用戶子程序和后續子程序之間交換,則應當在所有子程序中指定上面的包括聲明來保持精度。

對于C和C++編寫的子程序,每一個C 和 C++用戶子程序必須包括聲明:

        #include < aba_for_c.h >

此文件包含FORTRAN-C接口互用的宏。

文件aba_param. inc、vaba_param.inc和 aba_for_c.h由 Abaqus安裝程序在系統上安裝,并且包含重要的安裝參數。這些聲明告訴Abaqus執行程序將用戶子程序編譯并且鏈接到Abaqus 余下的部分,來自動地包括aba_param. inc或者vaba_param. inc 文件。因為Abaqus將知道它們在哪里,所以不需要用戶找到此文件并將它復制到任何特定的目錄。

(2)命名約定

如果用戶子程序調用其他子程序(非用戶子程序)或使用 COMMON 塊傳遞信息,則此類子程序或 COMMON 塊應以字母 K 開頭,因為該字母在 Abaqus 中絕不會用于任何子程序或 COMMON 塊的名稱開頭。

用 C 或 C++ 編寫的用戶子程序將從 Fortran 中調用;因此,它們必須符合 Fortran 調用約定:C 或 C++ 子程序的名稱必須包含在 FOR_NAME 宏中,并且參數必須通過引用傳遞和接收。;例如,

extern “C“ void   FOR_NAME(film,FILM) (double & arg1, ...) { ˙˙˙ }



(3)要定義或者更新的變量

用戶子程序必須執行它們的既有的功能,而不覆蓋Abaqus 的其他部分。用戶應當僅僅重新定義如“定義得到的變量”節中確定的那些變量。重新定義“為信息傳遞進的變量”將具有不可預測的影響。


(4)編譯和鏈接問題

如果在編譯或鏈接子程序期間遇到問題,請確保 Abaqus 環境文件(該文件的默認位置是 Abaqus 安裝的 site 子目錄)包含系統自定義參數中指定的正確編譯和鏈接命令。這些命令應由 Abaqus 站點管理員在安裝過程中設置。參數的數量和類型必須與文檔中指定的相對應。參數類型或數量的不匹配可能會導致平臺相關的鏈接或運行時錯誤。


(5)內存分配注意事項

我們的用戶子程序將與 Abaqus 共享內存資源。當需要使用大型數組或其他大型數據結構時,應該動態分配它們的內存以便從堆而不是堆棧中分配內存。未能動態分配大型數組可能會導致堆棧溢出錯誤并退出 Abaqus 分析。有關使用本機 Fortran 可分配數組進行動態分配的示例,未來我研究明白了再講,實際上大多數情況是不用考慮的。


(6)測試與調試

開發用戶子程序時,在嘗試將它們用于生產分析工作之前,最好在較小的示例中測試它們,其中用戶子程序是模型中唯一復雜的方面。如果需要,可以使用 Fortran 單元 7(這里單元是文件的unit,fortran中每個文件對應一個唯一的unit號)將調試輸出寫入Abaqus/Standard 信息 (.msg) 文件,或者使用 Fortran 單元 6 將調試輸出寫入 Abaqus/Standard 數據 (.dat) 文件或 Abaqus/Explicit 日志 (.log) 文件;這些單元不應由你的子程序打開,因為它們已由 Abaqus 打開。Fortran 單元 15 到 18 或大于 100 的單元可用于讀取或寫入其他用戶指定的信息。使用其他 Fortran 單元可能會干擾 Abaqus 文件操作;你必須打開這些 Fortran 單元;由于使用了臨時目錄,因此 OPEN 語句中必須使用文件的完整路徑名。

(7)終止分析

當從用戶子程序中終止分析時,應使用實用例程 XIT (Abaqus/Standard) 或 XPLB_EXIT (Abaqus/Explicit) 而不是 stop 。這將確保與分析相關的所有文件都正確關閉(終止分析)。


文章來源: 力學混子愛AI 

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

7
18