跳轉至

使用者子程式擴充

FrontISTR 提供一組使用者子程式,可在不修改主體原始碼的情況下擴充功能。其對象包括使用者自行實作構成律,以及整合使用者定義的外部荷重。本章列出可擴充的項目,以及在分析控制檔案中用來呼叫各項擴充的關鍵字。子程式引數的詳細規格與重新建置步驟請參閱 使用者子程式(程式設計指南)

功能總覽

使用者子程式的擴充點可分為材料構成律與外部荷重兩大類。構成律方面有使用者線性彈性、使用者超彈性、使用者彈塑性以及通用使用者構成律四種呼叫路徑,各自由獨立的關鍵字啟用。外部荷重方面則提供一條路徑,可從使用者準備的外部檔案讀取荷重資訊,並加至全域荷重向量與殘差向量。這些擴充皆需先編輯 FrontISTR 發行套件中附帶的範本檔案,再重新建置主程式後才能使用。

擴充類別 分析控制關鍵字 主要使用者子程式 要編輯的範本
使用者線性彈性 !ELASTIC, TYPE=USER uElasticMatrix, uElasticUpdate fistr1/src/lib/user/uelastic.f90
使用者超彈性 !HYPERELASTIC, TYPE=USER uElasticMatrix, uElasticUpdate fistr1/src/lib/user/uelastic.f90
使用者彈塑性(降伏函數、回歸映射) !PLASTIC, YIELD=USER uElastoPlasticMatrix, uBackwardEuler, uElastoPlasticNumStatus fistr1/src/lib/user/uyield.f90
通用使用者構成律 !USER_MATERIAL uMatlMatrix, uUpdate fistr1/src/lib/user/umat.f90
使用者定義外部荷重 !ULOAD, FILE=<fname> ureadload, uloading, uResidual fistr1/src/lib/user/uload.f90

不支援使用者硬化律(保留內建降伏函數,只將硬化曲線替換成使用者實作的路徑)。若必須自行實作硬化曲線,請選擇 !PLASTIC, YIELD=USER,並將整個彈塑性構成律替換為使用者實作。也不支援使用者邊界條件,以及重啟時供使用者處理的擴充點。

不支援 !CREEPTYPE=USER。若要自行實作時間相依構成律,請使用 !USER_MATERIAL

使用者構成律

使用者構成律是用外部子程式實作內建材料模型無法表示的應力-應變關係之入口。依對應內建構成律的框架,可分為使用者線性彈性、使用者超彈性、使用者彈塑性及通用使用者構成律四條路徑。無論哪一條路徑,都要在分析控制資料的 !MATERIAL 區塊內,對相應關鍵字加上 TYPE=USERYIELD=USER。最多可指定 100 個使用者常數,並傳遞給子程式。

使用者線性彈性

使用者線性彈性是在微小變形框架中由使用者計算彈性矩陣的路徑。在分析控制資料中指定 !ELASTIC, TYPE=USER 後,FrontISTR 會將其視為微小變形構成律,並在元素剛度計算時呼叫 uElasticMatrix(回傳彈性矩陣 \(D\)),在應力更新時呼叫 uElasticUpdate(回傳應力)。不得與既有的超彈性模型或彈塑性模型併用。

使用者超彈性

使用者超彈性是在大變形(Total Lagrange)框架下,從應變能函數的微分計算應力與切線剛度的路徑。在分析控制資料中指定 !HYPERELASTIC, TYPE=USER。呼叫的子程式與使用者線性彈性相同,都是 uElasticMatrixuElasticUpdate,也共用 fistr1/src/lib/user/uelastic.f90 範本。由於關鍵字的指定會切換 FrontISTR 將實作視為微小變形或 Total Lagrange,因此同一個範本不能同時供微小變形與大變形實作共用。請選擇其中一種構成律來實作。

使用者彈塑性

