0

I've been trying to build a Rankine Power Cycle on OpenModelica for quite some time now and have been running into a reoccurring issue that I'm just not sure how to troubleshoot.

My Issue: I'm able to get the majority of all of my Rankine Power Cycle model iterations to at least get a checked model as well as a successful instantiation. At this point I deem my model ready to try and simulate. The types of errors that usually break my simulation are variables that are located within extended models that my model is using.

For example: Currently I am checking and verifying sub assemblies of the Rankine Power Cycle to be able to properly verify which components work and which do not under x,y,z circumstances. My heat exchanger model is checked and is able to instantiate but upon simulation I get error codes that read:

[22] 14:34:06 Symbolic Error
[ThermoPower.Gas: 1053:5-1053:66]: Model is structurally singular, error 
found sorting equations 
125: 0.0 = 0.0;
for variables 
HX.gasFlow.vbar[5](140), HX.gasFlow.drbdX1[2,4](125)

What the issue here for me is that the error above, or all errors of these types, are hyperlinked to either partial models or packages that my own model extends. So the variables above "vbar" or "drbdX1" are no where within my HeatExchanger Model that I built, but the components inside of my own model somehow extend to these variables that are inevitably causing the error.

Things I've tried:

I've tried adding values to the extended hyperlinked models/packages in order to fix the error. This does not do anything.

I've tried copy and pasting said lines of code into my own model in order to declare whatever package/function that has already been declared within the extension. This does not work as usually produces an error for incorrect declaration.

The hyperlinked error does little to not help on how exactly I should fix the model, or where or which model I should fix it on.

If you have any insight or recommendations on how to fix such an issue, please feel free to comment below! Thank you for your time and reading this far into my plea for help :)

Heat Exchanger Code:

model HX_Turbine_Check

ThermoPower.PowerPlants.HRSG.Components.HE HX(
FluidPhaseStart = ThermoPower.Choices.FluidPhase.FluidPhases.Steam, 
N_F = 6, 
N_G = 6, Tstartbar_G(displayUnit = "K") = 800, 
exchSurface_F = 2000, 
exchSurface_G = 1000, 
extSurfaceTub = 1500, 
fluidNomFlowRate = 10, 
fluidNomPressure = 2e+06, 
fluidVol = 5, 
gasNomFlowRate = 100, 
gasNomPressure = 101325, 
gasVol = 10, 
lambda = 20, 
metalVol = 10, 
pstart_F = 2e+06, 
pstart_G = 101325, 
rhomcm = 7900, 
rhonom_F(displayUnit = "kg/m3") = 0.6, 
rhonom_G(displayUnit = "kg/m3") = 0.33)  annotation(
Placement(visible = true, transformation(origin = {-30, 30}, extent = 
{{-10, -10}, {10, 10}}, rotation = 0)));

ThermoPower.Gas.SourceMassFlow FlueGasSource(
redeclare package Medium = ThermoPower.Media.FlueGas, 
T = 800, 
p0 = 101325, 
w0 = 100)  annotation(
Placement(visible = true, transformation(origin = {-92, 30}, extent = 
{{-10, -10}, {10, 10}}, rotation = 0)));

ThermoPower.Gas.SinkMassFlow FlueGasSink(
redeclare package Medium = ThermoPower.Media.FlueGas, 
p0 = 101325, 
w0 = 100)  annotation(
Placement(visible = true, transformation(origin = {32, 30}, extent = 
{{-10, -10}, {10, 10}}, rotation = 0)));

ThermoPower.Water.SourceMassFlow WaterSource(
T = 212.4 + 273, 
h = 2799500, 
p0 = 20e5, 
w0 = 10)  annotation(
Placement(visible = true, transformation(origin = {-30, 92}, extent = 
{{-10, -10}, {10, 10}}, rotation = -90)));

ThermoPower.Water.SinkMassFlow SteamSink(
p0 = 1.01325e5, 
w0 = 10)  annotation(
Placement(visible = true, transformation(origin = {48, 0}, extent = {{-10, 
-10}, {10, 10}}, rotation = 0)));

ThermoPower.Gas.SensT TGas_Inlet(
redeclare package Medium = ThermoPower.Media.FlueGas)  annotation(
Placement(visible = true, transformation(origin = {-58, 34}, extent = 
{{-10, -10}, {10, 10}}, rotation = 0)));

ThermoPower.Gas.SensT TGas_Outlet(
redeclare package Medium = ThermoPower.Media.FlueGas)  annotation(
Placement(visible = true, transformation(origin = {0, 34}, extent = {{-10, 
-10}, {10, 10}}, rotation = 0)));

ThermoPower.Water.SensT TWater_Inlet annotation(
Placement(visible = true, transformation(origin = {-26, 60}, extent = 
{{-10, -10}, {10, 10}}, rotation = -90)));

ThermoPower.Water.SensT TSteam_Outlet annotation(
Placement(visible = true, transformation(origin = {16, 4}, extent = {{-10, 
-10}, {10, 10}}, rotation = 0)));

ThermoPower.Water.SteamTurbineStodola SteamTurbine(
Kt = 0.0131, 
PRstart = 20, 
pnom = 20e5, 
wnom = 10, 
wstart = 10)  annotation(
Placement(visible = true, transformation(origin = {-20, -30}, extent = 
{{-12, -12}, {12, 12}}, rotation = 0)));

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

