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:
- Massenstromquelle (M_bound)
- AbruptAdapter (abruptAdapter)
- Dynamische Pipe (pipeSmall)
- 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;
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
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? –
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