使用者彈塑性是由使用者實作降伏函數與回歸映射(return-mapping)程序的路徑。在分析控制資料中指定 !PLASTIC, YIELD=USER。此路徑會進入與內建 Mises、Mohr-Coulomb、Drucker-Prager 降伏函數不同的獨立分支;元素剛度計算時呼叫 uElastoPlasticMatrix(回傳彈塑性切線剛度 \(D\)),應力更新時呼叫 uBackwardEuler(將試算應力映射為真應力並更新狀態變數),高斯點初始化時呼叫 uElastoPlasticNumStatus(回傳要保留的實數狀態變數數量)。不支援只把硬化曲線替換成使用者實作的路徑。即使只需要自訂硬化曲線,也必須透過此路徑將整個彈塑性構成律替換為使用者實作。

通用使用者構成律

通用使用者構成律是用來一次實作不屬於彈性、超彈性或彈塑性框架之構成律的路徑。在分析控制資料中指定 !USER_MATERIAL。預設以 Updated Lagrange 法的框架處理;指定 KIRCHHOFF 時則以 Total Lagrange 法處理。狀態變數的數量由 NSTATUS 指定。元素剛度計算時呼叫 uMatlMatrix(回傳切線剛度 \(D\)),應力更新時呼叫 uUpdate(更新應力與狀態變數)。

使用者常數與狀態變數的傳遞

!ELASTIC, TYPE=USER!HYPERELASTIC, TYPE=USER!USER_MATERIAL 各路徑中,寫在分析控制資料資料行上的使用者常數(最多 100 個)會直接透過子程式的 matl 引數傳遞。對 !PLASTIC, YIELD=USER,除 !ELASTIC 所指定的彈性常數外,也會傳遞透過 !PLASTIC 資料行提供的使用者常數。

在通用使用者構成律及 !PLASTIC, YIELD=USER 中,可透過狀態變數 fstat 將前一步的歷程資訊(例如塑性應變、背應力、損傷量等)傳給使用者實作,並在步驟結束時寫回。狀態變數數量在通用使用者構成律中由 !USER_MATERIALNSTATUS 決定,在 !PLASTIC, YIELD=USER 中則由 uElastoPlasticNumStatus 的回傳值決定。

使用者定義外部荷重

使用者定義外部荷重是以使用者子程式定義內建集中荷重、分佈荷重或體積力無法表示之外力的路徑。若在分析控制資料中寫入 !ULOAD, FILE=<fname>,FrontISTR 會將指定的檔案名稱傳給 ureadload,並把使用者實作讀取的資訊保存在模組內資料中。

!ULOAD 的啟用對應以下三個子程式。

  • ureadload:分析開始時,從控制檔案所指定的外部檔案讀取使用者定義荷重。使用者實作端開啟檔案,並把所需資料存入模組變數。
  • uloading:在各步驟組裝外部荷重向量時呼叫,將使用者荷重加到全域荷重向量。會以引數傳入目前步驟編號與荷重係數。
  • uResidual:在各次反覆運算組裝殘差向量時呼叫,將使用者荷重的貢獻加到全域殘差向量。非線性反覆運算與平衡計算都會呼叫它。

沒有提供使用者邊界條件(指定變位、接觸條件的使用者擴充)所對應的擴充點。若需要外力以外的使用者擴充,請使用對應的內建關鍵字或使用者構成律路徑。

使用者子程式的實作步驟

要使用使用者子程式,必須先編輯 FrontISTR 原始碼發行套件中附帶的範本檔案,再重新建置 FrontISTR 主體。發行版二進位檔無法替換使用者子程式,因此使用使用者擴充時,必須準備可從原始碼建置 FrontISTR 的環境。

使用者子程式範本位於 fistr1/src/lib/user/ 下,各擴充類別都有指定的編輯檔案(檔名請參閱 功能總覽 的表格)。各檔案在初始狀態下,子程式本體為空白或包含線性彈性的範例實作,使用者在此加入自己的構成律或荷重定義。編輯範本後,照一般方式使用 CMake 重新建置 FrontISTR 主體,再用得到的 fistr1 執行檔執行分析。

子程式引數的意義、狀態變數陣列的處理方式,以及重新建置時的注意事項等詳細內容,分別記載於程式設計指南的各頁。

相關項目