Skip to content

Commit e400d09

Browse files
authored
Solve nominal temperature differences in heat exchanger convergence issue (#513)
* Added a parameter to introduce default DT for Cp calculation Signed-off-by: Nabil YOUSSEF <nabil.youssef@metroscope.tech> * Update CHANGELOG.md * Improved comments on the default nominal temperatures Signed-off-by: Nabil YOUSSEF <nabil.youssef@metroscope.tech> * improved implementation Signed-off-by: Nabil YOUSSEF <nabil.youssef@metroscope.tech> --------- Signed-off-by: Nabil YOUSSEF <nabil.youssef@metroscope.tech>
1 parent 9ed21a9 commit e400d09

File tree

11 files changed

+55
-45
lines changed

11 files changed

+55
-45
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ Use [gitmoji](https://gitmoji.dev/) to identify your changes.
1212
### 🐛 Fixed <!--Make sure to add a link to the PR and issues related to your change-->
1313

1414
### 💥 Changed <!--Make sure to add a link to the PR and issues related to your change-->
15+
- Breaking change: added a parameter `nominal_DT_default` to set the nominal temperature differences in heat exchanger to the maximum possible temperature difference [#513](https://github.com/Metroscope-dev/metroscope-modeling-library/pull/513)
1516

1617
### 🔥 Removed
1718

@@ -45,7 +46,6 @@ Use [gitmoji](https://gitmoji.dev/) to identify your changes.
4546

4647

4748
## MML - v3.8.0
48-
4949
### ✨ Added <!--Make sure to add a link to the PR and issues related to your change-->
5050
- Added sensors name in sensors icons [#473](https://github.com/Metroscope-dev/metroscope-modeling-library/pull/473)
5151
- Added units for volume, surface tension, dynamic viscosity and thermal conductivity [#474](https://github.com/Metroscope-dev/metroscope-modeling-library/pull/474)

MetroscopeModelingLibrary/Examples/CCGT/MetroscopiaCCGT/MetroscopiaCCGT_direct.mo

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ model MetroscopiaCCGT_direct
133133
parameter Real pumpRec_CV_Cvmax = 52.329174; // Recirculation control valve opening
134134

135135
MetroscopeModelingLibrary.MultiFluid.HeatExchangers.Economiser economiser(
136+
nominal_DT_default=false,
136137
QCp_max_side=Eco_QCp_max_side,
137138
Q_cold_0=56.89394,
138139
Q_hot_0=510.45065,
@@ -172,6 +173,7 @@ model MetroscopiaCCGT_direct
172173
origin={56,34})));
173174
MetroscopeModelingLibrary.MultiFluid.HeatExchangers.Evaporator evaporator(
174175
x_steam_out(start=1),
176+
faulty=false,
175177
Q_cold_0=47.517586,
176178
Q_hot_0=510.45065,
177179
T_cold_in_0=592.94025,
@@ -186,6 +188,7 @@ model MetroscopiaCCGT_direct
186188
h_0=2691576)
187189
annotation (Placement(transformation(extent={{-34,28},{-46,40}})));
188190
MetroscopeModelingLibrary.MultiFluid.HeatExchangers.Superheater HPsuperheater1(
191+
nominal_DT_default=false,
189192
QCp_max_side="unidentified",
190193
Q_cold_0=47.517586,
191194
Q_hot_0=510.45065,
@@ -379,6 +382,7 @@ model MetroscopiaCCGT_direct
379382
T_0=913.15)
380383
annotation (Placement(transformation(extent={{-370,-7},{-358,5}})));
381384
MetroscopeModelingLibrary.MultiFluid.HeatExchangers.Superheater Reheater(
385+
nominal_DT_default=false,
382386
QCp_max_side=ReH_QCp_max_side,
383387
Q_cold_0=49.734425,
384388
Q_hot_0=510.45065,
@@ -605,6 +609,7 @@ model MetroscopiaCCGT_direct
605609
h_0=301935.4)
606610
annotation (Placement(transformation(extent={{-548,-6},{-536,6}})));
607611
MetroscopeModelingLibrary.MultiFluid.HeatExchangers.Superheater HPsuperheater2(
612+
nominal_DT_default=false,
608613
QCp_max_side=HPSH_QCp_max_side,
609614
Q_cold_0=49.734425,
610615
Q_hot_0=510.45065,

MetroscopeModelingLibrary/Examples/CCGT/MetroscopiaCCGT/MetroscopiaCCGT_reverse.mo

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ model MetroscopiaCCGT_reverse
134134
output Real Q_pumpRec_out; // Observable: controlled by the economizer input temperature
135135
output Real turbine_compression_rate; // Observable of interest
136136

137-
MetroscopeModelingLibrary.MultiFluid.HeatExchangers.Economiser economiser(
137+
MetroscopeModelingLibrary.MultiFluid.HeatExchangers.Economiser economiser(nominal_DT_default=false,
138138
QCp_max_side=Eco_QCp_max_side)
139139
annotation (Placement(transformation(extent={{74,-56},{132,3}})));
140140
MetroscopeModelingLibrary.FlueGases.BoundaryConditions.Sink flue_gas_sink
@@ -152,11 +152,11 @@ model MetroscopiaCCGT_reverse
152152
extent={{-6,6},{6,-6}},
153153
rotation=180,
154154
origin={56,8})));
155-
MetroscopeModelingLibrary.MultiFluid.HeatExchangers.Evaporator evaporator
155+
MetroscopeModelingLibrary.MultiFluid.HeatExchangers.Evaporator evaporator(faulty=false)
156156
annotation (Placement(transformation(extent={{-46,-56},{12,4.5}})));
157157
MetroscopeModelingLibrary.Sensors.WaterSteam.PressureSensor P_w_evap_out_sensor(sensor_function="Calibration", causality="SH1_Kfr")
158158
annotation (Placement(transformation(extent={{-34,2},{-46,14}})));
159-
MetroscopeModelingLibrary.MultiFluid.HeatExchangers.Superheater HPsuperheater1(
159+
MetroscopeModelingLibrary.MultiFluid.HeatExchangers.Superheater HPsuperheater1(nominal_DT_default=false,
160160
QCp_max_side=HPSH_QCp_max_side)
161161
annotation (Placement(transformation(extent={{-186,-56},{-126,4}})));
162162
MetroscopeModelingLibrary.Sensors.WaterSteam.TemperatureSensor T_w_HPSH1_out_sensor(sensor_function="Calibration", causality="SH1_Kth")
@@ -245,7 +245,7 @@ model MetroscopiaCCGT_reverse
245245
annotation (Placement(transformation(extent={{-346,28},{-334,40}})));
246246
MetroscopeModelingLibrary.Sensors.FlueGases.TemperatureSensor turbine_T_out_sensor(sensor_function="BC")
247247
annotation (Placement(transformation(extent={{-370,-32},{-358,-20}})));
248-
MetroscopeModelingLibrary.MultiFluid.HeatExchangers.Superheater Reheater(
248+
MetroscopeModelingLibrary.MultiFluid.HeatExchangers.Superheater Reheater(nominal_DT_default=false,
249249
QCp_max_side=ReH_QCp_max_side)
250250
annotation (Placement(transformation(extent={{-102,-56},{-42,4}})));
251251
MetroscopeModelingLibrary.WaterSteam.Machines.SteamTurbine LPsteamTurbine annotation (Placement(transformation(extent={{-14,198},{20,230}})));
@@ -347,7 +347,7 @@ model MetroscopiaCCGT_reverse
347347
MetroscopeModelingLibrary.Sensors.FlueGases.PressureSensor P_filter_out_sensor(
348348
display_unit="mbar", sensor_function="Calibration", causality="filter_Kfr")
349349
annotation (Placement(transformation(extent={{-548,-32},{-536,-20}})));
350-
MetroscopeModelingLibrary.MultiFluid.HeatExchangers.Superheater HPsuperheater2(
350+
MetroscopeModelingLibrary.MultiFluid.HeatExchangers.Superheater HPsuperheater2(nominal_DT_default=false,
351351
QCp_max_side=HPSH_QCp_max_side)
352352
annotation (Placement(transformation(extent={{-302,-56},{-242,4}})));
353353
MetroscopeModelingLibrary.Sensors.WaterSteam.TemperatureSensor T_w_HPSH2_out_sensor(sensor_function="BC", display_unit="degC")

MetroscopeModelingLibrary/MultiFluid/HeatExchangers/FuelHeater.mo

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,12 @@ model FuelHeater
99
// Pressure Losses
1010
Inputs.InputFrictionCoefficient Kfr_cold;
1111
Inputs.InputFrictionCoefficient Kfr_hot;
12-
Inputs.InputTemperature nominal_cold_side_temperature_rise; // water reference temperature rise based on H&MB diagramm values
13-
Inputs.InputTemperature nominal_hot_side_temperature_drop; // flue gases reference temperature rise based on H&MB diagramm values
12+
13+
// Cp estimation temperatures: estimated temperature differences for both the hot and cold fluids
14+
parameter Boolean nominal_DT_default = true;
15+
Units.Temperature maximum_achiveable_temperature_difference;
16+
Units.Temperature nominal_cold_side_temperature_rise;
17+
Units.Temperature nominal_hot_side_temperature_drop;
1418

1519
// Heating
1620
parameter String QCp_max_side = "undefined";// On fuel heater, QCp_hot may be close to QCp_cold
@@ -126,6 +130,15 @@ equation
126130
assert(pinch > 0, "A negative pinch is reached", AssertionLevel.warning); // Ensure a positive pinch
127131
assert(pinch > 1 or pinch < 0, "A very low pinch (<1) is reached", AssertionLevel.warning); // Ensure a sufficient pinch
128132

133+
// Nominal temperature differences
134+
// The default temperature rise and drop are equal to the maximum achievable temperature difference
135+
// Maximum achievable temperature difference for both the hot and cold sides = hot_side.T_in - cold_side.T_in
136+
maximum_achiveable_temperature_difference = hot_side.T_in - cold_side.T_in;
137+
if nominal_DT_default then
138+
nominal_cold_side_temperature_rise = maximum_achiveable_temperature_difference;
139+
nominal_hot_side_temperature_drop = maximum_achiveable_temperature_difference;
140+
end if;
141+
129142
Cp_cold_min = FuelMedium.specificHeatCapacityCp(cold_side.state_in); // fuel steam inlet Cp
130143
state_cold_out = FuelMedium.setState_pTX(cold_side.P_in, cold_side.T_in + nominal_cold_side_temperature_rise,cold_side.Xi);
131144
Cp_cold_max= FuelMedium.specificHeatCapacityCp(state_cold_out); // fuel steam outlet Cp

MetroscopeModelingLibrary/Partial/HeatExchangers/WaterFlueGasesMonophasicHX.mo

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,12 @@ partial model WaterFlueGasesMonophasicHX
88
Inputs.InputHeatExchangeCoefficient Kth;
99
Inputs.InputFrictionCoefficient Kfr_cold;
1010
Inputs.InputFrictionCoefficient Kfr_hot;
11-
Inputs.InputTemperature nominal_cold_side_temperature_rise; // water reference temperature rise based on H&MB diagramm values
12-
Inputs.InputTemperature nominal_hot_side_temperature_drop; // flue gases reference temperature rise based on H&MB diagramm values
11+
12+
// Cp estimation temperatures: estimated temperature differences for both the hot and cold fluids
13+
parameter Boolean nominal_DT_default = true;
14+
Units.Temperature maximum_achiveable_temperature_difference;
15+
Units.Temperature nominal_cold_side_temperature_rise;
16+
Units.Temperature nominal_hot_side_temperature_drop;
1317

1418
parameter String QCp_max_side = "hot";
1519
// Warning :
@@ -132,8 +136,17 @@ equation
132136
assert(pinch > 1 or pinch < 0, "A very low pinch (<1) is reached", AssertionLevel.warning); // Ensure a sufficient pinch
133137

134138
// For each medium, an average Cp is calculated beteween Cp inlet and an estimation of Cp outlet.
135-
// The estimation of the Cp outlet is calculated for an outlet temperature based on the nominal temperature rise of the H&MB diagram.
136-
// For more details about this hypothesis, please refer the Economiser page of the MML documentation.
139+
// The estimation of the Cp outlet is calculated for an outlet temperature based on the nominal temperature rise.
140+
// For more details about this hypothesis, please refer the WaterFlueGasesMonophasicHX page of the MML documentation.
141+
142+
// Nominal temperature differences
143+
// The default temperature rise and drop are equal to the maximum achievable temperature difference
144+
// Maximum achievable temperature difference for both the hot and cold sides = hot_side.T_in - cold_side.T_in
145+
maximum_achiveable_temperature_difference = hot_side.T_in - cold_side.T_in;
146+
if nominal_DT_default then
147+
nominal_cold_side_temperature_rise = hot_side.T_in - cold_side.T_in;
148+
nominal_hot_side_temperature_drop = hot_side.T_in - cold_side.T_in;
149+
end if;
137150

138151
Cp_cold_min =MetroscopeModelingLibrary.Utilities.Media.WaterSteamMedium.specificHeatCapacityCp(cold_side.state_in); // water steam inlet Cp
139152
state_cold_out =MetroscopeModelingLibrary.Utilities.Media.WaterSteamMedium.setState_pTX(

MetroscopeModelingLibrary/Tests/Multifluid/HeatExchangers/Economiser_direct.mo

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,10 @@ model Economiser_direct
1414
// Parameters
1515
parameter String QCp_max_side = "hot";
1616
parameter Utilities.Units.Area S = 10000;
17-
parameter Utilities.Units.HeatExchangeCoefficient Kth = 44.5;
18-
parameter Utilities.Units.FrictionCoefficient Kfr_hot = 0.0078;
17+
parameter Utilities.Units.HeatExchangeCoefficient Kth = 43.2;
18+
parameter Utilities.Units.FrictionCoefficient Kfr_hot = 0.0079;
1919
parameter Utilities.Units.FrictionCoefficient Kfr_cold = 5840;
2020

21-
parameter Utilities.Units.Temperature nominal_cold_side_temperature_rise = 43;
22-
parameter Utilities.Units.Temperature nominal_hot_side_temperature_drop = 27;
2321

2422
.MetroscopeModelingLibrary.WaterSteam.BoundaryConditions.Source cold_source annotation (Placement(transformation(
2523
extent = {{10,-10},{-10,10}},
@@ -31,7 +29,8 @@ model Economiser_direct
3129
origin={-66,40})));
3230
MetroscopeModelingLibrary.FlueGases.BoundaryConditions.Source hot_source annotation (Placement(transformation(extent={{-76,-10},{-56,10}})));
3331
MetroscopeModelingLibrary.FlueGases.BoundaryConditions.Sink hot_sink annotation (Placement(transformation(extent={{36,-10},{56,10}})));
34-
MultiFluid.HeatExchangers.Economiser economiser annotation (Placement(transformation(extent={{-20,-10},{0,10}})));
32+
MultiFluid.HeatExchangers.Economiser economiser(nominal_DT_default=true)
33+
annotation (Placement(transformation(extent={{-20,-10},{0,10}})));
3534
equation
3635

3736
// Boundary Conditions
@@ -50,8 +49,7 @@ equation
5049
economiser.Kth = Kth;
5150
economiser.Kfr_hot = Kfr_hot;
5251
economiser.Kfr_cold = Kfr_cold;
53-
economiser.nominal_cold_side_temperature_rise = nominal_cold_side_temperature_rise;
54-
economiser.nominal_hot_side_temperature_drop = nominal_hot_side_temperature_drop;
52+
5553

5654
connect(economiser.C_hot_out, hot_sink.C_in) annotation (Line(
5755
points={{0,0},{41,0}},

MetroscopeModelingLibrary/Tests/Multifluid/HeatExchangers/Economiser_reverse.mo

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@ model Economiser_reverse
1414
// Parameters
1515
parameter String QCp_max_side = "hot";
1616
parameter Utilities.Units.Area S = 10000;
17-
parameter Utilities.Units.Temperature nominal_cold_side_temperature_rise = 43;
18-
parameter Utilities.Units.Temperature nominal_hot_side_temperature_drop = 27;
1917

2018
// Calibrated parameters
2119
output Utilities.Units.HeatExchangeCoefficient Kth;
@@ -54,8 +52,6 @@ equation
5452

5553
// Parameters
5654
economiser.S = S;
57-
economiser.nominal_cold_side_temperature_rise = nominal_cold_side_temperature_rise;
58-
economiser.nominal_hot_side_temperature_drop = nominal_hot_side_temperature_drop;
5955

6056
// Inputs for calibration
6157
T_cold_out_sensor.T_degC = T_cold_out;
@@ -122,5 +118,6 @@ equation
122118
pattern = LinePattern.None,
123119
fillPattern = FillPattern.Solid,
124120
points = {{-58,-14},{-2,-40},{-58,-74},{-58,-14}})}), Diagram(
125-
coordinateSystem(preserveAspectRatio = false, extent={{-100,-100},{100,100}})));
121+
coordinateSystem(preserveAspectRatio = false, extent={{-100,-100},{100,100}})),
122+
experiment(Interval=0.1, __Dymola_Algorithm="Dassl"));
126123
end Economiser_reverse;

MetroscopeModelingLibrary/Tests/Multifluid/HeatExchangers/FuelHeater_direct.mo

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,10 @@ model FuelHeater_direct
1515
// Parameters
1616
parameter String QCp_max_side = "undefined"; // On fuel heater, QCp_hot may be close to QCp_cold
1717
parameter Units.Area S = 10;
18-
parameter Units.Temperature nominal_cold_side_temperature_rise = 20;
19-
parameter Units.Temperature nominal_hot_side_temperature_drop = 10;
2018

21-
parameter Units.HeatExchangeCoefficient Kth = 8740;
19+
parameter Units.HeatExchangeCoefficient Kth = 1357;
2220
parameter Units.FrictionCoefficient Kfr_hot = 0;
23-
parameter Units.FrictionCoefficient Kfr_cold = 1;
21+
parameter Units.FrictionCoefficient Kfr_cold = 0;
2422

2523
MetroscopeModelingLibrary.Fuel.BoundaryConditions.Source cold_source annotation (Placement(transformation(extent={{-74,-10},{-54,10}})));
2624
MetroscopeModelingLibrary.Fuel.BoundaryConditions.Sink cold_sink annotation (Placement(transformation(extent={{54,-10},{74,10}})));
@@ -45,8 +43,6 @@ equation
4543
cold_source.Xi_out = {0.92,0.048,0.005,0.002,0.015,0.01};
4644

4745
fuelHeater.S = S;
48-
fuelHeater.nominal_cold_side_temperature_rise = nominal_cold_side_temperature_rise;
49-
fuelHeater.nominal_hot_side_temperature_drop = nominal_hot_side_temperature_drop;
5046

5147
fuelHeater.Kth = Kth;
5248
fuelHeater.Kfr_hot = Kfr_hot;

MetroscopeModelingLibrary/Tests/Multifluid/HeatExchangers/FuelHeater_reverse.mo

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@ model FuelHeater_reverse
1313
// Parameters
1414
parameter String QCp_max_side = "undefined"; // On fuel heater, QCp_hot may be close to QCp_cold
1515
parameter Utilities.Units.Area S=100;
16-
parameter Utilities.Units.Temperature nominal_cold_side_temperature_rise=20;
17-
parameter Utilities.Units.Temperature nominal_hot_side_temperature_drop=10;
1816

1917
// Calibrated parameters
2018
output Utilities.Units.HeatExchangeCoefficient Kth;
@@ -61,10 +59,8 @@ equation
6159

6260
// Parameters
6361
fuelHeater.S = S;
64-
fuelHeater.nominal_cold_side_temperature_rise = nominal_cold_side_temperature_rise;
65-
fuelHeater.nominal_hot_side_temperature_drop = nominal_hot_side_temperature_drop;
6662

67-
// Inputs for calibration
63+
// Inputs for calibration
6864
T_hot_out_sensor.T_degC = T_hot_out;
6965
//cold_sink.T_in = T_cold_out +273.15;
7066
P_cold_out_sensor.P_barA = P_cold_out;

MetroscopeModelingLibrary/Tests/Multifluid/HeatExchangers/Superheater_direct.mo

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,10 @@ model Superheater_direct
1515
parameter String QCp_max_side = "hot";
1616
parameter Utilities.Units.Area S = 10000;
1717
parameter Utilities.Units.FrictionCoefficient Kfr_hot = 0;
18-
parameter Utilities.Units.Temperature nominal_cold_side_temperature_rise = 105;
19-
parameter Utilities.Units.Temperature nominal_hot_side_temperature_drop = 35;
2018

2119
// Calibrated parameters
22-
parameter Utilities.Units.HeatExchangeCoefficient Kth = 22.659254;
23-
parameter Utilities.Units.FrictionCoefficient Kfr_cold = 351.14395;
20+
parameter Utilities.Units.HeatExchangeCoefficient Kth = 23.04;
21+
parameter Utilities.Units.FrictionCoefficient Kfr_cold = 351.82;
2422

2523
.MetroscopeModelingLibrary.WaterSteam.BoundaryConditions.Source cold_source annotation (Placement(transformation(
2624
extent = {{10,-10},{-10,10}},
@@ -47,8 +45,6 @@ equation
4745
superheater.Kth = Kth;
4846
superheater.Kfr_hot = Kfr_hot;
4947
superheater.Kfr_cold = Kfr_cold;
50-
superheater.nominal_cold_side_temperature_rise = nominal_cold_side_temperature_rise;
51-
superheater.nominal_hot_side_temperature_drop = nominal_hot_side_temperature_drop;
5248

5349
connect(superheater.C_hot_in, hot_source.C_out) annotation (Line(
5450
points={{-10,0},{-61,0}},

0 commit comments

Comments
 (0)