バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/
はじめに
前回、Modelicaコードにparameterキーワードを使って変数を追加してみた。
ソースコード上のパラメータ編集が楽になるなどの効能は当然あるが、
グラフィックエディタ上で即値を入れる労力と比較しても、ほぼ旨味はない。
実はモデルの編集時に楽できるというよりもシミュレーション時に・・・。
登場人物
博識フクロウのフクさん
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
Modelicaのソースコードに変数を設置した際のどこで効能を得られるのか?
前回こんな感じでModelicaコードを修正したわけだけど。
diff U3B masstest.mo masstest2.mo
--- masstest.mo
+++ masstest2.mo
@@ -1,9 +1,11 @@
-model masstest
+model masstest2
+ parameter Real Force1 = -1;
+ parameter Real Force2 = 2;
Modelica.Mechanics.Translational.Components.Mass mass(L = 0.1, m = 1, s(fixed = true, start = 0), v(fixed = true, start = 0)) annotation(
Placement(visible = true, transformation(extent = {{-20, -10}, {0, 10}}, rotation = 0)));
- Modelica.Mechanics.Translational.Sources.ConstantForce constantForce2(f_constant = 2) annotation(
+ Modelica.Mechanics.Translational.Sources.ConstantForce constantForce2(f_constant = Force2) annotation(
Placement(visible = true, transformation(origin = {32, 0}, extent = {{10, -10}, {-10, 10}}, rotation = 0)));
- Modelica.Mechanics.Translational.Sources.ConstantForce constantForce1(f_constant = -1) annotation(
+ Modelica.Mechanics.Translational.Sources.ConstantForce constantForce1(f_constant = Force1) annotation(
Placement(visible = true, transformation(origin = {-48, 0}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
equation
connect(constantForce1.flange, mass.flange_a) annotation(
@@ -12,4 +14,4 @@
Line(points = {{22, 0}, {0, 0}}, color = {0, 127, 0}));
annotation(
uses(Modelica(version = "3.2.3")));
-end masstest;
+end masstest2;
結局何が良くなるのかがさっぱりわからないんだけど。
まぁモデル修正に対しての効能じゃなくてシミュレーション時の効能だな。
シミュレーション時?
OpenModelicaのシミュレ―ションについて
OpenModelicaでシミュレーションする場合、
ModelicaからC言語のソースコードを生成してコンパイルしていたのを覚えてる?
あー確かにそういうのがあったねー。
ここでやったと思う。
これってシミュレーションするたびに実施されちゃうだよね。
え?そうなの?
まぁそこまで待たされることも無いから別にいいけど・・・。
現状の待ち時間がそれほど長くないのはモデル規模が最小レベルだからだね。
規模が増えてくるとモデル構成チェック、Cコード生成、コンパイルで2,3分待たされるってこともある。
とんでもなく大きくなれば当然10分、20分もあり得るだろう。
え゛
そんなに待つのはちょっと・・・。
本当にモデルを修正するなら良いけど、
パラメータの微調整だけでも毎回待たされる。
parameterキーワードを使った場合の効能
ここで前回のparameterキーワードで作成した変数。
この変数はコンパイル後にも修正ができて、
コンパイルせずに再度シミュレーションができる。
え?そうなの?
よって、変数をちょっと変更して再度シミュレーションを繰り返すって作業が入る場合、積極的にparameterキーワードで変数を設置していった方がお得。
ってことになる。
なるほど。
それだったら変にコンパイル待ちとかしなくても良いから
試行回数が一気に増やせるのか。
そういうこと。
次回は実際に動かしてみよう。
まとめ
まとめだよ。
- 「Modelicaのソースコードに変数を設置」の効能はモデル編集ではなくシミュ―ション時。
- シミュレーションをするためには毎回モデル検査、Cコード生成、コンパイルが入る。
- 規模が大きくなれと結構待たされる。
- parameterキーワードで宣言した変数はコンパイル後にも修正可。
- コンパイルせずに再シミュレーション可能。
バックナンバーはこちら。
コメント