2016-04-11 13 views
4

私はDymola(モデルベースの市販ソフトウェア)でシステムモデルを実行しています。モデルは、強制対流下での多孔質物質からの熱および物質移動に関するモデルである。この質問をする私の問題は、モデルのシミュレーション中に発生したエラーに関するものです。Modelica Modelロバストネスの問題:ODE-Jacobianのモデル評価に失敗しました

モデルの現在の設定は、特定のシミュレーション時間(7200秒)で正常に実行されます。しかし、それは(実行時間全体で断続的に)ログファイルに次のプロンプトを生成します。

ERROR: Failed to solve non-linear system using Newton solver. 
To get more information: Turn on Simulation/Setup/Debug/Nonlinear solver diagnostics/Details 
Solution to systems of equations not found at time = 882.457 
    Nonlinear system of equations number = 4 
    Infinity-norm of residue = 154.849 
    Iteration is not making good progress. 
    Accumulated number of residue calculations: 25279 
    Last values of solution vector: 
drum.T_e = 306.346 
drum.X_e = 0.0413446 
    Last values of residual vector: 
{ -0.000157014, 154.849 } 

私は私の一番の問題は、私はこれを見たとき、私は一般的に私のモデルについて理解しておくべきものですと仮定します。これは、方程式や事象のシステムを定義したやり方で、特定の欠陥を暗示していますか?この問題は、ある範囲にわたっていくつかの重要なパラメータを変更することによって、モデルのロバストネス研究を実行すると明らかになります。モデルはこのエラーのためにパラメータ値のランダムな組み合わせで終了時刻より前に失敗します。エラーメッセージで示唆したように、私がチェック診断ディテールでモデルを実行しなかったし、それは次の手順で、大アマ配列を与える:あなたはそれを見るためにアマを(プロットする方向を与える見ることができるように

Failed to evaluate model for ODE-Jacobian 
Too many slow iterations with no progress 
Line search: DX-norm scaled-residua-norm residual (unscaled) 
Search direction{ -0.000634251, 6.52346E-006 } 
To investigate the properties of the function, you can plot the 
function in the search direction by pasting the following 
commands in the Dymola command window: 
    Amat={<...>}; 
    plotArray(Amat[:,1],Amat[:,2],-1); 
If the graph has discontinuities, local minima above zero, 
and/or knees this explains the problem. 

不連続性および極小値が存在する場合)。繰り返しますが、これらの不規則性が私のモデル(方程式)に加えるべき変化の観点から何を求めているのでしょうか?

答えが不十分である可能性があることはわかっていますが、ランタイム全体で同じ繰り返しエラーが発生する巨大なログがあります。だから誰かがこれについていくつかのアイデアを持っているなら、回答が簡単になるように私のモデルやシミュレーションについて追加する可能性のある細部を提案してください。

答えて

3

エラーメッセージは、ソルバーがモデル内の非線形方程式系の解を見つけることができなかったことを示します。これは、システムに対する解決策がないか、ソルバーがそれを見つけることができないことを意味する可能性があります。解が存在してもソルバーがそれを見つけることができない場合は、開始条件、つまりODEソルバーではなく非線形ソルバーの開始条件が原因である可能性があります。明らかに非線形システムの場合、特に複数の解が存在する場合、解は初期条件に対して非常に敏感である可能性があります。ソルバの公差を小さくする(たとえば、1e-4から1e-6に変更する)ことで、実際にソフトウェアで見つかった数値解が真の解に近づくため、実際に堅牢性が向上することがあります。もう一つの可能​​性は、その時点で解決策がないということです。これは、Dymolaが "Amat"配列で2番目のスニペットで報告しているものです。これらのコマンドを実行すると、次の画像のようにゼロを越えないローカルミニマムがあることがわかります。 "X" のソルバが試みた点を表す

enter image description here

。この場合、ソルバーはxの値を変えてf(x)の値をチェックすることで、方程式0 = f(x)の解を探しようとしています。それはゼロと交差する場所を見つけようとしています。試行したポイント間に交差点が存在する可能性はありますが、しばしば解決策がないことを意味します。

これが発生した場合、問題はどうなるかとなります。システムが解決策が存在しない点に近づいているため、この領域を守ることができるかもしれません(負の数のゼロまたは平方根による除算を防ぐかもしれません)。明らかにこれはあなたの特定の状況に依存します。しかし、最良の選択肢は、非線形システムを完全に避けることです。これもあなたのモデルや状況によって異なります。モデルを作成するために使用されるライブラリに応じて、フラットなModelicaコードファイルを生成することによってシステム構造を調べることができます(。mof)をシミュレーション設定の[翻訳]タブから選択します。生成された非線形システムを調べることができます。非線形システムをすべて一緒に避けるためにモデルを再構成する方法の手がかりを与えるかもしれません。

もう1つの方法は、シミュレーションセットアップの[デバッグ]タブから非線形システムソリューションのデバッグ情報を有効にすることです。ここでは、ソルバーによって見つけられた解(たとえば、見つかった解および各ステップの残存値)について詳しく知ることができます。私はそれが解決策が見つからないのであなたのケースで上記のグラフより多くの情報を与えるかどうかは分かりませんが、他のケースでは有用かもしれません。

+0

こんにちは、ありがとうございました。モデルの.mofを生成し、非線形性が存在するかどうかをチェックします(そして、なぜそれが原因で障害が発生する可能性があるかを示す場合)。私はこの種の視点を探していました。質問に答えました。 (私はそれが今のところ開いたままにしておきます、もし私が数日の間にそれ以上の答え/ヒントを得なければ、私はこの答えを受け入れます)。 – user1768201

+0

こんにちは、私は一貫して動作するモデルの変化を発見しました。フラットなモデルのコード* .mofは問題を抱えていた方程式の非線形システムに私を導いた。 (それには5つのシステムがあり、うち1つに問題があった)。さまざまな変更を行った後、グラディエント変数の1つが与えられた初期化で負になることがわかりました。解決策は、既存のコンポーネントモデルを単純なフローコンポーネントからボリュームコンポーネントに変換することでした。 – user1768201

関連する問題