使用者子程式擴充¶
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,並將整個彈塑性構成律替換為使用者實作。也不支援使用者邊界條件,以及重啟時供使用者處理的擴充點。
不支援 !CREEP 的 TYPE=USER。若要自行實作時間相依構成律,請使用 !USER_MATERIAL。
使用者構成律¶
使用者構成律是用外部子程式實作內建材料模型無法表示的應力-應變關係之入口。依對應內建構成律的框架,可分為使用者線性彈性、使用者超彈性、使用者彈塑性及通用使用者構成律四條路徑。無論哪一條路徑,都要在分析控制資料的 !MATERIAL 區塊內,對相應關鍵字加上 TYPE=USER 或 YIELD=USER。最多可指定 100 個使用者常數,並傳遞給子程式。
使用者線性彈性¶
使用者線性彈性是在微小變形框架中由使用者計算彈性矩陣的路徑。在分析控制資料中指定 !ELASTIC, TYPE=USER 後,FrontISTR 會將其視為微小變形構成律,並在元素剛度計算時呼叫 uElasticMatrix(回傳彈性矩陣 \(D\)),在應力更新時呼叫 uElasticUpdate(回傳應力)。不得與既有的超彈性模型或彈塑性模型併用。
使用者超彈性¶
使用者超彈性是在大變形(Total Lagrange)框架下,從應變能函數的微分計算應力與切線剛度的路徑。在分析控制資料中指定 !HYPERELASTIC, TYPE=USER。呼叫的子程式與使用者線性彈性相同,都是 uElasticMatrix 與 uElasticUpdate,也共用 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_MATERIAL 的 NSTATUS 決定,在 !PLASTIC, YIELD=USER 中則由 uElastoPlasticNumStatus 的回傳值決定。
使用者定義外部荷重¶
使用者定義外部荷重是以使用者子程式定義內建集中荷重、分佈荷重或體積力無法表示之外力的路徑。若在分析控制資料中寫入 !ULOAD, FILE=<fname>,FrontISTR 會將指定的檔案名稱傳給 ureadload,並把使用者實作讀取的資訊保存在模組內資料中。
!ULOAD 的啟用對應以下三個子程式。
ureadload:分析開始時,從控制檔案所指定的外部檔案讀取使用者定義荷重。使用者實作端開啟檔案,並把所需資料存入模組變數。uloading:在各步驟組裝外部荷重向量時呼叫,將使用者荷重加到全域荷重向量。會以引數傳入目前步驟編號與荷重係數。uResidual:在各次反覆運算組裝殘差向量時呼叫,將使用者荷重的貢獻加到全域殘差向量。非線性反覆運算與平衡計算都會呼叫它。
沒有提供使用者邊界條件(指定變位、接觸條件的使用者擴充)所對應的擴充點。若需要外力以外的使用者擴充,請使用對應的內建關鍵字或使用者構成律路徑。
使用者子程式的實作步驟¶
要使用使用者子程式,必須先編輯 FrontISTR 原始碼發行套件中附帶的範本檔案,再重新建置 FrontISTR 主體。發行版二進位檔無法替換使用者子程式,因此使用使用者擴充時,必須準備可從原始碼建置 FrontISTR 的環境。
使用者子程式範本位於 fistr1/src/lib/user/ 下,各擴充類別都有指定的編輯檔案(檔名請參閱 功能總覽 的表格)。各檔案在初始狀態下,子程式本體為空白或包含線性彈性的範例實作,使用者在此加入自己的構成律或荷重定義。編輯範本後,照一般方式使用 CMake 重新建置 FrontISTR 主體,再用得到的 fistr1 執行檔執行分析。
子程式引數的意義、狀態變數陣列的處理方式,以及重新建置時的注意事項等詳細內容,分別記載於程式設計指南的各頁。
相關項目¶
- 材料資料 — 構成律的選項與內建模型一覽
- 邊界條件、荷重 — 內建邊界條件與荷重
- 使用者子程式(程式設計指南) — 子程式引數規格與實作規範
- !USER_MATERIAL — 通用使用者構成律的關鍵字格式
- !ELASTIC — 包含
TYPE=USER的線性彈性關鍵字 - !HYPERELASTIC — 包含
TYPE=USER的超彈性關鍵字 - !PLASTIC — 包含
YIELD=USER的彈塑性關鍵字