finnahuss
finnahuss

Reputation: 307

What is the first step in debugging this model and how?

Debugging within OpenModelica seems to grow harder and harder the more I learn about it and realize how little of experience I have.

I have been reading a lot of OpenModelica Debugging literature and most pieces only seems to scrape the surface on debugging. The most helpful piece I have read was "Tools and Methods for Analysis, Debugging, and Performance Improvement of Equation-Based Models" by Martin Sjolund, a very prominent figure within the Modelica Community. Unfortunately, I do not have the background/experience to be able to follow all of Dr. Sjlund's book. Even the OpenModelica users guide seems to barely iterate throughout the debugging process and the rest is to figure out on the users end.

I never know what to expect after my model successfully 1. checks and 2. flattens (instantiates). The algorithmic debugger is still a mystery to me.

EDIT: Code of model I'm having issues with

model HRSG_WaterDrum_HXVersion

///Current Version: Phase State: Left to be interpreted/guessed. This can be switched back. Volume should also be explored . . . Volumes taken from Library Model are very small with respect to small mass flow rate. Current Version: V & SA = 1///

ThermoPower.Water.Drum Drum(
Cm = 4.08e6 * 1.195e-2, 
DrumOrientation = 1, 
Kcs = 0.01, 
Ks = 100, 
L = 1.455, 
afd = 0.0, 
gl = 300, 
gv = 150, 
hlstart = 203.22e3, 
hvstart = 203.22e3, 
lm = 19, 
pstart = 
100e5, 
rext = 0.125, 
rint = 0.115, 
tauc = 5, 
tauev = 15)  annotation(
Placement(visible = true, transformation(origin = {-49, 3}, extent = 
{{-21, -21}, {21, 21}}, rotation = 0)));

ThermoPower.Water.SinkMassFlow Blowdown annotation(
Placement(visible = true, transformation(origin = {-10, -32}, extent = 
{{-10, -10}, {10, 10}}, rotation = 0)));

ThermoPower.Water.Flow1DFV2ph Downcomer(
A = 1.903e-3, 
Cfnom = 0.01, 
Dhyd = 0.04922, 
DynamicMomentum = false, 
FFtype = ThermoPower.Choices.Flow1D.FFtypes.Colebrook, 
H = -15.923, 
Kfc = 1, 
L = 15.923, 
N = 2, 
dpnom = 100, 
e = 6.1e-4, 
hstartin = 1407.6e3, 
hstartout = 1407.6e3, 
omega = 0.1546, 
pstart = 100e5, 
wnf = 0.3, 
wnom = 21.5)  annotation(
Placement(visible = true, transformation(origin = {-64, -50}, extent = 
{{-10, -10}, {10, 10}}, rotation = -90)));

ThermoPower.Thermal.MetalTubeFV Downcomer_Wall(
L = 15.923, 
Nw = 1, 
Tstart1 = 540, 
TstartN = 540, 
WallRes = true, 
lambda = 19, 
rext = 0.03015, 
rhomcm = 4.08e6, 
rint = 0.02461)  annotation(
Placement(visible = true, transformation(origin = {-48, -50}, extent = 
{{-10, -10}, {10, 10}}, rotation = 90)));

ThermoPower.Water.Header HeaderLower(
Cm = 4.08e6 * 4.51e-4, 
S = 1, 
Tmstart = 540, 
V = 1, 
gamma = 2000, 
hstart = 1407.6e3, 
noInitialPressure = true, 
pstart = 101.18e5)  annotation(
Placement(visible = true, transformation(origin = {-30, -96}, extent = 
{{-10, -10}, {10, 10}}, rotation = 0)));

ThermoPower.Water.PressDrop PressureDrop(
A = 5.62e-5, 
FFtype = ThermoPower.Choices.PressDrop.FFtypes.Kinetic, 
K = 3, 
Kfc = 2, 
dpnom = 80000, 
wnf = 0.1, 
wnom = 21.5)  annotation(
Placement(visible = true, transformation(origin = {38, -96}, extent = 
{{-10, -10}, {10, 10}}, rotation = 0)));

