エンジンでのトラブルシューティング方法

altair_fukuoka
altair_fukuoka
Altair Employee

はじめに

本記事では、エンジン _0001.rad 実行時にエラーで最後まで流せなかったときの、原因究明方法を説明します。これは私のやり方であり、これが最善とか、必ず原因を見つけられるという類のものではないので、あくまで参考として、皆さま自身のやり方を模索してください。

 

手法

A, 倍精度版で実行する(必須、前提)

精度と安定性は密な関係があり、倍精度版の方が安定性が高くなります。これだけで流れきってしまうことも少なくありません。

「倍精度版って何?」と思われた方は、普段から倍精度版で動かしてますので、スキップして構いません。

 

B, 時間ステップを小さくする、または、マススケーリング時の時間ステップ係数を小さくする

基本的に、要素が持つ上限の時間ステップに対して、余裕があればあるほど、安定性は向上します。

マススケーリング /DT/NODA/CST を使っていない場合、時間ステップを小さくするほど安定性が増します。_0001.rad に次のように記載します。

/DT 0.5   # デフォルトの係数は 0.9 です

 

マススケーリングを使っているときは、係数を下げれば下げるほど、余裕度が増して安定性が向上します。

/DT/NODA/CST # もともとが # 0.9    1e-7 # としたら 0.5    1e-7  # 0.9 がデフォルト値

 

これだけで流れきるようになることも、すくなくありません。

 

C, すべてのパート、プロパティ、材料ごとのエネルギー履歴をチェックする

スターター _0000.rad 側で /TH/PART を使って、すべてのパートに対するエネルギー履歴を出力させます。

/TH/PART

(クリックで拡大)

 

パート出力要求ですが、HyperGraph では、パートだけでなく、材料ごと、要素プロパティ毎にエネルギー履歴を見ることができます。負のエネルギーが見られたり、桁がおかしくなっていれば、そこに何か原因があることが分かります。

 

ちなみに、この設定は普段から常にどのモデルにも入れておくとよいと思います。

 

D, おかしくなる直前、直後を目撃する

基本的に落ちたときには、完全にモデルが壊れているので、それより手前の壊れ始めを目撃する必要があります。

_0001.out を観察して、どのあたりから怪しくなっているのかを探します。

_0001.outでエラー分析

 

見つけたら、怪しくなっている一つ前のところまでそのまま流して、そこから 1サイクルずつ確認をします。

まず _0001.rad の計算終了時間 /RUN を目的の時刻に設定しなおすか、厳密に行うなら _0001.rad 投入後に次の _0001.ctl ファイルを同じフォルダに置きます。

/CYCLE/目的のサイクル /STOP

 

この続きを _0002.rad で行うわけですが、/PRINT, /ANIM/DT, /TFILE で、ログ、アニメーション、履歴プロットを1サイクルごとに出すように書き換えます。

/PRINT/-1  /ANIM/DT 0   1e-30  /TFILE 1e-30 

 

1サイクルで突然状況が一変するようなところがあるかどうか確認します。

 

E, 要素、節点、材料、プロパティだけのモデルにしておいて、順番に解析条件を戻していく

始めに、解析対象物がそこにあるだけのモデルから初めて、流れるたびに順番に解析条件を戻していくやり方です。インクルードファイルを活用するとやりやすいです。

https://community.altair.com/community?id=kb_article_view&sysparm_article=KB0121007

 

例えば落下解析であれば、初速、剛壁、接触、結合、好みによっては重力などの解析条件があります。モデルだけで流れたら、それらを一つ一つ順番に戻していくことで、どこで問題が起きているのかを判定することができます。初速をまだらに与えてしまっていて、おかしくなっている、というようなこともあったりします。原因の条件が見つかった時は _0000.out スターターログになにか警告が出ていないかも確認します。

 

組み合わせ、順番について

A の倍精度は必須ですが、他の項目については、実のところ、正しい順番、組み合わせというのはありません。どうしても勘や経験に頼るところになります。

あくまで私が良くやる順番、組み合わせは次の通りです。あくまでただの参考としてください。

  1.  とりあえず手っ取り早く流れきってほしいところと、特に手間でもないことから A(倍精度)+B(時間ステップ小さく)+C(パートごとのエネルギー履歴) を最初に行います。
  2.  #1 で流れきらなかったら、E (モデルだけの状態に条件を追加していく) を行います。設定におかしなところ、関連する警告が _0000.out にないかどうか確認します。(#1 A+B+C は継続です。)
  3.  #2 で設定上問題が見られないときに、実際に何が起きているのかを目撃するために D を行います。(#1, A+B+C は継続です)