COMSOL Multiphysics® ソフトウェアのバージョン 5.5 のリリースに伴い, モデルの状態または履歴を追跡するための機能が追加されました. 状態変数機能により, あるフィールドの時間経過による履歴の追跡が簡単になりました. これらの変数は, 材料特性などの他のフィールドにも影響を与えることができるので, モデルにヒステリシスを実装するために使用することができます.
状態変数インターフェース
下のスクリーンショットにあるように, モデルビルダーで変数ユーティリ
ティオプションを有効にすると, 状態変数インターフェースが利用できます.

変数ユーティリティオプションを有効にする方法.
このオプションを有効にすると, 定義リボン内に変数ユーティリティボタンが表示され, モデルツリー内のコンポーネント→ 定義ブランチを右クリックすると, 変数ユーティリティサブメニューが表示されます. この機能を追加すると, 以下のような任意のジオメトリックエンティティレベルで変数を定義できるようになります.
- 領域
- 境界
- エッジ
- 点
この機能の設定は以下のスクリーンショットのようになっています.

状態変数の設定.
設定項目はそれほど多くありませんが, この機能の使用方法はたくさんあります.
まず, ウィンドウ下部の設定から見てみましょう. 状態変数の更新は, 各タイムステップ(またはパラメータステップ)の前, または後に行うことができます. 複素数を想定している場合は, 複素数を許可するオプションを有効にしてください.
次に次数ですが, これは各要素内の何番目のポイントに状態変数を保存するかを制御するものです. この次数は, ガウスポイントデータの要素の次数に沿っています. 次数が0の場合は, 各要素で1つの状態変数しか定義されていないことを意味します. デフォルトの次数4は, 多くのフィジックスで使用される2次要素の次数で使用されるガウス積分点に対応していますが, 異なる要素の次数を使用する場合は, この設定を要素の次数の2倍になるようにご調整ください.
最後に, 状態コンポーネントの設定では, いくつかの状態変数, その初期条件, およびそれらの更新方法を定義することができます.
次に, この機能を使った例を見てみましょう.
フィールドの最大値の追跡
温度が時間に応じて変動する過渡的モデルがあるとします. その良い例が, アプリケーションギャラリーのシリコンウェハーのレーザー加熱の例です. 初期値を 0(または初期温度フィールド以下の任意の値)とした状態変数 MaxTを定義し, この変数を使用して更新式で最大温度を保存することで, 部品が到達する最大温度を追跡することができます.
if(T>MaxT,T,MaxT)
このif文は, 空間内のどこであろうと, 温度場 TがMaxTよりも大きい場合には, いつでも真と評価され, MaxTは温度の値を取ることになる. そうでなければ, MaxTは現在の値と同じままです. この場合, 各ステップの後に変数を更新することになります. つまり, 温度場が空間と時間で変化するように, 状態変数も変化するのです.

状態変数MaxTの定義.
MaxTフィールドをプロットする際には, これらの状態変数は単位を追跡しておらず, ガウスポイントに格納されているデータは要素全体にわたって外挿および補間されているため, このフィールドはノードポイントに格納され, 補間によってプロットされる温度場とは若干異なることにご注意ください. 下の図で, 結果がどのようになるかを示しています.

シミュレーション全体のタイムスパンで到達されたピーク温度を追跡する状態変数のプロット.
状態変数を使って物理に影響を与える
次に, 状態変数機能を使って, 同じレーザー加熱モデルに影響を与えてみましょう.
例えば, ウェハーの上面に, 表面の放射率に大きな影響を与える薄いコーティングが施されていたとしましょう. しかし, 表面の温度が200℃以上になると, 薄い膜はすぐに蒸発してしまいます.
このレーザー加熱モデルでは, すでにemissivityというグローバルパラメーターが定義されています. 放射率は0.8という一定の値で, モデル内では吸収熱と放射熱の両方を定義するために使用されます. この定数の全体的な定義を削除し, 代わりに, 上面に同じ名前の状態変数を定義し, 初期値を0.8とし, 更新式を以下のようにします.
if(T>200[degC],0.2,emissivity)
このif文は, ウェーハの表面上で定義され, 熱流束と表面‐外気輻射機能で使用される状態変数emissivityを永続的に変更するトリガーとなります. 各ステップの前に, この変数を更新する必要があります.
ヒステリシスモデルの実装
最後に, より複雑なヒステリシスの例を見てみましょう.
ここでは, 温度場を解析することにします. このトピックは, 以前のブログ記事ヒステリシスを持つ相変化材料の熱モデリングでもご紹介しました. そこでは, 熱ヒステリシスをモデル化するために, 比熱の温度依存性を, 材料が固体から液体に変化するか, 液体から固体に変化するかに応じて, 2つの異なる関数を使用することをご説明しました. 材料が完全に液体になったときに, または完全に固体になったときに, 材料特性を定義するために使用する関数を切り替えます.

このようなモデルを実装するためには, 下流側と上流側のどちらの枝に従うべきかを決定するためのスイッチング状態変数を導入する必要があります. この切り替えは, 温度が2つのマークされた遷移温度以上になったか, または以下になったかに基づいて行うことができます. そこで, SorLという状態変数を導入し, 初期値を 1(材料が最初は固体であると仮定), 次の更新式を設定します.
if((T>T_top),0,if(T<T_bot,1,SorL))
このネストされたif文は, 温度が上限のしきい値よりも上昇した場合にSorLの値を0に切り替え, 温度が下限のしきい値よりも下がった場合にのみ1に戻します. 材料特性は, SorLの状態変数に応じて条件付けすることができます. 例えば, このケースでは, 熱容量をif文で次のように定義することができます.
if(SorL,SolidtoLiquid(T),LiquidToSolid(T))
ここで, SolidtoLiquid(T)と LiquidToSolid(T)は, 2つの異なる分岐に関連する2つの異なる温度の関数です.
最後に
この状態変数機能を使うことで, 私たちが行っているモデリング作業がより便利で使いやすくなります. ぜひ, この機能を使って, 他のアプリケーションを作成してみることをお勧めします. モデリングを楽しんでください!
ご自分で試す
下のボタンをクリックすると, このブログ記事でご紹介した2つのサンプルをダウンロードできます.

コメント (0)