問題タブ [dymola]
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 での空間偏微分方程式のシミュレーション - 特定の時間における変数値へのアクセス
この質問は、正しい解決策が得られなかった私の以前の質問に多少関連しています。リンク:以前の SO スレッド
私は、1 つの空間次元 (たとえば、熱方程式 - 以下のリンクを参照) を持つ時変である偏微分方程式を解いています。私は線の数値法を使用しています。つまり、空間導関数を離散化して、Modelica で (Dymola ツールを使用して) 容易に解ける ODE のシステムを生成します。正確には、システムをシミュレートするとき、または結果をプロットするときに問題が発生します。方程式自体は正しく解かれているように見えますが、各離散状態の個別の時変挙動ではなく、特定の時点での離散化されたすべての状態変数の空間変化を表現したいと考えています。
私の問題に至るまでの戦略は、このYoutube チュートリアルに示されていますが、これは私が作成したものではありません。チュートリアルの最後でわかるように、ロッドのすべての離散点について、温度の時間変化の挙動が個別にプロットされます。私が望むのは、特定の時間におけるロッドの温度、つまり空間座標の関数としての温度を示すプロットです。私が苦労しているこれを達成するための私の戦略は次のとおりです。 N エントリの状態ベクトルが与えられた場合:
plotArray
..以下に示すように、Dymola 関数を使用します。
直観的には、これにより、温度を空間座標の関数として示すプロット、または正確には離散単位の行の数が得られます。このコマンドは結果を生成しますが、プロットではすべての T 値が 0 に見えますが、これはまったく当てはまりません。私の質問は次のとおりです。特定の時間にすべての離散点で温度を取得してプロットするにはどうすればよいですか? よろしくお願いします。
問題のコードは次のとおりです。
追加の編集: シミュレーションは、たとえば T[3]、つまり個別のセグメント番号の温度であることを明確に示しています。3、30 度から開始し、70 度で終了します。ただし、コマンド ウィンドウに T[3] と書き込むと、T3 = 0.0 が返されます。何故ですか?plotArray
0.0 だけでなく、特定の時間に実際の変数値を抽出できれば、関数が機能するため、これが問題の核心です。
推奨される解決策:これは、私が望むものを達成するためのかなり面倒な解決策です。誰かがより良い解決策を知っていることを願っています。Dymola でシミュレーションを実行すると、ソフトウェアは、シミュレーション中の変数の値を含む .mat ファイルを生成します。このファイルを MATLAB にロードし、選択した変数をプロット用に手動で抽出できます。上記の問題に対して、次のコマンドを書きました。
このコマンドは、個別のセグメント/要素のそれぞれの数に対して温度をプロットします (温度は導関数と共に .mat ファイルの data_2 配列に保存されるため)。これを Dymola 内で行うことを本当に望んでいました。つまり、MATLAB を使用しないようにすることです。この特定の問題では、この問題が単純であるため、変数の量は少なかったのですが、先ほど行ったように手動でナビゲートするのが非常に困難な .mat ファイルを簡単にイメージできます。
modelica - 方程式セクションの if ケースの操作
Modelicaで次のことがどのように可能か疑問に思っていました:
Modelica は if ステートメントのどのケースが true かをどのように判断できますか? if ステートメントで決定される "b" の値がなければ、"a" の値を計算することはできません。
dymola - co-simulation dymola fmu ファイルは fmuchecker でシミュレートできません
Dymola の協調シミュレーション オプションをテストしようとしており、fmu ファイルを作成しました。www.fmi-standard.org から FMILibrary-2.0b2 と FMUChecker-2.0b1 をインストール/ビルドしました。
同僚が Dymola で作成した fmu ファイルの FMUChecker (fmuCheck.linux32) を実行しようとしたときに問題が発生しました。Dymola ライセンスを使用して、同じ Dymola モデルから fmu ファイルを作成しましたが、この問題は再現できません。fmuCheck.linux32 はエラー メッセージなしで正常に実行されるためです。私の同僚は両方のファイルを問題なく実行できます。
このオプションを協調シミュレーションに使用することが私たちの目標であるため、Dymola を使用せずに PC で fmu ファイルを実行しようとしましたが、私の fmu コピーと同僚が作成したファイルの両方で同じエラーが発生しました。
エラーメッセージは次のとおりです
fmu ファイルをシミュレートするのに Dymola ライセンスは必要ないと思うので、このシミュレーションが失敗した理由がわかりません。この奇妙な行動の理由は何でしょうか?
部分的にこれは、この問題のエラー メッセージと同じです 。 Simulink での Dymola FMU の初期化
どんな提案でも大歓迎です。ありがとうございました。
modelica - Dymolaでi++を書くための理論的な方法は何ですか? 連続モデルと離散モデルのハイブリッドはありますか?
私はモデリカを学び始めたばかりで、(初心者の)質問が 1 つあります。私にとっての問題は、従来のプログラミングの考え方からモデル的な考え方に考え方を変えることです。
簡単なプログラムを作りたい。5 分の分解能で PV 出力値を含む入力配列があります。熱負荷値を 60 分の解像度で入力した配列があります。過剰なエネルギーを蓄えたり、リアルタイムで熱需要を満たすためにエネルギーを消費したりするエネルギー貯蔵庫があります。
私はopenmodelicaでこれを書きました:
しかし、dymola に c/p すると、この " p=Storage+ pre(p); " の部分でエラーが発生します。これは、 pre() を連続モデルに使用できないと表示されているためです。pre() を削除すると、0 で割り切れないと表示されます。
私が間違っていることを説明してもらえますか?
ありがとう!