Hi,
when I run the small model below with:
simulate(Idiot.Test,stopTime=5000/60,numberOfIntervals=20)
it produces a result file. But when I run it with:
simulate(Idiot.Test,stopTime=6000/60,numberOfIntervals=20)
the executable seems to stick in an infinite loop.
I hope somebody can have a look at it or has some idea.
Thanks
Dieter
------------------------------------------------------------
package Idiot
//import Modelica.Constants.*;
final constant Real pi = 3.1415926;
final constant Real ambientPressure = 101325;
connector Port
Real pressure;
flow Real flowrate;
end Port;
class Fluid "Water is the default"
parameter Real density = 1e3;
parameter Real viscosity = 1e-3;
end Fluid;
partial model TwoPorts
outer parameter Fluid fluid;
Port inPort, outPort;
equation
inPort.flowrate + outPort.flowrate = 0;
end TwoPorts;
partial model Conduit "generic flow resistance element"
extends TwoPorts;
parameter Real referenceDiameter = 8e-3 "may it be the in or outPort
diameter";
//protected
final parameter Real d = referenceDiameter; // final excludes them from the
GUI
final parameter Real A = pi/4 * d^2;
Real dp "pressure loss";
Real r,m, q, z;
Real lossFactor;
Real v "velocity";
Real Re "Reynolds No";
equation
r = fluid.density;
m = fluid.viscosity;
q = inPort.flowrate;
z = lossFactor;
v = q / A;
Re = v * d / ( m / r);
dp = z * r/2 * v^2;//genericPressureLoss(z, v, r);
inPort.pressure = outPort.pressure + dp;
end Conduit;
model Nozzle "also usable for broken (deburred) inlet opening"
extends Conduit;
parameter Real inDiameter = 1e6; // "approximation of a broken (deburred)
inlet from ambience";
protected
final parameter Real dI = inDiameter;
final parameter Real dO = referenceDiameter;
//algorithm
equation
// assert( dI < dO, "Inlet smaller than outlet! Use a diffuser instead");
lossFactor = 1.04 - (dO/dI)^4; // loss factor includes the acceleration work
r/2 v^2
// 0.04 is from VDI Wärematlas 7th issue
// 0.05 from Dubbel 16th issue
// annotation (Documentation (info= "The nozzle is also a good
// approximation for deburred intakes z = 0.05, rounded intake: z = 0.005
// to 0.05, very sharp edged intakes: up to z = 0.5 (taken from VDI
// Wärmeatlas 7th issue)"));
end Nozzle;
model Ambience
Port port;
equation
port.pressure = ambientPressure;
end Ambience;
model PressureBoundary
parameter Real p = 3e5;
Port port;
equation
port.pressure = p + ambientPressure;
end PressureBoundary;
model PumpStage
// TODO: leakage! TwoPorts is tight!
extends TwoPorts;
parameter Real V = 0.8054e-6 "0.8054e-6 VDO, 2.05e-6: GKN";
parameter Real s = 0.03e-3 "tooth gap";
parameter Real b = 6e-3 "Stage breadth";
parameter Real l = 0.4e-3 "effective tooth gap length";
parameter Real e0 = 0.975 "volumetric efficiency at '0 bar'";
//protected
Real qt; // tooth leakage
Real n "revs";
Real m, dp, q, qq;
equation
m = fluid.viscosity;
n = time;
dp = outPort.pressure - inPort.pressure;
qt = b*s * dp*s^2 / ( 12*m*l);
q = e0*V*n;
qq = q - qt;
inPort.flowrate = if q < qt then 0 else qq;
end PumpStage;
model Test
inner Fluid fluid(viscosity = 3.3e-3, density = 850);
Nozzle nozzle;
Ambience ambience;
PressureBoundary pressure;
PumpStage pump;
equation
connect( ambience.port, nozzle.inPort);
connect( nozzle.outPort, pump.inPort);
// connect(ambience.port, pump.inPort);
// connect( ambience.port, pump.inPort);
connect( pump.outPort, pressure.port);
end Test;
end Idiot;