ThermoPower.Water.Header HeaderUpper(
Cm = 4.08e6 * 4.51e-4,
FluidPhaseStart = ThermoPower.Choices.FluidPhase.FluidPhases.TwoPhases, 
S = 1, 
Tmstart = 311.1 + 273.15, 
V = 1, 
gamma = 2000, 
hstart = 2724.7e3, 
noInitialPressure = true, 
pstart = 100.2e5)  annotation(
Placement(visible = true, transformation(origin = {72, -36}, extent = 
{{-10, -10}, {10, 10}}, rotation = 90)));

ThermoPower.Water.Flow1DFV2ph Pipe2Drum(
A = 5.557e-4, 
Cfnom = 0.01, 
Dhyd = 0.0266, 
FFtype = ThermoPower.Choices.Flow1D.FFtypes.Cfnom, 
H = 2.779, 
HydraulicCapacitance = ThermoPower.Choices.Flow1D.HCtypes.Upstream, 
L = 2.779, 
N = 2, 
Nt = 1, 
dpnom = 17000, 
e = 9.9e-4, 
hstartin = 2724.7e3, 
hstartout = 2724.7e3, 
noInitialPressure = true, 
omega = 0.0835, 
pstart = 100e5, 
wnf = 0.1, 
wnom = 21.5)  annotation(
Placement(visible = true, transformation(origin = {19, -9}, extent = 
{{-11, 11}, {11, -11}}, rotation = 180)));

ThermoPower.Thermal.MetalTubeFV Pipe2Drum_Wall(
L = 2.779, 
Nw = 1, 
Tstart1 = 584.25, 
TstartN = 584.25, 
WallRes = true, 
lambda = 19, 
rext = 0.0167, 
rhomcm = 4.08e6, 
rint = 0.0133)  annotation(
Placement(visible = true, transformation(origin = {19, 9}, extent = {{-11, 
-11}, {11, 11}}, rotation = 180)));

ThermoPower.Water.Flow1DFV2ph Pipe2SH(
A = 3.301 - 4, 
Cfnom = 0.004, 
Dhyd = 0.0205, 
DynamicMomentum = false, 
FFtype = ThermoPower.Choices.Flow1D.FFtypes.Cfnom, 
H = 0, 
HydraulicCapacitance = ThermoPower.Choices.Flow1D.HCtypes.Downstream, 
L = 11.48, 
N = 2, 
Nt = 1, 
dpnom = 2000, 
hstartin = 2724.7e3, 
hstartout = 2724.7e3, 
omega = 0.0644, 
pstart = 100e5, 
wnom = 0.06)  annotation(
Placement(visible = true, transformation(origin = {-20, 50}, extent = 
{{-10, -10}, {10, 10}}, rotation = 0)));

ThermoPower.Thermal.MetalTubeFV Pipe2SH_Wall(
L = 11.480, 
Nw = 1, 
Tstart1 = 584.25, 
TstartN = 584.25, 
WallRes = true, 
lambda = 19, 
rext = 0.01305, 
rhomcm = 4.08e6, 
rint = 0.01025)  annotation(
Placement(visible = true, transformation(origin = {-20, 66}, extent = 
{{-10, -10}, {10, 10}}, rotation = 180)));

ThermoPower.Water.ValveVap VaporValve(
Av = 2.7e-5, 
CvData = ThermoPower.Choices.Valve.CvTypes.Av, 
dpnom = 2e+06, 
pnom = 95e5, 
useThetaInput = true, 
wnom = 2 * 0.06)  annotation(
Placement(visible = true, transformation(origin = {70, 50}, extent = 
{{-10, -10}, {10, 10}}, rotation = 0)));

ThermoPower.Thermal.MetalTubeFV Pipe2Valve_Wall(
L = 6.6, 
Nw = 1, 
Tstart1 = 633.15, 
TstartN = 633.15, 
WallRes = true, 
lambda = 19, 
rext = 0.01275, 
rhomcm = 4.08e6, 
rint = 0.0100)  annotation(
Placement(visible = true, transformation(origin = {40, 66}, extent = 
{{-10, -10}, {10, 10}}, rotation = 180)));

