2016-03-29 7 views
3

getestet mit:Modelica Standard Library Komponente AbruptAdaptor

MSL Versions:

  • 3.2.1, 2013.8.14, build 2 (2013.08.14 08: 44: 41Z)
  • 3.2.1 2013.08.14, bauen 4 (2015.09.30 09: 15: 00Z)

Hier ist eine Ausführung mit 4 Komponenten:

  1. Massenstromquelle (M_bound)
  2. AbruptAdapter (abruptAdapter)
  3. Dynamische Pipe (pipeSmall)
  4. Druckquelle (P_bound)

Zwei Anschluss Fälle des Modells sind auch in der equation Abschnitt enthalten :

Fall # 1: M_bound -> abruptAdaptor -> pipeSmall -> P_bound

Fall # 2: M_bound -> pipeSmall -> abrupterAdapter -> P_bound

Zusammenfassung: Fall # 1 simuliert gut, aber Fall # 2 schlägt fehl. Der Fehler erzeugt wird unten dargestellt:

The following error was detected at time: 0 

Model error - division by zero: (data.zeta1)/((if data.zeta1_at_a then rho_a_des*A_a^2 else rho_b_des*A_b^2)) = (0.402964)/(0) 

The stack of functions is: 
Modelica.Fluid.Fittings.BaseClasses.QuadraticTurbulent.pressureLoss_m_flow_totalPressure 
Modelica.Fluid.Fittings.BaseClasses.QuadraticTurbulent.pressureLoss_m_flow_totalPressure(
-pipeBig.port_b.m_flow, 
abruptAdaptor.state_a.d, 
abruptAdaptor.state_b_des.d, 
abruptAdaptor.state_b.d, 
abruptAdaptor.state_a_nondes.d, 
abruptAdaptor.data, 
abruptAdaptor.m_flow_small) 
First evaluation failed for non-linear solver. 

Frage: Warum Case # 2 fehlschlagen und Empfehlungen, wie man es beheben? Jede Einsicht wäre großartig. Es kann sogar ein Fehler in der AbruptAdaptor Komponente sein.

Model Code

model AbruptAdaptor_1Pipe 

    replaceable package Medium = Modelica.Media.Water.StandardWater; 

    inner Modelica.Fluid.System system; 

    Modelica.Fluid.Sources.Boundary_pT P_bound(
    redeclare package Medium = Medium, 
    nPorts=1, 
    p=system.p_ambient, 
    T=M_bound.T); 

    Modelica.Fluid.Sources.MassFlowSource_T M_bound(
    redeclare package Medium = Medium, 
    m_flow=1, 
    T=300, 
    nPorts=1); 

    Modelica.Fluid.Fittings.AbruptAdaptor abruptAdaptor(
    redeclare package Medium = Medium, 
    diameter_a=1, 
    diameter_b=0.5, 
    m_flow_nominal=M_bound.m_flow, 
    m_flow_start=M_bound.m_flow); 

    Modelica.Fluid.Pipes.DynamicPipe pipeSmall(
    redeclare package Medium = Medium, 
    T_start=M_bound.T, 
    m_flow_start=M_bound.m_flow, 
    length=1, 
    diameter=0.5, 
    modelStructure=Modelica.Fluid.Types.ModelStructure.av_b); // switch to av_vb with case #2 

equation 

    // Case #1 
    connect(M_bound.ports[1],abruptAdaptor.port_a); 
    connect(abruptAdaptor.port_b,pipeSmall.port_a); 
    connect(pipeSmall.port_b,P_bound.ports[1]); 

    // Case #2 
    //connect(M_bound.ports[1],pipeSmall.port_b); 
    //connect(abruptAdaptor.port_b,pipeSmall.port_a); 
    //connect(abruptAdaptor.port_a,P_bound.ports[1]); 

    annotation (uses(Modelica(version="3.2.1"))); 
end AbruptAdaptor_1Pipe; 
+0

Zwei Kommentare: Sie verwenden eine alte MSL (Build 2), der aktuelle Build 4 ist näher an der Sprachspezifikation. Zweiter Kommentar: Die DynamicPipe verwendet ein gestaffeltes Raster mit wechselnden Volumen und Flusselementen. Versuchen Sie, die 'modelStructure' auf der Registerkarte 'Advanced' zu ändern, das Gleichungssystem könnte leichter zu lösen sein. Aber Ihr Fehler kann genauso gut völlig unabhängig sein ... – matth

+0

Im Fall # 2 ist die Richtung des Massendurchflusses durch die Komponenten umgekehrt. Ist das absichtlich oder wollten Sie eigentlich die Reihenfolge von Rohr/Adapter wechseln? –

+0

Mit Dymola werden Sie wahrscheinlich nicht zu viel Unterschied zwischen Build 2 und 4 sehen. Die Strenger/Näher an der Sprachspezifikation hilft hauptsächlich anderen Tools wie OpenModelica und JModelica (Sie haben diese Tags auch hinzugefügt). Dennoch sollten Sie eine Aktualisierung auf Dymola 2016 FD01 in Betracht ziehen, die derzeit die neueste Version ist. – matth

Antwort

1

Ihr gestaffeltes Gitter ist in Ordnung, Sie setzen Volumen, wo Sie hatte. Mach dir keine Sorgen, es ist nicht deine Schuld, ist ein Debug, ich habe versucht, es mehrmals zu verwenden, und es schlägt immer auf eine der Arten (Ich weiß nicht die Position Ihres Adapters, aber es ist nicht wirklich Angelegenheit). Sie können immer Blenden verwenden, an denen Sie die Beziehungen dp (Areas_rate) definieren, wobei in beiden Fällen Umkehrflüsse vermieden werden, also zwei Volumina vor und nach den Öffnungen verbinden (wie zwei Ventile parallel). Das sollte funktionieren.

+0

Danke für die unabhängige Überprüfung meiner Beobachtungen. Ich werde das als Antwort akzeptieren. –

Verwandte Themen