Hi,

This command actually works but it takes
a lot of time (~34 minutes on my computer).
> simulate(Idiot.Test,stopTime=6000/60,numberOfIntervals=20)
I will need to have a look at this, but as far as
I can see, the solver takes extremely small steps,
that's why it takes a lot of time to run the
simulation.

Cheers,
Adrian Pop/

dieter wrote:
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;

Reply via email to