問題タブ [jmodelica]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
modelica - パラメータ化された Modelica ライブラリと、構造パラメータの設定を「遅らせる」可能性 - パート 3
コードを一般ライブラリとアプリケーション コードの 2 つの部分に分割するための適切な方法を見つけることに取り組んでいます。私が使用する例には通常、液体が含まれており、一般ライブラリを液体内のコンポーネントの数に依存しないようにしたいと考えています。アイデアは、アプリケーション コードが使用される液体媒体を設定し、一般的なライブラリから機器をインポートして、これらの機器を実際の媒体に適合させるというものです。
以下の例は、このコードの分割を行う 1 つの方法を示す非常に簡潔な例です。ここでは、部分パッケージ MediumBase でコンポーネント数の値 nc を未定義にします。その後、EquipmentLib が実際のメディアに適合されたときに、値を取得します。これが、構造パラメータの「遅延」設定の意味です。このコードは、JModelica と OpenModelica の両方でうまく機能します。
ただし、同じコード構造の少し大きな例では、いくつかの問題が発生します。
- JModelica で、「定数 nc にはバインド式がありません」という警告が表示されます。
- OpenModelica では、「配列 c[MediumBase.nc] の次元を与える構造パラメーター (または定数) .. nc を評価できませんでした」というエラーが表示されます。配列の次元はコンパイル時に知っている必要があります '
nc はコンパイル時に、EquipmentLib が適用されるレベルで既知であるため、このメッセージは私には意味がありません。この問題は、MediumBase の nc に Medium Base の「ダミー」値 nc=1 を与えることで実際に解決できます。その nc は、コンパイル中に EquipmentLib が適合されたときに提供される値に変更されます。
だから私の質問は:
- 私には、 nc を未定義のままにしてから、コンパイル中に値が設定されていることを確認する方が良いように見えますが、コンパイル中に定数を変更することは疑わしいように見えますが、おそらく (まだ) Modelica では許可されています。IN Modelica 言語仕様の付録 A で、定数の要件は、(のみ) シミュレーション中に定数であることがわかります。つまり、コンパイル中には定数ではありません。付録 E8.2 では、おそらく nc の初期割り当てを行う必要があることがわかりますが、よくわかりません。ただし、これについてのコメントをいただければ幸いです。
- JModelica と OpenModelica のやや大きな例のコンパイラで、それぞれ警告とエラーが発生するのはどうしてでしょうか?
- Modelica の仕様は、ここにあるものについて何と言っていますか?
必要に応じて、より大きな例を提供できますが、ここではより一般的な答えになると思います。