Translation status
This page has not yet been translated into English, or its translation is out of date. The current 日本語 version is shown as a fallback.
ユーザーサブルーチン拡張¶
FrontISTR は,本体ソースを書き換えずに機能を拡張するためのユーザーサブルーチン群を提供する.構成則のユーザ実装と,ユーザ定義外部荷重の組込みが対象である.本章では拡張可能なポイントと,それぞれを呼び出すための解析制御ファイル上のキーワードを一覧する.サブルーチン引数の詳細仕様と再ビルド手順は ユーザサブルーチン(コーディングガイド) を参照されたい.
機能の全体像¶
ユーザサブルーチンによる拡張ポイントは,材料構成則と外部荷重の 2 系統に分かれる.構成則側では,線形弾性,超弾性,弾塑性,および汎用構成則の 4 通りの呼び出し経路があり,それぞれ独立したキーワードで起動する.外部荷重側では,ユーザが用意した外部ファイルから荷重情報を読み込み,全体荷重ベクトルおよび残差ベクトルへ加算する経路が用意されている.いずれも,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 を用いる.
ユーザー構成則¶
ユーザ構成則は,組み込み材料モデルでは表せない応力~ひずみ関係を外部サブルーチンで実装するための入口である.対応する組み込み構成則の枠組みに合わせて,ユーザ線形弾性,ユーザ超弾性,ユーザ弾塑性,汎用ユーザ構成則の 4 経路がある.いずれの経路でも,解析制御データの !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 の起動には次の 3 つのサブルーチンが対応する.
ureadload: 解析開始時に,制御ファイルで指定された外部ファイルからユーザ定義荷重を読み込む.ユーザ実装側でファイルを開き,必要なデータをモジュール内変数に格納する.uloading: 各ステップの外部荷重ベクトル組立時に呼び出され,全体荷重ベクトルにユーザ荷重を加算する.現ステップ番号と荷重係数が引数として渡される.uResidual: 各反復における残差ベクトル組立時に呼び出され,全体残差ベクトルにユーザ荷重の寄与を加算する.非線形反復および釣合い計算の両方から呼び出される.
ユーザ境界条件(指定変位・接触条件のユーザ拡張)に対応する拡張ポイントは用意されていない.外力以外のユーザ拡張が必要な場合は,対応する組み込みキーワードまたはユーザ構成則の経路を用いる.
ユーザサブルーチンの実装手順¶
ユーザサブルーチンを利用するには,FrontISTR ソース配布物に含まれるテンプレートファイルを編集してから FrontISTR 本体を再ビルドする.配布バイナリではユーザサブルーチンを差し替えられないため,ユーザ拡張を使う場合はソースからのビルド環境を用意する.
ユーザサブルーチンのテンプレートは fistr1/src/lib/user/ 配下に置かれており,拡張カテゴリごとに編集対象ファイルが決まっている(ファイル名は 機能の全体像 の表を参照).いずれのファイルも,初期状態ではサブルーチン本体が空,または線形弾性のサンプル実装になっており,ユーザはここに自分の構成則・荷重定義を書き加える.テンプレートを編集したら FrontISTR 本体を通常どおり CMake で再ビルドし,得られた fistr1 実行ファイルで解析を実行する.
サブルーチン引数の意味,状態変数配列の扱い,再ビルド時の注意点などの詳細は,コーディングガイドの各ページに分かれている.
関連項目¶
- 材料データ — 構成則の選択肢と組み込みモデル一覧
- 境界条件・荷重 — 組み込みの境界条件・荷重
- ユーザサブルーチン(コーディングガイド) — サブルーチン引数仕様と実装規約
- !USER_MATERIAL — 汎用ユーザ構成則のキーワード書式
- !ELASTIC —
TYPE=USERを含む線形弾性キーワード - !HYPERELASTIC —
TYPE=USERを含む超弾性キーワード - !PLASTIC —
YIELD=USERを含む弾塑性キーワード