2016-04-11 9 views
4

Ich verwende ein Systemmodell in Dymola (modelica basierte kommerzielle Software). Modell ist über Wärme- und Stoffübertragung von poröser Substanz unter erzwungener Konvektion. Mein Problem für das Stellen dieser Frage ist bezüglich der Fehler, die während der Simulation des Modells erzeugt werden.Modelica Modell Robustheitsproblem: Fehler beim Evaluieren des Modells für ODE-Jacobi

Mit den aktuellen Einstellungen des Modells läuft erfolgreich für eine gegebene Simulationszeit (7200 Sek.). Aber es erzeugt folgende Aufforderungen in Protokolldatei (mit Unterbrechungen während der gesamten Laufzeit):

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 } 

Ich nehme meine vorderste Frage ist, was soll ich über mein Modell im Allgemeinen verstehen, wenn ich das sehen. Bedeutet dies einen besonderen Fehler in der Art und Weise, wie ich das System der Gleichungen oder Ereignisse definiert habe? Dieses Problem wird offensichtlich, wenn ich eine Robustheitsstudie an einem Modell durchführe, indem ich einige Schlüsselparameter über einen Bereich ändere. Das Modell schlägt dann vor der Endzeit aufgrund dieses Fehlers bei zufälligen Kombinationen von Parameterwerten fehl. Wie in Fehlermeldung vorgeschlagen, habe ich das Modell mit Diagnose Detail geprüft laufen und es gibt große Amat Array, mit folgenden Anweisungen:

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. 

Wie Sie es Richtung Amat plotten gibt sehen können (um zu sehen, wenn Diskontinuitäten und lokale Minima vorhanden sind). Wenn ich diese Unregelmäßigkeiten wiederfinde, was sollte sie in Bezug auf Änderungen vorschreiben, die ich an meinem Modell (Gleichungen) vornehmen sollte?

Ich weiß, dass die bereitgestellten Informationen möglicherweise nicht ausreichen, um zu beantworten, aber es gibt riesige Protokoll mit gleichen wiederholten Fehler während der Laufzeit. Also, wenn jemand eine Idee dazu hat, bitte schlagen Sie auch vor, welche relevanten Details ich über mein Modell oder Simulation hinzufügen kann, damit die Beantwortung einfach sein kann.

Antwort

3

Die Fehlermeldung zeigt an, dass der Solver keine Lösung für ein nichtlineares Gleichungssystem in Ihrem Modell finden konnte. Dies kann entweder bedeuten, dass es keine Lösung für das System gibt oder dass der Solver es nicht finden kann. Wenn es eine Lösung gibt, aber der Löser sie nicht finden kann, könnte dies an den Startbedingungen liegen, also an den Startbedingungen für den nichtlinearen Löser, nicht am ODE-Löser. Offensichtlich kann die Lösung für nichtlineare Systeme sehr empfindlich auf die Anfangsbedingungen reagieren, insbesondere wenn mehrere Lösungen existieren. Manchmal werden Sie feststellen, dass durch Verringern der Solver-Toleranz (z. B. Ändern von 1e-4 auf 1e-6) die Robustheit tatsächlich verbessern kann, da die von der Software gefundene numerische Lösung näher an der wahren Lösung bleibt. Die andere Möglichkeit ist, dass es zu diesem Zeitpunkt keine Lösung gibt. Dies berichtet Dymola in Ihrem zweiten Ausschnitt mit dem Array "Amat". Wenn Sie diese Befehle ausführen, stellen Sie möglicherweise fest, dass ein lokales Minimum vorhanden ist, das nicht wie in der folgenden Abbildung Null überschreitet.

enter image description here

Wo die "x" s repräsentieren die Punkte, dass der Solver versucht. In diesem Fall versucht der Löser, eine Lösung für die Gleichung 0 = f (x) zu finden, indem er Werte von x ändert und den Wert von f (x) überprüft. Es versucht Orte zu finden, an denen es Null durchquert. Es ist immer noch möglich, dass eine Kreuzung zwischen den Punkten existiert, die sie versucht hat, aber oft bedeutet das, dass es keine Lösung gibt.

Jetzt wird die Frage, was zu tun ist, wenn es auftritt. Es kann sein, dass sich das System einem Punkt nähert, an dem keine Lösung existiert und Sie sich möglicherweise gegen diese Region schützen können (so wie Sie sich vor einer Division durch Null oder die Quadratwurzel einer negativen Zahl schützen können). Das hängt natürlich von Ihrer speziellen Situation ab. Die beste Option ist jedoch, die nichtlinearen Systeme vollständig zu vermeiden. Dies hängt auch von Ihrem Modell und Ihrer Situation ab. Abhängig von den Bibliotheken, die zum Erstellen Ihres Modells verwendet werden, können Sie die Systemstruktur untersuchen, indem Sie die abgeflachte Modelica-Codedatei (.mof) aus der Registerkarte Übersetzung des Simulations-Setups. Sie können dann die nichtlinearen Systeme untersuchen, die generiert werden und die Ihnen einige Hinweise geben, wie Sie Ihr Modell neu formulieren können, um das nichtlineare System insgesamt zu vermeiden.

Sie können auch weitere Debugging-Informationen für die nichtlineare Systemlösung über die Registerkarte Debug des Simulations-Setups aktivieren. Hier erhalten Sie weitere Informationen zu den vom Solver gefundenen Lösungen (z. B. die gefundene Lösung und die Restwerte für jeden Schritt). Ich bin mir nicht sicher, ob es Ihnen in Ihrem Fall mehr Informationen als die obige Grafik geben wird, da keine Lösung gefunden wird, aber in anderen Fällen kann es nützlich sein.

+0

Hallo, Danke, dass du dir die Zeit genommen hast zu antworten. Ich werde versuchen, .mof für mein Modell zu generieren und zu überprüfen, welche Nichtlinearitäten vorhanden sind (und ob sie einen Hinweis darauf geben, warum es zu Fehlern kommen könnte). Ich habe nach einer solchen Perspektive gesucht, als ich die Frage gestellt habe. (Ich werde es vorerst offen lassen, wenn ich für einige Tage keine Antworten mehr bekomme, werde ich diese Antwort akzeptieren). – user1768201

+0

Hallo, ich fand Änderung im Modell, das konsequent funktioniert. Der flache Modelica-Code * .mof hat mich auf ein nichtlineares System von Gleichungen gelenkt, das Probleme hatte. (Es hat 5 Systeme, von denen System 1 ein Problem hatte). Nach dem Durcharbeiten verschiedener Änderungen habe ich festgestellt, dass eine der Gradientenvariablen bei gegebener Initialisierung negativ wird. Die Lösung bestand darin, das vorhandene Komponentenmodell von einer einfachen Flusskomponente in eine Volumenkomponente zu konvertieren. – user1768201