Hi Dieter,

dunno if that's your problem, but the usage of assert seems to be mistaken here.

Asserting for (dI < dO) means assuring that state. Only if (dI < dO) evaluates 
to false, your message is given. But then the message "Inlet smaller than 
outlet!" suggests the opposite to me. Unless you mean "Inlet should be smaller 
than outlet."

Greetings
Alexander


-----Ursprüngliche Nachricht-----
Von: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Im Auftrag von dieter
Gesendet: Dienstag, 3. Juni 2008 22:03
An: Modelica Association
Betreff: Problem with "assert"

Hi,

unfortunately there seems to be another bug: When I'm running below
model with

  simulate( Idiot.Test, stopTime = 6000/60,numberOfIntervals=50);

it gives me some 50 result steps, so far so good.  But when I just
comment out the (here logically irrelevant) assert function below, OM
gives me only 2 result steps!

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 = 5e-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 = 4e5;
  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;
  Real qqq;
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;
  qqq = qq / q;
  inPort.flowrate = if q < qt then 0 else qq;
end PumpStage;

model Test
  parameter Real pressure = ambientPressure;
  inner Fluid fluid(viscosity = 3.3e-3, density = 850);
  Nozzle nozzle;
  Ambience ambience;
  PressureBoundary pressureBC( p = 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, pressureBC.port);
end Test;
end Idiot;


Reply via email to