ThermoPower.Water.Flow1DFV2ph Pipe2Valve(
A = 3.142e-4, 
Cfnom = 0.004, 
Dhyd = 0.02, 
DynamicMomentum = false, 
FFtype = ThermoPower.Choices.Flow1D.FFtypes.Cfnom, 
H = 0, 
HydraulicCapacitance = ThermoPower.Choices.Flow1D.HCtypes.Upstream, 
L = 6.6, 
N = 2, 
Nt = 1, 
dpnom = 1000, 
hstartin = 2962.1e3, 
hstartout = 2962.1e3, 
omega = 0.0628, 
pstart = 96e5, 
wnf = 0.1, 
wnom = 0.06)  annotation(
Placement(visible = true, transformation(origin = {40, 50}, extent = 
{{-10, -10}, {10, 10}}, rotation = 0)));

ThermoPower.Water.SinkPressure Sink(
p0 = 95e5)  annotation(
Placement(visible = true, transformation(origin = {100, 50}, extent = 
{{-10, -10}, {10, 10}}, rotation = 0)));

inner ThermoPower.System system annotation(
Placement(visible = true, transformation(origin = {-90, 90}, extent = 
{{-10, -10}, {10, 10}}, rotation = 0)));

Modelica.Blocks.Interfaces.RealOutput DrumPressure annotation(
Placement(visible = true, transformation(origin = {110, -10}, extent = 
{{-10, -10}, {10, 10}}, rotation = 0), iconTransformation(origin = {110, 
-10}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));

Modelica.Blocks.Interfaces.RealOutput DrumLevel annotation(
Placement(visible = true, transformation(origin = {110, -38}, extent = 
{{-10, -10}, {10, 10}}, rotation = 0), iconTransformation(origin = {110, 
-38}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));

Modelica.Blocks.Interfaces.RealInput Valve_Opening annotation(
Placement(visible = true, transformation(origin = {90, 80}, extent = {{8, 
-8}, {-8, 8}}, rotation = 0), iconTransformation(origin = {90, 80}, extent 
= {{8, -8}, {-8, 8}}, rotation = 0)));

ThermoPower.PowerPlants.HRSG.Components.HE SH(
Cfnom_F = 0.01, 
Cfnom_G = 0.01, 
FFtype_F = ThermoPower.Choices.Flow1D.FFtypes.Cfnom, 
FFtype_G = ThermoPower.Choices.Flow1D.FFtypes.Cfnom, 
Kfnom_F = 0, 
Kfnom_G = 0, 
N_F = 2, 
N_G = 2, 
Tstartbar_G(displayUnit = "K") = 787.72, 
dpnom_F = 100, 
dpnom_G = 100, 
exchSurface_F = 2.752, 
exchSurface_G = 2.752, 
extSurfaceTub = 5.504, 
fluidNomFlowRate = 21.5, 
fluidNomPressure = 1e+07, 
fluidVol = 0.01376, 
gasNomFlowRate = 169.755, 
gasNomPressure = 101325, 
gasVol = 0.01376, 
lambda = 19, 
metalVol = 0.01376, 
pstart_F = 1e+07, 
pstart_G = 101325, 
rhomcm = 4.08e6, 
rhonom_F(displayUnit = "kg/m3") = 997, 
rhonom_G = 1)  annotation(
Placement(visible = true, transformation(origin = {10, 50}, extent = {{10, 
-10}, {-10, 10}}, rotation = 90)));

ThermoPower.Gas.SourceMassFlow Source_FlueGas(
redeclare package Medium = ThermoPower.Media.FlueGas, 
T = 514.57 + 273.15, Xnom = {0.23, 0.02, 0.01, 0.04, 0.7}, 
p0 = 101325, 
w0 = 167.755)  annotation(
Placement(visible = true, transformation(origin = {0, 90}, extent = {{-10, 
-10}, {10, 10}}, rotation = 0)));

ThermoPower.PowerPlants.HRSG.Components.HE Economizer(
Cfnom_F = 0.01, 
Cfnom_G = 0.01, 
FFtype_G = ThermoPower.Choices.Flow1D.FFtypes.Cfnom, 
Kfnom_G = 0, 
N_F = 2, 
N_G = 2, 
Tstartbar_G = 604.74, 
dpnom_F = 100, 
dpnom_G = 100, 
exchSurface_F = 2.752, 
exchSurface_G = 2.752, 
extSurfaceTub = 5.504, 
fluidNomFlowRate = 21.5,
fluidNomPressure = 1e+07, 
fluidVol = 0.01376, 
gasNomFlowRate = 169.755, 
gasNomPressure = 101325, 
gasVol = 0.01376, 
lambda = 19, 
metalVol = 0.01376, 
pstart_F = 1e+07, 
pstart_G = 101325, 
rhomcm = 4.08e6, 
rhonom_F(displayUnit = "kg/m3") = 997, 
rhonom_G = 1)  annotation(
Placement(visible = true, transformation(origin = {-132, 0}, extent = 
{{-10, -10}, {10, 10}}, rotation = 90)));

ThermoPower.Water.Flow1DFV2ph Pipe2DrumFeed(
A = 3.301e-4, 
Cfnom = 0.004, 
Dhyd = 0.0205, 
DynamicMomentum = false, 
FFtype = ThermoPower.Choices.Flow1D.FFtypes.Cfnom, 
FluidPhaseStart = ThermoPower.Choices.FluidPhase.FluidPhases.Liquid, 
H = 0, 
HydraulicCapacitance = ThermoPower.Choices.Flow1D.HCtypes.Downstream, 
L = 10, 
N = 2, 
Nt = 1, 
dpnom = 2000,
hstartin = 1407.6e3, 
hstartout = 1407.6e3, 
omega = 0.0644, 
pstart = 100e5, 
wnom = 0.06)  annotation(
Placement(visible = true, transformation(origin = {-96, 0}, extent = 
{{-10, -10}, {10, 10}}, rotation = 0)));

ThermoPower.Thermal.MetalTubeFV Pipe2DrumFeed_Wall(
L = 11.480, 
Nw = 1, 
Tstart1 = 584.25, 
TstartN = 584.25, 
WallRes = true, 
lambda = 19, 
rext = 0.01305, 
rhomcm = 4.08e6, 
rint = 0.01025)  annotation(
Placement(visible = true, transformation(origin = {-96, 16}, extent = 
{{-10, -10}, {10, 10}}, rotation = 180)));

ThermoPower.Gas.SinkPressure Sink_FlueGas(
redeclare package Medium = ThermoPower.Media.FlueGas, T = 185.25 + 273.15, 
Xnom = {0.23, 0.02, 0.01, 0.04, 0.7}, 
p0 = 101325)  annotation(
Placement(visible = true, transformation(origin = {-122, 34}, extent = 
{{-10, -10}, {10, 10}}, rotation = 0)));

ThermoPower.Water.SourceMassFlow Source_Water(
T = 46.45 + 273.15, 
h = 203.22e3, 
p0 = 100.0e5, 
use_T = true, 
w0 = 21.5)  annotation(
Placement(visible = true, transformation(origin = {-164, 0}, extent = 
{{-10, -10}, {10, 10}}, rotation = 0)));

ThermoPower.PowerPlants.HRSG.Components.HE Risers(
Cfnom_F = 0.01, 
Cfnom_G = 0.01, 
Kfnom_F = 0, 
Kfnom_G = 0, 
N_F = 2, 
N_G = 2, 
Tstartbar_G(displayUnit = "K") = 760.17, 
dpnom_F = 100, 
dpnom_G = 100, 
exchSurface_F = 2.752, 
exchSurface_G = 2.752, 
extSurfaceTub = 5.504, 
fluidNomFlowRate = 21.5, 
fluidNomPressure = 1e+07, 
fluidVol = 0.01376, 
gasNomFlowRate = 169.755, 
gasNomPressure = 101325, 
gasVol = 0.01376, 
lambda = 19, 
metalVol = 0.01376, 
pstart_F = 1e+07, 
pstart_G = 101325, 
rhomcm = 4.08e6, 
rhonom_F(displayUnit = "kg/m3") = 997, 
rhonom_G = 1)  annotation(
Placement(visible = true, transformation(origin = {72, -72}, extent = 
{{-10, -10}, {10, 10}}, rotation = 180)));

equation
connect(Valve_Opening, VaporValve.theta) annotation(
Line(points = {{90, 80}, {70, 80}, {70, 58}}, color = {0, 0, 127}, 
thickness = 0.75));
connect(Pipe2Drum_Wall.int, Pipe2Drum.wall) annotation(
Line(points = {{19, 6}, {19, -4.3}}, color = {255, 127, 0}, thickness = 
0.75));
connect(Downcomer.wall, Downcomer_Wall.int) annotation(
Line(points = {{-59, -50}, {-51, -50}}, color = {255, 127, 0}, thickness = 
0.75));
connect(Pipe2Valve_Wall.int, Pipe2Valve.wall) annotation(
Line(points = {{40, 63}, {40, 55}}, color = {255, 127, 0}, thickness = 
0.75));
connect(Pipe2SH_Wall.int, Pipe2SH.wall) annotation(
Line(points = {{-20, 63}, {-20, 56}}, color = {255, 127, 0}, thickness = 
0.75));
connect(Pipe2DrumFeed_Wall.int, Pipe2DrumFeed.wall) annotation(
Line(points = {{-96, 13}, {-96, 6}}, color = {255, 127, 0}, thickness = 
0.75));
connect(HeaderUpper.outlet, Pipe2Drum.infl) annotation(
Line(points = {{72, -26}, {72, -9.5}, {30, -9.5}, {30, -9}}, color = {0, 
0, 255}, thickness = 1));
connect(Pipe2Drum.outfl, Drum.riser) annotation(
Line(points = {{8, -9}, {-33, -9}}, color = {0, 0, 255}, thickness = 1));
connect(Drum.steam, Pipe2SH.infl) annotation(
Line(points = {{-37, 18}, {-36.82, 18}, {-36.82, 49.7}, {-30.82, 49.7}}, 
color = {0, 0, 255}, thickness = 1));
connect(SH.gasOut, Risers.gasIn) annotation(
Line(points = {{10, 40}, {10, 40}, {10, 20}, {92, 20}, {92, -72}, {82, 
-72}, {82, -72}}, color = {159, 159, 223}, thickness = 0.75));
connect(Risers.gasOut, Economizer.gasIn) annotation(
Line(points = {{62, -72}, {-132, -72}, {-132, -10}, {-132, -10}}, color = 
{159, 159, 223}, thickness = 0.75));
connect(HeaderUpper.inlet, Risers.waterOut) annotation(
Line(points = {{72, -46}, {72, -46}, {72, -62}, {72, -62}}, color = {0, 0, 
255}, thickness = 1));
connect(PressureDrop.outlet, Risers.waterIn) annotation(
Line(points = {{48, -96}, {72, -96}, {72, -82}, {72, -82}, {72, -82}}, 
color = {0, 0, 255}, thickness = 1));
connect(Economizer.gasOut, Sink_FlueGas.flange) annotation(
Line(points = {{-132, 10}, {-132, 10}, {-132, 34}, {-132, 34}}, color = 
{159, 159, 223}, thickness = 0.75));
connect(Blowdown.flange, Drum.blowdown) annotation(
Line(points = {{-20, -32}, {-49, -32}, {-49, -18}}, color = {0, 0, 255}, 
thickness = 1));
connect(Source_Water.flange, Economizer.waterIn) annotation(
Line(points = {{-154, 0}, {-142, 0}, {-142, 0}, {-142, 0}}, color = {0, 0, 
255}, thickness = 1));
connect(Economizer.waterOut, Pipe2DrumFeed.infl) annotation(
Line(points = {{-122, 0}, {-106, 0}, {-106, 0}, {-106, 0}}, color = {0, 0, 
255}, thickness = 1));
connect(Pipe2DrumFeed.outfl, Drum.feedwater) annotation(
Line(points = {{-86, 0}, {-69, 0}}, color = {0, 0, 255}, thickness = 1));
connect(Drum.downcomer, Downcomer.infl) annotation(
Line(points = {{-64, -12}, {-64, -12}, {-64, -40}, {-64, -40}}, color = 
{0, 0, 255}, thickness = 1));
connect(Downcomer.outfl, HeaderLower.inlet) annotation(
Line(points = {{-64, -60}, {-64, -96}, {-40, -96}}, color = {0, 0, 255}, 
thickness = 1));
connect(Source_FlueGas.flange, SH.gasIn) annotation(
Line(points = {{10, 90}, {10, 90}, {10, 60}, {10, 60}, {10, 60}, {10, 
60}}, color = {159, 159, 223}, thickness = 0.75));
connect(Pipe2SH.outfl, SH.waterIn) annotation(
Line(points = {{-10, 50}, {0, 50}, {0, 50}, {0, 50}, {0, 50}, {0, 50}}, 
color = {0, 0, 255}, thickness = 1));
connect(SH.waterOut, Pipe2Valve.infl) annotation(
Line(points = {{20, 50}, {30, 50}, {30, 50}, {30, 50}}, color = {0, 0, 
255}, thickness = 1));
connect(VaporValve.outlet, Sink.flange) annotation(
Line(points = {{80, 50}, {90, 50}}, color = {0, 0, 255}, thickness = 1));
connect(Pipe2Valve.outfl, VaporValve.inlet) annotation(
Line(points = {{50, 50}, {60, 50}}, color = {0, 0, 255}, thickness = 1));
connect(HeaderLower.outlet, PressureDrop.inlet) annotation(
Line(points = {{-20, -96}, {28, -96}}, color = {0, 0, 255}, thickness = 
1));
DrumPressure = Drum.p;
DrumLevel = Drum.y;
annotation(
uses(ThermoPower(version = "3.1"), Modelica(version = "3.2.3")));end 
HRSG_WaterDrum_HXVersion;

Upvotes: 0

Views: 271

Answers (1)

Hans Olsson
Hans Olsson

Reputation: 12517

Running that model (at least with the version of ThermoPower I had) stops immediately with:

Error: The following error was detected at time: 0 External radius must be greater than internal radius Failed condition: SH.metalTube.rext > 0.01

The cause is that ThermoPower.PowerPlants.HRSG.Components.HE has:

 Thermal.MetalTubeFV metalTube(
    rint=fluidVol*4/exchSurface_F/2,
    rext=(metalVol + fluidVol)*4/extSurfaceTub/2,

and you set extSurfaceTub twice as large as exchSurface_F for SH, Economizer, and Risers.

In general I would say the first step is asking Why are you debugging the model?

  1. Did it fail to initialize?
  2. Did it initialize, but then the simulation stopped at some time?
  3. Does it run, but generate the wrong results?
  4. Does it run and generate the right results as far as you can tell, but too slowly?

Otherwise I don't why you would debug at all.

The first step in debugging any model is then:

  • Look at the warnings during translation
  • Check that the model components are tested
  • Check that they are connected together in the right way and with suitable parameters

Correcting the previous errors stops the model during initialization, but there were two kinds of warnings in Dymola that indicates problems that should be corrected:

The initial conditions are not fully specified. Dymola has selected default initial conditions.

Assuming fixed start value for the continuous states:

Economizer.fluidFlow.htilde[] Economizer.gasFlow.Xtilde[] Risers.fluidFlow.htilde[] Risers.gasFlow.Xtilde[] SH.gasFlow.p(start = SH.gasFlow.pstart) SH.gasFlow.Xtilde[]

Conflicting start values

The start value of the variable Economizer.fluidFlow.htilde[1] being Pipe2DrumFeed.hstart[1] has been selected as a default initial condition. However, the start value has been selected from a set of alias variables having conflicting start values of the same precedence. 1407600.0, the start value of Pipe2DrumFeed.h[1] given as Pipe2DrumFeed.hstart[1]. 100000.0, the start value of Economizer.fluidFlow.htilde[1] given as Economizer.fluidFlow.hstart[2].

The iteration variable SH.fluidFlow.htilde[1] has been selected to have the guess value Pipe2Valve.hstart[1]. However, the start value has been selected from a set of alias variables having conflicting start values of the same precedence. 2962100.0, the start value of Pipe2Valve.h[1] given as Pipe2Valve.hstart[1]. 100000.0, the start value of SH.fluidFlow.htilde[1] given as SH.fluidFlow.hstart[2].

The iteration variable HeaderUpper.p has been selected to have the guess value HeaderUpper.pstart. However, the start value has been selected from a set of alias variables having conflicting start values of the same precedence. 10020000.0, the start value of HeaderUpper.p given as HeaderUpper.pstart. 10000000.0, the start value of Pipe2Drum.p given as Pipe2Drum.pstart.

The iteration variable VaporValve.w has been selected to have the guess value VaporValve.wnom. However, the start value has been selected from a set of alias variables having conflicting start values of the same precedence. 0.12, the start value of VaporValve.inlet.m_flow given as VaporValve.wnom. -0.12, the start value of VaporValve.outlet.m_flow given as -VaporValve.wnom. -0.06, the start value of Pipe2Valve.outfl.m_flow given as -Pipe2Valve.wnom.

Upvotes: 7

Related Questions