こんにちは(@t_kun_kamakiri)(‘◇’)ゞ
最近、モデリカのためのオープンソースであるOpenModelicaとか使って遊んでいます。
本記事の本筋は以下の内容です。
さらにOpenModelicaって何だろうか?というのも話したいと思います。
はじめてのModelicaプログラミング -1日で読める わかる Modelica入門- (MBD Lab Series)
Modelicaによるシステムシミュレーション入門 MBD Lab Series
OpenModelicaってなんだろう?
OpenModelicaはGUI 上でコンポーネントを組み合わせてシステムを表現することができます。
システムをプロセスごとに分解することで、設計の機能を知るための、
- モデルベース設計(MBD)
- 1Dシミュレーション(1D CAE)
の実行、結果の表示がOpenModelicaできるということです。
↓モデルサンプルはこんな感じです(^^)/
以下、※出展:Modelica – Wikiより
Modelicaは、オブジェクト指向のマルチドメイン・モデリング言語です。
他分野に跨る複雑なシステムのモデリング(例えば、機械、電気、電子、油圧、熱、制御、電力、プロセス指向のサブコンポーネントを含むシステム)に最適で、特に物理現象を表現するモデルの構築で使われています。オープンソースである為、特定のツールに依存することなく資産の共有また開発が出来ます。言語仕様やメンテナンスは非営利国際組織のModelica協会によって行われており、標準ライブラリとしてフリーに公開しています。
急にどうしてOpenModelicaと使おうと思ったのか?
昨今、
- CAE解析を使った効率化・精度アップ・・・
- AIブームによる「CAEで機械学習を使った最適化」・・・
みたいな話題もチラホラありますね(‘ω’)
- 機械学習を使った最適化問題
- 並列化しまくって何憶もの要素数にメッシュを切ってPCのパワーで解く
などなど・・・
PCのスペックをフル活用してCAE解析を行っているというのも多くなってきているように感じます。
しかし、PCのパワーを使ってCAE解析をやると実現象を再現できて、効率よく設計ができるという錯覚に陥っている設計者も多いのではないでしょうか・・・・・
そう思う今日この頃(‘ω’)
それは完全に誤った考え方です。
CAEはあくまで設計のサポートであって、実験の代替えではないからです。
CAE(英:Computer Aided Engineering)はコンピューターによる技術・設計支援サポートの意味であり、本来の目的は設計のサポートです。
それが、なぜか実験を再現する素晴らしいツールという認識されがちです・・・
仕方がないことですが、上記のような「CAEは実機の代替え」という考え方がどれだけ愚かな事かというのは、以下の流れを見ればわかります。
実現象からCAEでモデルを作って再現するためのフローは以下のようになっています。
↑これを見るとCAEはツールであることがよくわかると思います。
CAE解析で実現象をモデル化するまでに、いくつもの”仮定や近似”を含んでいます。
そういった状態で「要素数だけを意識する」というのは良くないということになります。
※すべてが良くないとは言えません。「この数理モデルを解くには最低限これくらいの要素数が必要」という認識のもとであればPCでゴリゴリ解くのも良いかなと思います。
並列化しまくって何憶もの要素数にメッシュを切ってPCのパワーで解く
↑この考え方は、詳細に・詳細に・詳細に・・・実現象を再現する方向性で、詳細になればなるほど、理論は複雑になってしまい、
と、仮になった場合でも、詳細すぎて「何が何とつながっていて、どう影響し合っているのか」が不明確になります。
そんな中、
むしろ、少ない情報・簡易モデルで多くの情報をサクッと得る方がむしろ賢いやり方である場合もあります。
それがシステムをプロセスごとに分解して機能を考えるのに注力を注いだ1D CAEです。
そして、1D CAEなら今回使ってみよう考えているOpenModelicaなら可能なのではないかなと思い、使い始めました(^^)/
お金はないのでオープンソースのOpenModelicaなら商用顔負けの実力を発揮してくれると期待しています。
システムをプロセスに分解して数式ベースでつなげよう
前章では、「上流段階から適用可能な設計支援の考え方、手法、ツールとして1DCAEが提案されています」というお話をしました。
ここで言う、1Dは特に一次元の数式モデルを対象にしているという意味だけではなく、物事の本質を的確に捉え、見通しの良い形式でシステムをプロセスでシンプルに表現することを意味します。
つまりは、システムをプロセスごとに数式ベースでつなげていくという考え方です(^^)/
例えば、超簡単な例として「バネが振動するモデル」を考えることにします。
1次元バネモデル
1次元のバネモデルは\(m\ddot{x}=-k(x-x_{0})\)ですが、各パーツごとに何が変数の引き渡しになっているのかを意識すると、以下のプロセスでつながっていることが理解できることでしょう。
- \(f=-k(x-x_{0})\):変位\(x-x_{0}\)から荷重\(f\)を生成
- \(ma=f\):荷重\(f\)から加速度\(a\)を生成
- \(\frac{d^2 x}{dt^2}=a\):加速度\(a\)が位置\(x\)を生成
バネモデル自体はとても単純なモデルなのですが、このように無理やりシステムとしてプロセス分解して考えることもできます。
これがもっと大きなシステムになったときもこのように各部分ごとに「何がインプットされて何がアウトプットされているのか」、「何の変数を次のプロセスに引き渡しているのか」を考えることができます。
1D CAEは機能を考えるもの
例えば、設計の初期の段階(開発の初期の段階)は、形が無い状態からスタートすることになるため、「何がしたいのか?」「それは可能なのか?」ということだけを意識することもあるでしょう。
この「何がしたいのか?」という問いかけが、「モノの機能」を考えることになります。
※注意
「機能=どうしたいのか?」を考えがちですが、間違った考え方になります。
つい「機能=どうしたいのか?」と考えがちですが、「どうしたいのか?」の果ては・・・・結局「っで?何がしたかったっけ?」です。
目的と手段は明確に分けて考えるべきですね。