時間ステップを大きく保つためのモデリングの基本
始めに
時間ステップが大きければ、同じ現象時間を計算するのに必要な繰り返し回数が少なくて済むので、モデルの作りの段階で、なるべく小さくならないように工夫しておくことが大事です。
マススケーリング法というテクニックで無理やり大きくすることもできますが、本記事ではテクニックに頼らない素のモデルでの改善点をお伝えします。もちろん巣のモデルの dt が大きい方が、マススケーリングを使ったときに、同じ dt でも質量増加を小さくできたり、同じ質量増加でも dt を大きくできるので、重要な部分です。マススケーリングについては定期とレーニングの 1.10.2, 1.10.3 節で説明しています。
https://learn.altair.com/course/view.php?id=279 (要ログイン)
本記事では、3個の基本を説明します。
1, 小さい要素を避ける
次のシェルモデルを例として、dt がどのように決まるのかを説明します。なお、詳細は公開されてない部分や、ややこしくなりすぎる部分もあるため、大雑把な概念を伝えるにとどめます。
まず Radioss はすべての要素に対して、それぞれの要素の上限の時間ステップ dt_elem を計算します。この式は厳密には要素タイプなどにより変わりますが、大まかにはこの概念ですので、おおよその目安にはなります。
ここで lmin: 最小要素長, c: 音速
ここで E: ヤング率, ρ: 密度
情報つまり応力波つまり音波は音速で伝わるので、1サイクルの間に要素辺の一番短いところを情報が通過してしまわない、というのが上限となり、これを超えると不安定になります。
たった一つでも不安定な要素があると全体が不安定になるので、すべての dt_elem の最小値をモデルの dt として採用します。
では、先ほどの図のモデルの時間ステップを確認してみます。このモデルは要素長 1, E=1, ρ=1 (特に単位系は指定していない) で、すべてきれいな正方形ですので、すべての要素がおおよそ dt=1 となるはずです。スターターを回してログを見ると、小さい順に並ぶのですが、大体 1 になっているのが分かります。
ちなみにエンジン実行時は、ここからさらに安定性と精度のために係数 (デフォルトで 0.9) が掛かるので、実際の計算はこれよりも小さくなります。
(ダウンロード: 1_regular_mesh.7z)
では次はこのモデルです。見た目変わっていないようです。また E=1, ρ=1 のままです。
スターターに掛けてみると、なにやら 1/10 くらいの要素が出てきてしまいました。小さい順にならんでいるので、この値がモデルの dt として採用されてしまいます。
実は左角を良く見てみると、非常に小さなメッシュとなっていました。たったこれだけのことで dt が 1/10 になり、計算時間が 10倍に伸びることになるわけです。
(ダウンロード: 1_0.1length_mixed.7z
モデルを作ったら HyperWorks でのメッシュ品質チェック、スターターでの時間ステップの確認、こちらは心掛けた方が良さそうです。
2, つぶれすぎる前に消す
時間ステップの計算はスターター時点だけではなくて、エンジン中の全てのサイクルで行われています。この式ですから、当然、要素がつぶれて lmin が小さくなると dt も小さくなっていきます。
この節は、このモデルで検証してみます。初期要素長 1, E=1, ρ=1 としています。#1 の時と同じですが、スターター計算で dt=0.9 くらいです。
計算中の dt の推移を見てみましょう。なお、係数を 0.1 としているので dt=0.09 から始まっています。そしてサイクル数は 25814 回となっています。
(モデルのダウンロード: 2_90percent-crash.7z )
それでは、次のようにつぶれきる前に要素を消してみます。1要素モデルで要素を消すと、消えた瞬間に解析完了扱い(dt の極大化)になってしまうため、要素を一つは残しておくために、上に何もしない要素を配置してあります。
消すのは、弾塑性材料 /MAT/LAW2 の EPS_p_max (塑性ひずみ基準値) を使っています。
では dt の推移を確認しましょう。このように、削除のあと、dt が回復します。これによりサイクル数も 12521回と半分くらいの回数になっています。
(モデルダウンロード: 2_delete-to-keep-dt.7z )
(ちなみに、しっかり潰れるという現象を正直にしっかり解きたいというのであれば、消さずに頑張って計算するしかありません。)
3, 固すぎて軽すぎるバネを使わない
OptiStruct など陰解法の静解析や周波数応答解析などの経験のある方が使うモデリングテクニックとして、自由度従属性の扱いが面倒な剛体を使わずに、軽くて固いバネを使う、というものがあると思います。しかし、これは陽解法 Radioss では結構な罠となっています。
#1 節ではシェル要素 (ソリッド要素でも概念は変わりませんが) の dt の計算方法を説明しましたが、長さという次元が無い (見た目は関係ないです) バネの場合は、次の式です。
ここで M: バネの質量, K: バネ定数
本節では次のモデルで検証をしていきます。何かと現実味のある数値の方がイメージ付きやすいため、本節は Mg, mm, s のちゃんとした単位を持った物性を使います。
では、なるべく重量に影響を与えずに剛なバネにしようと M=1e-10 ton, K=1e10 N/mm としてみたらどうなるでしょう。
するとシェル要素よりも 4桁も小さい dt となってしまいます。通常、シミュレーションの主役はばね要素ではなく、シェルやソリッドですので、これは実にもったいないことと言えます。
ダウンロード: 3_K1e10_M1e-10.7z
ではより現実的に M=1e-5 ton , K=1e5 N/mm としてみます。質量は 10g ですからボルトか何かくらいの重さですし、ばね定数は、1トンの重りをぶら下げてようやく 0.1mm 伸びる程度なので、十分に剛だと思います。こうすれば
バネの dt がシェル要素よりも 1桁大きくなります。主役のシェルやソリッドよりも 1, 2桁大きくしておくのが目安かと思います。
ダウンロード: 3_M1e-5_K1e5.7z
しかしすべてのばね要素に対して、M と K を決めなくてはならないのは、面倒かもしれません。その場合 /PROP/KJOINT2 バネ特性を使うことで、M は接続している要素からもらい、K はモデルの dt ぎりぎりとなる大きな値を自動で決めることができます。
私も 2個例題を投稿していますので、参考にしてください。
https://community.altair.com/community?id=kb_article_view&sysparm_article=KB0119895
https://community.altair.com/community?id=kb_article_view&sysparm_article=KB0120686
例として、このように設定しています。Type=8 は全自由度を固定するタイプです。ぎりぎりまで大きいバネ定数は少し私は不安なので、ScF=0.1 で一桁下げています。
また、KJOINT2 はエンジンを /DT/NODA (/CST ももちろん可能) を指定して事項することで初めて剛性が決まります。
ダウンロード: 3_kjoint2.7z
まとめ
素のモデルの dt を大きく保つには
- 極端に小さい要素を省く
- つぶれきる前に消す
- 軽すぎて強すぎるバネは使わない
アルテアジャパン公式製品ページ
https://www.altairjp.co.jp/radioss/