Modelica.Mechanics.Rotational.Sensors.PowerSensor powerSensor1 annotation(
Placement(visible = true, transformation(origin = {14, -30}, extent = 
{{-10, -10}, {10, 10}}, rotation = 0)));

ThermoPower.Electrical.Generator generator1 annotation(
Placement(visible = true, transformation(origin = {44, -30}, extent = 
{{-10, -10}, {10, 10}}, rotation = 0)));

Modelica.Blocks.Continuous.FirstOrder firstOrder1 annotation(
Placement(visible = true, transformation(origin = {30, -70}, extent = 
{{-10, -10}, {10, 10}}, rotation = 0)));

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

equation
connect(firstOrder1.y, y) annotation(
Line(points = {{42, -70}, {100, -70}, {100, -70}, {108, -70}}, color = {0, 
0, 127}));
connect(powerSensor1.power, firstOrder1.u) annotation(
Line(points = {{6, -42}, {6, -42}, {6, -70}, {18, -70}, {18, -70}}, color 
= {0, 0, 127}));
connect(powerSensor1.flange_b, generator1.shaft) annotation(
Line(points = {{24, -30}, {36, -30}, {36, -30}, {36, -30}}));
connect(SteamTurbine.shaft_b, powerSensor1.flange_a) annotation(
Line(points = {{-12, -30}, {4, -30}, {4, -30}, {4, -30}}));
connect(SteamTurbine.outlet, TSteam_Outlet.inlet) annotation(
Line(points = {{-10, -20}, {0, -20}, {0, 0}, {10, 0}}, color = {0, 0, 
255}));
connect(TSteam_Outlet.outlet, SteamSink.flange) annotation(
Line(points = {{22, 0}, {38, 0}}, color = {0, 0, 255}));
connect(HX.waterOut, SteamTurbine.inlet) annotation(
Line(points = {{-30, 20}, {-30, -20}}, color = {0, 0, 255}));
connect(TWater_Inlet.outlet, HX.waterIn) annotation(
Line(points = {{-30, 54}, {-30, 54}, {-30, 40}, {-30, 40}}, color = {0, 0, 
255}));
connect(WaterSource.flange, TWater_Inlet.inlet) annotation(
Line(points = {{-30, 82}, {-30, 82}, {-30, 66}, {-30, 66}}, color = {0, 0, 
255}));
connect(TGas_Outlet.outlet, FlueGasSink.flange) annotation(
Line(points = {{6, 30}, {14, 30}, {14, 30}, {22, 30}, {22, 30}, {22, 30}}, 
color = {159, 159, 223}));
connect(HX.gasOut, TGas_Outlet.inlet) annotation(
Line(points = {{-20, 30}, {-13, 30}, {-13, 30}, {-6, 30}, {-6, 30}, {-6, 
30}, {-6, 30}, {-6, 30}}, color = {159, 159, 223}));
connect(TGas_Inlet.outlet, HX.gasIn) annotation(
Line(points = {{-52, 30}, {-46, 30}, {-46, 30}, {-40, 30}, {-40, 30}, 
{-40, 30}, {-40, 30}, {-40, 30}}, color = {159, 159, 223}));
connect(FlueGasSource.flange, TGas_Inlet.inlet) annotation(
Line(points = {{-82, 30}, {-64, 30}, {-64, 30}, {-64, 30}}, color = {159, 
159, 223}));
connect(HX.gasOut, HX.gasIn) annotation(
Line(points = {{-20, 30}, {-40, 30}}, color = {159, 159, 223}));

annotation(
uses(ThermoPower(version = "3.1"), Modelica(version = "3.2.3")));end 
HX_Turbine_Check;
finnahuss
  • 317
  • 3
  • 9
  • This sounds like you have an equation in which both variables are known. From the error message this should be `HX.gasFlow.vbar[5](140)` and `HX.gasFlow.drbdX1[2,4](125)`. As the tools needs to compute one variable from the equation involving the variables, the overall system is not solvable or "structurally singular". So there seems to be a fundamental problem with the model/system you are trying to describe. Difficult to tell what it exactly is from the description of the error... – Markus A. Mar 05 '19 at 07:59
  • Can you include a complete model leading to this error message? – Hans Olsson Mar 05 '19 at 08:12
  • Hey @MarkusA. , Thanks for getting back to me. Those two variables mentioned above: HX.gasFlow.vbar[5](140) and HX.gasFlow.drbdX1[2,4](125) are not located anywhere within my HX model. This can be verified using the "ctrl + f" command looking through my code in the text view interface. The errors produced in the message browser are hyperlinked into the "Gas Package" of the ThermoPower library. – finnahuss Mar 05 '19 at 16:04
  • Too further add to the confusion of the "hyper linked error" or "nested variable error" starting from the Gas Package of the ThermoPower Library . . . Upon clicking the hyperlinked error, one is brought to line 1053 of the Gas package to the following code: L/A*dwdt + (outfl.p - infl.p) + Dpfric = 0 "Momentum balance"; The error is prompting me to try and the root of the error here within the Gas Package, but the variables used in the equation above are also non existent within my HX model. I'm pretty stumped as to how to fix as well as the relevance of the Gas Package – finnahuss Mar 05 '19 at 16:05
  • Hello @HansOlsson , Above I have copied the source code to the HX model I am working on and experiencing the error with. Hope this helps, thanks for checking it out! – finnahuss Mar 05 '19 at 16:13

0 Answers0