シミュレーションを高速化したい!
・・・という声をよく聞きます。
そこで「高速化」について、具体的に考えてみようと思います!
まず、「何を速くしたい」んでしょうか?
「シミュレーションに決まってるよ!」
そこで、考えてみましょう。
一言で「シミュレーション」と言っても、いろんな「作業」がありますね。
「いや、シミュレーションって計算だから」
いやいや、計算を行う前にはいろんな「作業」がありますよね。
例えば、
・入力する数値を決める作業
・数値の入力作業
・流体解析のように、3Dデータが必要なら、形状データの作成
・形状データを作成する前に、どういう形状にするかの検討
・3D形状をメッシュにする作業
・形状を分割する作業
・久しぶりに使うので、使い方を思い出す作業
・わからない機能を探す作業
などなど。
こういう「計算前の作業」がすんで、やっとシミュレーション計算できるわけです。ぽちっ。
・・・シミュレーション計算って、夜間でも人がいないときでも、計算進むんですよね。計算に10時間かかるようなものでも、帰る時に「ぽちっ」とすれば、次の日に出勤するときには計算終了。ケーススタディで複数ケースを計算する場合でも、そのように設定してしまえばOK!
そして計算がすんで、結果を確認します。確認方法にはいろいろあって、
・数値で確認
・グラフで確認
・コンター図など、可視化して確認
・数値をエクスポートしてExcelなどで整理して確認
このように、シミュレーションの手順を仕訳してみると
・条件の検討
・入力作業
・計算
・計算後の確認
また、「高速化したい」という意味の中には「入力作業、設定作業が時間がかかって辛い!労力がかかりすぎる!残業が多すぎる!」という意味が多く含まれていると思います。
つまり、人力のかかる作業を楽にしたい、人が作業する時間を短くしたい、ということが多いと思います。
そこで、どういう作業が軽減されたら楽になるでしょうか?
「計算」ではないですよね・・・
「条件の検討」、これはあまり省略すべきじゃないですよね。「段取り八分」ですし!
そもそも、往々にして入力作業が大変で時間がかかりがちなので、あまり入力作業が増えるのは・・・
ということは、やっぱり「入力作業の軽減」や「段取りをうまくやる」というのが「高速化」のネックなのでは?ということになります。
いやいや、やっぱり「計算の高速化」だよ、という意見もあると思います。
10時間かかる計算が1時間で終わったら・・・という高速化については、単純に、能力10倍のマシンを使ったらいいんですよね。HPCとかクラウドで。
ただし、ソフトによってはコア数を増やしても頭打ちになるケースがあるので、「課金して能力10倍にしたのに速くならないじゃん!」という残念な結果になることがあるので、そこはソフトをよく調べてください。
また、勤務サイクルを考えてみると、わざわざお金をかけて計算を高速化する意味があんまりなかった・・・ということもあり得ます。
「GPUで高速化できるじゃん」という意見もありますが、それはソフトがGPUに対応している場合に限ります。グラボを差しただけでは高速化できませんのでご注意を・・・
ということで、「シミュレーションの高速化」、つまり「シミュレーション作業工程全体の時短、省力化、労力軽減」のためには、「入力作業の軽減」がネックになるのではないでしょうか。
その「軽減」のために考えられる施策としては
・入力、設定が楽なソフトを選ぶ
・入力パターンを決める
・入力作業の手順書を作る
・形状の汎用化
・入力作業が自動化できるようにする
・入力作業する人を決める
などがあると思います。
ちなみに、自分で行った「高速化」の方法とは
入力、設定段階では
・入力、設定作業の楽なソフトの使用(FLOEFD)
・設定作業の自動化(RFlow、Star-CCM+)
・入力パターンを決める(RFlow、Star-CCM+)
・形状の共通利用(RFlow、Star-CCM+、Flowsquare+)
計算段階では
・要望計算時間にあうようにメッシュや形状を調整する(Star-CCM+)
・特に結果に関係ない箇所の簡略化(RFlow、Star-CCM+、Flowsquare+)
・複数計算の連続実施の自動化(RFlow、Star-CCM+)
・そもそも計算が速くできるソフトを使う(FLOEFD)
結果処理では
・結果画像処理の自動化(RFlow、Star-CCM+)
・結果数値データの処理高速化(RFlow)
などがありました。
さて、みなさんの「高速化」はどこから?