| 1 | within Modelica.Thermal; |
|---|
| 2 | |
|---|
| 3 | |
|---|
| 4 | package FluidHeatFlow |
|---|
| 5 | "Simple components for 1-dimensional incompressible thermo-fluid flow models" |
|---|
| 6 | extends Modelica.Icons.Library2; |
|---|
| 7 | annotation ( |
|---|
| 8 | version="1.6.6", versionDate="2007-11-12", |
|---|
| 9 | Documentation(info="<HTML> |
|---|
| 10 | This package contains very simple-to-use components to model coolant flows as needed to simulate cooling e.g. of electric machines: |
|---|
| 11 | <ul> |
|---|
| 12 | <li>Components: components like different types of pipe models</li> |
|---|
| 13 | <li>Examples: some test examples</li> |
|---|
| 14 | <li>Interfaces: definition of connectors and partial models |
|---|
| 15 | (containing the core thermodynamic equations)</li> |
|---|
| 16 | <li>Media: definition of media properties</li> |
|---|
| 17 | <li>Sensors: various sensors for pressure, temperature, volume and enthalpy flow</li> |
|---|
| 18 | <li>Sources: various flow sources</li> |
|---|
| 19 | </ul> |
|---|
| 20 | <b>Variables used in connectors:</b> |
|---|
| 21 | <ul> |
|---|
| 22 | <li>Pressure p</li> |
|---|
| 23 | <li>flow MassFlowRate m_flow</li> |
|---|
| 24 | <li>SpecificEnthalpy h</li> |
|---|
| 25 | <li>flow EnthalpyFlowRate H_flow</li> |
|---|
| 26 | </ul> |
|---|
| 27 | EnthalpyFlowRate means the Enthalpy = cp<sub>constant</sub> * m * T that is carried by the medium's flow.<br><br> |
|---|
| 28 | <b>Limitations and assumptions:</b> |
|---|
| 29 | <ul> |
|---|
| 30 | <li>Splitting and mixing of coolant flows (media with the same cp) is possible.</li> |
|---|
| 31 | <li>Reversing the direction of flow is possible.</li> |
|---|
| 32 | <li>The medium is considered to be incompressible.</li> |
|---|
| 33 | <li>No mixtures of media is taken into consideration.</li> |
|---|
| 34 | <li>The medium may not change its phase.</li> |
|---|
| 35 | <li>Medium properties are kept constant.</li> |
|---|
| 36 | <li>Pressure changes are only due to pressure drop and geodetic height differnence rho*g*h (if h > 0).</li> |
|---|
| 37 | <li>A user-defined part (0..1) of the friction losses (V_flow*dp) are fed to the medium.</li> |
|---|
| 38 | <li><b>Note:</b> Connected flowPorts have the same temperature (mixing temperature)!<br> |
|---|
| 39 | Since mixing may occur, the outlet temperature may be different from the connector's temperature.<br> |
|---|
| 40 | Outlet temperature is defined by variable T of the corresponding component.</li> |
|---|
| 41 | </ul> |
|---|
| 42 | <b>Further development:</b> |
|---|
| 43 | <ul> |
|---|
| 44 | <li>Additional components like tanks (if needed)</li> |
|---|
| 45 | </ul> |
|---|
| 46 | <dl> |
|---|
| 47 | <dt><b>Main Authors:</b></dt> |
|---|
| 48 | <dd> |
|---|
| 49 | <p> |
|---|
| 50 | <a href=\"http://www.haumer.at/\">Anton Haumer</a><br> |
|---|
| 51 | Technical Consulting & Electrical Engineering<br> |
|---|
| 52 | A-3423 St.Andrae-Woerdern, Austria<br> |
|---|
| 53 | email: <a href=\"mailto:a.haumer@haumer.at\">a.haumer@haumer.at</a> |
|---|
| 54 | </p> |
|---|
| 55 | <p> |
|---|
| 56 | Dr.Christian Kral<br> |
|---|
| 57 | Österreichisches Forschungs- und Prüfzentrum Arsenal Ges.m.b.H.<br> |
|---|
| 58 | <a href=\"http://www.arsenal.ac.at/\">arsenal research</a><br> |
|---|
| 59 | Giefinggasse 2<br> |
|---|
| 60 | A-1210 Vienna, Austria |
|---|
| 61 | </p> |
|---|
| 62 | </dd> |
|---|
| 63 | </dl> |
|---|
| 64 | <p> |
|---|
| 65 | Copyright © 1998-2008, Modelica Association, Anton Haumer and arsenal research. |
|---|
| 66 | </p> |
|---|
| 67 | <p> |
|---|
| 68 | <i>The Modelica package is <b>free</b> software; it can be redistributed and/or modified |
|---|
| 69 | under the terms of the <b>Modelica license</b>, see the license conditions |
|---|
| 70 | and the accompanying <b>disclaimer</b> |
|---|
| 71 | <a href=\"Modelica://Modelica.UsersGuide.ModelicaLicense\">here</a>.</i> |
|---|
| 72 | </p> |
|---|
| 73 | </HTML>", revisions="<HTML> |
|---|
| 74 | <ul> |
|---|
| 75 | <li> v1.00 2005/02/01 Anton Haumer<br> |
|---|
| 76 | first stable official release</li> |
|---|
| 77 | <li> v1.10 2005/02/15 Anton Haumer<br> |
|---|
| 78 | reorganisation of the package</li> |
|---|
| 79 | <li> v1.11 2005/02/18 Anton Haumer<br> |
|---|
| 80 | corrected usage of cv and cp</li> |
|---|
| 81 | <li> v1.20 Beta 2005/02/18 Anton Haumer<br> |
|---|
| 82 | introduced geodetic height in Components.Pipes<br> |
|---|
| 83 | <i>new models: Components.Valve, Sources.IdealPump</i></li> |
|---|
| 84 | <li> v1.30 Beta 2005/06/02 Anton Haumer<br> |
|---|
| 85 | friction losses are fed to medium</li> |
|---|
| 86 | <li> v1.31 Beta 2005/06/04 Anton Haumer<br> |
|---|
| 87 | <i>new example: PumpAndValve</i><br> |
|---|
| 88 | <i>new example: PumpDropOut</i></li> |
|---|
| 89 | <li> v1.33 Beta 2005/06/07 Anton Haumer<br> |
|---|
| 90 | corrected usage of simpleFlow</li> |
|---|
| 91 | <li> v1.40 2005/06/13 Anton Haumer<br> |
|---|
| 92 | stable release</li> |
|---|
| 93 | <li> v1.42 Beta 2005/06/18 Anton Haumer<br> |
|---|
| 94 | <i>new test example: ParallelPumpDropOut</i></li> |
|---|
| 95 | <li> v1.43 Beta 2005/06/20 Anton Haumer<br> |
|---|
| 96 | Test of mixing / semiLinear<br> |
|---|
| 97 | <i>new test example: OneMass</i><br> |
|---|
| 98 | <i>new test example: TwoMass</i></li> |
|---|
| 99 | <li> v1.50 2005/09/07 Anton Haumer<br> |
|---|
| 100 | semiLinear works fine</li> |
|---|
| 101 | <li> v1.60 2007/01/23 Anton Haumer<br> |
|---|
| 102 | new parameter tapT defining Temperature of heatPort </li> |
|---|
| 103 | <li> v1.6.1 2007/08/12 Anton Haumer<br> |
|---|
| 104 | improved documentation<br> |
|---|
| 105 | removed type TemperatureDifference since this is defined in Modelica.SIunits</li> |
|---|
| 106 | <li> v1.6.2 2007/08/20 Anton Haumer<br> |
|---|
| 107 | improved documentation</li> |
|---|
| 108 | <li> v1.6.3 2007/08/21 Anton Haumer<br> |
|---|
| 109 | improved documentation</li> |
|---|
| 110 | <li> v1.6.4 2007/08/24 Anton Haumer<br> |
|---|
| 111 | removed redeclare type SignalType</li> |
|---|
| 112 | <li> v1.6.5 2007/08/26 Anton Haumer<br> |
|---|
| 113 | fixed unit bug in SimpleFriction</li> |
|---|
| 114 | <li> v1.6.6 2007/11/13 Anton Haumer<br> |
|---|
| 115 | replaced all nonSIunits<br> |
|---|
| 116 | some renaming to be more concise</li> |
|---|
| 117 | </ul> |
|---|
| 118 | </HTML> |
|---|
| 119 | "), Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{100, |
|---|
| 120 | 100}}), graphics={ |
|---|
| 121 | Polygon( |
|---|
| 122 | points={{-80,10},{-60,-10},{-80,-30},{-20,-30},{0,-10},{-20,10},{-80, |
|---|
| 123 | 10}}, |
|---|
| 124 | lineColor={0,128,255}, |
|---|
| 125 | fillColor={0,128,255}, |
|---|
| 126 | fillPattern=FillPattern.Solid), |
|---|
| 127 | Polygon( |
|---|
| 128 | points={{-40,-90},{-20,-70},{0,-90},{0,-50},{-20,-30},{-40,-50},{-40, |
|---|
| 129 | -90}}, |
|---|
| 130 | lineColor={255,0,0}, |
|---|
| 131 | fillColor={255,0,0}, |
|---|
| 132 | fillPattern=FillPattern.Solid), |
|---|
| 133 | Polygon( |
|---|
| 134 | points={{-20,10},{0,-10},{-20,-30},{40,-30},{60,-10},{40,10},{-20,10}}, |
|---|
| 135 | |
|---|
| 136 | lineColor={255,128,0}, |
|---|
| 137 | fillColor={255,128,0}, |
|---|
| 138 | fillPattern=FillPattern.Solid)})); |
|---|
| 139 | |
|---|
| 140 | package Examples |
|---|
| 141 | "Examples that demonstrate the usage of the FluidHeatFlow components" |
|---|
| 142 | extends Modelica.Icons.Library2; |
|---|
| 143 | annotation (Documentation(info="<HTML> |
|---|
| 144 | This package contains test examples: |
|---|
| 145 | <ul> |
|---|
| 146 | <li>1.SimpleCooling: heat is dissipated through a media flow</li> |
|---|
| 147 | <li>2.ParallelCooling: two heat sources dissipate through merged media flows</li> |
|---|
| 148 | <li>3.IndirectCooling: heat is disspated through two cooling cycles</li> |
|---|
| 149 | <li>4.PumpAndValve: demonstrates usage of an IdealPump and a Valve</li> |
|---|
| 150 | <li>5.PumpDropOut: demonstrates shutdown and restart of a pump</li> |
|---|
| 151 | <li>6.ParallelPumpDropOut: demonstrates shutdown and restart of a pump in a parallel circuit</li> |
|---|
| 152 | <li>7.OneMass: cooling of a mass (thermal capacity) by a coolant flow</li> |
|---|
| 153 | <li>8.TwoMass: cooling of two masses (thermal capacities) by two parallel coolant flows</li> |
|---|
| 154 | </ul> |
|---|
| 155 | <dl> |
|---|
| 156 | <dt><b>Main Authors:</b></dt> |
|---|
| 157 | <dd> |
|---|
| 158 | <p> |
|---|
| 159 | <a href=\"http://www.haumer.at/\">Anton Haumer</a><br> |
|---|
| 160 | Technical Consulting & Electrical Engineering<br> |
|---|
| 161 | A-3423 St.Andrae-Woerdern, Austria<br> |
|---|
| 162 | email: <a href=\"mailto:a.haumer@haumer.at\">a.haumer@haumer.at</a> |
|---|
| 163 | </p> |
|---|
| 164 | <p> |
|---|
| 165 | Dr.Christian Kral<br> |
|---|
| 166 | Österreichisches Forschungs- und Prüfzentrum Arsenal Ges.m.b.H.<br> |
|---|
| 167 | <a href=\"http://www.arsenal.ac.at/\">arsenal research</a><br> |
|---|
| 168 | Giefinggasse 2<br> |
|---|
| 169 | A-1210 Vienna, Austria |
|---|
| 170 | </p> |
|---|
| 171 | </dd> |
|---|
| 172 | </dl> |
|---|
| 173 | <p> |
|---|
| 174 | Copyright © 1998-2008, Modelica Association, Anton Haumer and arsenal research. |
|---|
| 175 | </p> |
|---|
| 176 | <p> |
|---|
| 177 | <i>The Modelica package is <b>free</b> software; it can be redistributed and/or modified |
|---|
| 178 | under the terms of the <b>Modelica license</b>, see the license conditions |
|---|
| 179 | and the accompanying <b>disclaimer</b> |
|---|
| 180 | <a href=\"Modelica://Modelica.UsersGuide.ModelicaLicense\">here</a>.</i> |
|---|
| 181 | </p> |
|---|
| 182 | </HTML>", revisions="<HTML> |
|---|
| 183 | <ul> |
|---|
| 184 | <li> v1.00 2005/02/01 Anton Haumer<br> |
|---|
| 185 | first stable official release</li> |
|---|
| 186 | <li> v1.31 Beta 2005/06/04 Anton Haumer<br> |
|---|
| 187 | <i>new example: PumpAndValve</i><br> |
|---|
| 188 | <i>new example: PumpDropOut</i></li> |
|---|
| 189 | <li> v1.42 Beta 2005/06/18 Anton Haumer<br> |
|---|
| 190 | <i>new test example: ParallelPumpDropOut</i></li> |
|---|
| 191 | <li> v1.43 Beta 2005/06/20 Anton Haumer<br> |
|---|
| 192 | Test of mixing / semiLinear<br> |
|---|
| 193 | <i>new test example: OneMass</i><br> |
|---|
| 194 | <i>new test example: TwoMass</i></li> |
|---|
| 195 | </ul> |
|---|
| 196 | </HTML> |
|---|
| 197 | "), Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{100, |
|---|
| 198 | 100}}), graphics={Ellipse(extent={{-60,10},{40,-90}}, lineColor={ |
|---|
| 199 | 135,135,135}), Polygon( |
|---|
| 200 | points={{-30,-12},{-30,-68},{28,-40},{-30,-12}}, |
|---|
| 201 | lineColor={135,135,135}, |
|---|
| 202 | fillColor={135,135,135}, |
|---|
| 203 | fillPattern=FillPattern.Solid)})); |
|---|
| 204 | |
|---|
| 205 | model SimpleCooling "Example: simple cooling circuit" |
|---|
| 206 | extends Modelica.Icons.Example; |
|---|
| 207 | annotation (Documentation(info="<HTML> |
|---|
| 208 | <p> |
|---|
| 209 | 1st test example: SimpleCooling |
|---|
| 210 | </p> |
|---|
| 211 | A prescribed heat source dissipates its heat through a thermal conductor to a coolant flow. The coolant flow is taken from an ambient and driven by a pump with prescribed mass flow.<br> |
|---|
| 212 | <b>Results</b>:<br> |
|---|
| 213 | <table> |
|---|
| 214 | <tr> |
|---|
| 215 | <td valign=\"top\"><b>output</b></td> |
|---|
| 216 | <td valign=\"top\"><b>explanation</b></td> |
|---|
| 217 | <td valign=\"top\"><b>formula</b></td> |
|---|
| 218 | <td valign=\"top\"><b>actual steady-state value</b></td> |
|---|
| 219 | </tr> |
|---|
| 220 | <tr> |
|---|
| 221 | <td valign=\"top\">dTSource</td> |
|---|
| 222 | <td valign=\"top\">Source over Ambient</td> |
|---|
| 223 | <td valign=\"top\">dtCoolant + dtToPipe</td> |
|---|
| 224 | <td valign=\"top\">20 K</td> |
|---|
| 225 | </tr> |
|---|
| 226 | <tr> |
|---|
| 227 | <td valign=\"top\">dTtoPipe</td> |
|---|
| 228 | <td valign=\"top\">Source over Coolant</td> |
|---|
| 229 | <td valign=\"top\">Losses / ThermalConductor.G</td> |
|---|
| 230 | <td valign=\"top\">10 K</td> |
|---|
| 231 | </tr> |
|---|
| 232 | <tr> |
|---|
| 233 | <td valign=\"top\">dTCoolant</td> |
|---|
| 234 | <td valign=\"top\">Coolant's temperature increase</td> |
|---|
| 235 | <td valign=\"top\">Losses * cp * massFlow</td> |
|---|
| 236 | <td valign=\"top\">10 K</td> |
|---|
| 237 | </tr> |
|---|
| 238 | </table> |
|---|
| 239 | </HTML>"), Diagram(coordinateSystem(preserveAspectRatio=true, extent={{-100, |
|---|
| 240 | -100},{100,100}}), graphics), |
|---|
| 241 | experiment(StopTime=1.0)); |
|---|
| 242 | parameter FluidHeatFlow.Media.Medium medium=FluidHeatFlow.Media.Medium() |
|---|
| 243 | "Cooling medium" |
|---|
| 244 | annotation(__Dymola_choicesAllMatching=true); |
|---|
| 245 | parameter Modelica.SIunits.Temperature TAmb(displayUnit="degC")=293.15 |
|---|
| 246 | "Ambient temperature"; |
|---|
| 247 | output Modelica.SIunits.TemperatureDifference dTSource= |
|---|
| 248 | prescribedHeatFlow.port.T-TAmb "Source over Ambient"; |
|---|
| 249 | output Modelica.SIunits.TemperatureDifference dTtoPipe=prescribedHeatFlow.port.T-pipe.heatPort.T |
|---|
| 250 | "Source over Coolant"; |
|---|
| 251 | output Modelica.SIunits.TemperatureDifference dTCoolant=pipe.dT |
|---|
| 252 | "Coolant's temperature increase"; |
|---|
| 253 | FluidHeatFlow.Sources.Ambient ambient1(constantAmbientTemperature=TAmb, medium=medium) |
|---|
| 254 | annotation (Placement(transformation(extent={{-60,-10},{-80,10}}, |
|---|
| 255 | rotation=0))); |
|---|
| 256 | Sources.VolumeFlow pump( |
|---|
| 257 | medium=medium, |
|---|
| 258 | m=0, |
|---|
| 259 | T0=TAmb, |
|---|
| 260 | useVolumeFlowInput=true) |
|---|
| 261 | annotation (Placement(transformation(extent={{-40,-10},{-20,10}}, |
|---|
| 262 | rotation=0))); |
|---|
| 263 | FluidHeatFlow.Components.HeatedPipe pipe( |
|---|
| 264 | medium=medium, |
|---|
| 265 | m=0.1, |
|---|
| 266 | T0=TAmb) |
|---|
| 267 | annotation (Placement(transformation(extent={{0,-10},{20,10}}, rotation= |
|---|
| 268 | 0))); |
|---|
| 269 | FluidHeatFlow.Sources.Ambient ambient2(constantAmbientTemperature=TAmb, medium=medium) |
|---|
| 270 | annotation (Placement(transformation(extent={{40,-10},{60,10}}, |
|---|
| 271 | rotation=0))); |
|---|
| 272 | Modelica.Thermal.HeatTransfer.Components.HeatCapacitor heatCapacitor( |
|---|
| 273 | T(start=TAmb), C=0.1) |
|---|
| 274 | annotation (Placement(transformation( |
|---|
| 275 | origin={40,-50}, |
|---|
| 276 | extent={{-10,10},{10,-10}}, |
|---|
| 277 | rotation=90))); |
|---|
| 278 | Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow |
|---|
| 279 | prescribedHeatFlow |
|---|
| 280 | annotation (Placement(transformation(extent={{-30,-40},{-10,-60}}, |
|---|
| 281 | rotation=0))); |
|---|
| 282 | Modelica.Blocks.Sources.Constant volumeFlow(k=1) |
|---|
| 283 | annotation (Placement(transformation(extent={{-60,10},{-40,30}}, |
|---|
| 284 | rotation=0))); |
|---|
| 285 | Modelica.Blocks.Sources.Constant heatFlow(k=10) |
|---|
| 286 | annotation (Placement(transformation(extent={{-60,-60},{-40,-40}}, |
|---|
| 287 | rotation=0))); |
|---|
| 288 | Modelica.Thermal.HeatTransfer.Components.Convection convection |
|---|
| 289 | annotation (Placement(transformation( |
|---|
| 290 | origin={10,-30}, |
|---|
| 291 | extent={{-10,-10},{10,10}}, |
|---|
| 292 | rotation=90))); |
|---|
| 293 | Modelica.Blocks.Sources.Constant thermalConductance(k=1) |
|---|
| 294 | annotation (Placement(transformation(extent={{-30,-40},{-10,-20}}, |
|---|
| 295 | rotation=0))); |
|---|
| 296 | equation |
|---|
| 297 | connect(ambient1.flowPort, pump.flowPort_a) |
|---|
| 298 | annotation (Line(points={{-60,0},{-40,0}}, color={255,0,0})); |
|---|
| 299 | connect(pump.flowPort_b, pipe.flowPort_a) |
|---|
| 300 | annotation (Line(points={{-20,0},{0,0}}, color={255,0,0})); |
|---|
| 301 | connect(pipe.flowPort_b, ambient2.flowPort) |
|---|
| 302 | annotation (Line(points={{20,0},{40,0}}, color={255,0,0})); |
|---|
| 303 | connect(heatFlow.y, prescribedHeatFlow.Q_flow) annotation (Line(points={ |
|---|
| 304 | {-39,-50},{-30,-50}}, color={0,0,255})); |
|---|
| 305 | connect(convection.solid, prescribedHeatFlow.port) annotation (Line( |
|---|
| 306 | points={{10,-40},{10,-50},{-10,-50}}, color={191,0,0})); |
|---|
| 307 | connect(convection.solid, heatCapacitor.port) annotation (Line(points={ |
|---|
| 308 | {10,-40},{10,-50},{30,-50}}, color={191,0,0})); |
|---|
| 309 | connect(pipe.heatPort, convection.fluid) annotation (Line(points={{10, |
|---|
| 310 | -10},{10,-20}}, color={191,0,0})); |
|---|
| 311 | connect(thermalConductance.y, convection.Gc) |
|---|
| 312 | annotation (Line(points={{-9,-30},{0,-30}}, |
|---|
| 313 | color={0,0,127})); |
|---|
| 314 | connect(volumeFlow.y, pump.volumeFlow) annotation (Line( |
|---|
| 315 | points={{-39,20},{-30,20},{-30,10}}, |
|---|
| 316 | color={0,0,127}, |
|---|
| 317 | smooth=Smooth.None)); |
|---|
| 318 | end SimpleCooling; |
|---|
| 319 | |
|---|
| 320 | model ParallelCooling "Example: coolig circuit with parallel branches" |
|---|
| 321 | extends Modelica.Icons.Example; |
|---|
| 322 | annotation (Documentation(info="<HTML> |
|---|
| 323 | <p> |
|---|
| 324 | 2nd test example: ParallelCooling |
|---|
| 325 | </p> |
|---|
| 326 | Two prescribed heat sources dissipate their heat through thermal conductors to coolant flows. The coolant flow is taken from an ambient and driven by a pump with prescribed mass flow, then splitted into two coolant flows connected to the two heat sources, and afterwards merged. Splitting of coolant flows is determined by pressure drop characteristic of the two pipes.<br> |
|---|
| 327 | <b>Results</b>:<br> |
|---|
| 328 | <table> |
|---|
| 329 | <tr> |
|---|
| 330 | <td valign=\"top\"><b>output</b></td> |
|---|
| 331 | <td valign=\"top\"><b>explanation</b></td> |
|---|
| 332 | <td valign=\"top\"><b>formula</b></td> |
|---|
| 333 | <td valign=\"top\"><b>actual steady-state value</b></td> |
|---|
| 334 | </tr> |
|---|
| 335 | <tr> |
|---|
| 336 | <td valign=\"top\">dTSource1</td> |
|---|
| 337 | <td valign=\"top\">Source1 over Ambient</td> |
|---|
| 338 | <td valign=\"top\">dTCoolant1 + dTtoPipe1</td> |
|---|
| 339 | <td valign=\"top\">15 K</td> |
|---|
| 340 | </tr> |
|---|
| 341 | <tr> |
|---|
| 342 | <td valign=\"top\">dTtoPipe1</td> |
|---|
| 343 | <td valign=\"top\">Source1 over Coolant1</td> |
|---|
| 344 | <td valign=\"top\">Losses1 / ThermalConductor1.G</td> |
|---|
| 345 | <td valign=\"top\"> 5 K</td> |
|---|
| 346 | </tr> |
|---|
| 347 | <tr> |
|---|
| 348 | <td valign=\"top\">dTCoolant1</td> |
|---|
| 349 | <td valign=\"top\">Coolant's temperature increase</td> |
|---|
| 350 | <td valign=\"top\">Losses * cp * totalMassFlow/2</td> |
|---|
| 351 | <td valign=\"top\">10 K</td> |
|---|
| 352 | </tr> |
|---|
| 353 | <tr> |
|---|
| 354 | <td valign=\"top\">dTSource2</td> |
|---|
| 355 | <td valign=\"top\">Source2 over Ambient</td> |
|---|
| 356 | <td valign=\"top\">dTCoolant2 + dTtoPipe2</td> |
|---|
| 357 | <td valign=\"top\">30 K</td> |
|---|
| 358 | </tr> |
|---|
| 359 | <tr> |
|---|
| 360 | <td valign=\"top\">dTtoPipe2</td> |
|---|
| 361 | <td valign=\"top\">Source2 over Coolant2</td> |
|---|
| 362 | <td valign=\"top\">Losses2 / ThermalConductor2.G</td> |
|---|
| 363 | <td valign=\"top\">10 K</td> |
|---|
| 364 | </tr> |
|---|
| 365 | <tr> |
|---|
| 366 | <td valign=\"top\">dTCoolant2</td> |
|---|
| 367 | <td valign=\"top\">Coolant's temperature increase</td> |
|---|
| 368 | <td valign=\"top\">Losses * cp * totalMassFlow/2</td> |
|---|
| 369 | <td valign=\"top\">20 K</td> |
|---|
| 370 | </tr> |
|---|
| 371 | <tr> |
|---|
| 372 | <td valign=\"top\">dTmixedCoolant</td> |
|---|
| 373 | <td valign=\"top\">mixed Coolant's temperature increase</td> |
|---|
| 374 | <td valign=\"top\">(dTCoolant1+dTCoolant2)/2</td> |
|---|
| 375 | <td valign=\"top\">15 K</td> |
|---|
| 376 | </tr> |
|---|
| 377 | </table> |
|---|
| 378 | </HTML>"), Diagram(coordinateSystem(preserveAspectRatio=true, extent={{-100, |
|---|
| 379 | -100},{100,100}}), graphics), |
|---|
| 380 | experiment(StopTime=1.0)); |
|---|
| 381 | parameter FluidHeatFlow.Media.Medium medium=FluidHeatFlow.Media.Medium() |
|---|
| 382 | "Cooling medium" |
|---|
| 383 | annotation(__Dymola_choicesAllMatching=true); |
|---|
| 384 | parameter Modelica.SIunits.Temperature TAmb(displayUnit="degC")=293.15 |
|---|
| 385 | "Ambient temperature"; |
|---|
| 386 | output Modelica.SIunits.TemperatureDifference dTSource1= |
|---|
| 387 | prescribedHeatFlow1.port.T-TAmb "Source1 over Ambient"; |
|---|
| 388 | output Modelica.SIunits.TemperatureDifference dTtoPipe1=prescribedHeatFlow1.port.T-pipe1.heatPort.T |
|---|
| 389 | "Source1 over Coolant1"; |
|---|
| 390 | output Modelica.SIunits.TemperatureDifference dTCoolant1=pipe1.dT |
|---|
| 391 | "Coolant1's temperature increase"; |
|---|
| 392 | output Modelica.SIunits.TemperatureDifference dTSource2= |
|---|
| 393 | prescribedHeatFlow2.port.T-TAmb "Source2 over Ambient"; |
|---|
| 394 | output Modelica.SIunits.TemperatureDifference dTtoPipe2=prescribedHeatFlow2.port.T-pipe2.heatPort.T |
|---|
| 395 | "Source2 over Coolant2"; |
|---|
| 396 | output Modelica.SIunits.TemperatureDifference dTCoolant2=pipe2.dT |
|---|
| 397 | "Coolant2's temperature increase"; |
|---|
| 398 | output Modelica.SIunits.TemperatureDifference dTmixedCoolant=ambient2.T_port-ambient1.T_port |
|---|
| 399 | "mixed Coolant's temperature increase"; |
|---|
| 400 | FluidHeatFlow.Sources.Ambient ambient1(constantAmbientTemperature=TAmb, medium=medium) |
|---|
| 401 | annotation (Placement(transformation(extent={{-60,-10},{-80,10}}, |
|---|
| 402 | rotation=0))); |
|---|
| 403 | Sources.VolumeFlow pump( |
|---|
| 404 | medium=medium, |
|---|
| 405 | m=0, |
|---|
| 406 | T0=TAmb, |
|---|
| 407 | useVolumeFlowInput=true) |
|---|
| 408 | annotation (Placement(transformation(extent={{-40,-10},{-20,10}}, |
|---|
| 409 | rotation=0))); |
|---|
| 410 | FluidHeatFlow.Components.HeatedPipe pipe1( |
|---|
| 411 | medium=medium, |
|---|
| 412 | m=0.1, |
|---|
| 413 | T0=TAmb) |
|---|
| 414 | annotation (Placement(transformation(extent={{0,-20},{20,0}}, rotation= |
|---|
| 415 | 0))); |
|---|
| 416 | FluidHeatFlow.Components.HeatedPipe pipe2( |
|---|
| 417 | medium=medium, |
|---|
| 418 | m=0.1, |
|---|
| 419 | T0=TAmb) |
|---|
| 420 | annotation (Placement(transformation(extent={{0,20},{20,0}}, rotation=0))); |
|---|
| 421 | FluidHeatFlow.Components.IsolatedPipe pipe3( |
|---|
| 422 | medium=medium, |
|---|
| 423 | m=0.1, |
|---|
| 424 | T0=TAmb) |
|---|
| 425 | annotation (Placement(transformation(extent={{40,-10},{60,10}}, |
|---|
| 426 | rotation=0))); |
|---|
| 427 | FluidHeatFlow.Sources.Ambient ambient2(constantAmbientTemperature=TAmb, medium=medium) |
|---|
| 428 | annotation (Placement(transformation(extent={{80,-10},{100,10}}, |
|---|
| 429 | rotation=0))); |
|---|
| 430 | Modelica.Thermal.HeatTransfer.Components.HeatCapacitor heatCapacitor1( |
|---|
| 431 | T(start=TAmb), C=0.1) |
|---|
| 432 | annotation (Placement(transformation( |
|---|
| 433 | origin={40,-60}, |
|---|
| 434 | extent={{-10,10},{10,-10}}, |
|---|
| 435 | rotation=90))); |
|---|
| 436 | Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow |
|---|
| 437 | prescribedHeatFlow1 |
|---|
| 438 | annotation (Placement(transformation( |
|---|
| 439 | origin={-20,-60}, |
|---|
| 440 | extent={{10,-10},{-10,10}}, |
|---|
| 441 | rotation=180))); |
|---|
| 442 | Modelica.Thermal.HeatTransfer.Components.Convection convection1 |
|---|
| 443 | annotation (Placement(transformation( |
|---|
| 444 | origin={10,-40}, |
|---|
| 445 | extent={{10,10},{-10,-10}}, |
|---|
| 446 | rotation=270))); |
|---|
| 447 | Modelica.Thermal.HeatTransfer.Components.HeatCapacitor heatCapacitor2( |
|---|
| 448 | T(start=TAmb), C=0.1) |
|---|
| 449 | annotation (Placement(transformation( |
|---|
| 450 | origin={38,60}, |
|---|
| 451 | extent={{10,-10},{-10,10}}, |
|---|
| 452 | rotation=90))); |
|---|
| 453 | Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow |
|---|
| 454 | prescribedHeatFlow2 |
|---|
| 455 | annotation (Placement(transformation( |
|---|
| 456 | origin={-20,60}, |
|---|
| 457 | extent={{10,10},{-10,-10}}, |
|---|
| 458 | rotation=180))); |
|---|
| 459 | Modelica.Thermal.HeatTransfer.Components.Convection convection2 |
|---|
| 460 | annotation (Placement(transformation( |
|---|
| 461 | origin={10,40}, |
|---|
| 462 | extent={{10,-10},{-10,10}}, |
|---|
| 463 | rotation=90))); |
|---|
| 464 | Modelica.Blocks.Sources.Constant volumeFlow(k=1) |
|---|
| 465 | annotation (Placement(transformation(extent={{-60,10},{-40,30}}, |
|---|
| 466 | rotation=0))); |
|---|
| 467 | Modelica.Blocks.Sources.Constant heatFlow1(k=5) |
|---|
| 468 | annotation (Placement(transformation(extent={{-60,-70},{-40,-50}}, |
|---|
| 469 | rotation=0))); |
|---|
| 470 | Modelica.Blocks.Sources.Constant heatFlow2(k=10) |
|---|
| 471 | annotation (Placement(transformation(extent={{-60,50},{-40,70}}, |
|---|
| 472 | rotation=0))); |
|---|
| 473 | Modelica.Blocks.Sources.Constant thermalConductance1(k=1) |
|---|
| 474 | annotation (Placement(transformation(extent={{-30,-50},{-10,-30}}, |
|---|
| 475 | rotation=0))); |
|---|
| 476 | Modelica.Blocks.Sources.Constant thermalConductance2(k=1) |
|---|
| 477 | annotation (Placement(transformation(extent={{-30,30},{-10,50}}, |
|---|
| 478 | rotation=0))); |
|---|
| 479 | equation |
|---|
| 480 | connect(ambient1.flowPort, pump.flowPort_a) |
|---|
| 481 | annotation (Line(points={{-60,0},{-40,0}}, color={255,0,0})); |
|---|
| 482 | connect(pump.flowPort_b, pipe1.flowPort_a) |
|---|
| 483 | annotation (Line(points={{-20,0},{-10,0},{-10,-10},{0,-10}}, color={255, |
|---|
| 484 | 0,0})); |
|---|
| 485 | connect(pump.flowPort_b, pipe2.flowPort_a) |
|---|
| 486 | annotation (Line(points={{-20,0},{-10,0},{-10,10},{0,10}}, color={255,0, |
|---|
| 487 | 0})); |
|---|
| 488 | connect(heatFlow2.y,prescribedHeatFlow2. Q_flow) |
|---|
| 489 | annotation (Line(points={{-39,60},{-30,60}}, color={0,0,255})); |
|---|
| 490 | connect(heatFlow1.y,prescribedHeatFlow1. Q_flow) |
|---|
| 491 | annotation (Line(points={{-39,-60},{-30,-60}}, color={0,0,255})); |
|---|
| 492 | connect(thermalConductance2.y, convection2.Gc) |
|---|
| 493 | annotation (Line(points={{-9,40},{0,40}}, color={0,0,127})); |
|---|
| 494 | connect(thermalConductance1.y, convection1.Gc) |
|---|
| 495 | annotation (Line(points={{-9,-40},{0,-40}}, |
|---|
| 496 | color={0,0,127})); |
|---|
| 497 | connect(pipe1.heatPort,convection1. fluid) annotation (Line(points={{10,-20}, |
|---|
| 498 | {10,-30},{10,-30}}, color={191,0,0})); |
|---|
| 499 | connect(convection2.fluid,pipe2. heatPort) annotation (Line(points={{10, |
|---|
| 500 | 30},{10,20}}, color={191,0,0})); |
|---|
| 501 | connect(convection2.solid,prescribedHeatFlow2. port) annotation (Line( |
|---|
| 502 | points={{10,50},{10,60},{-10,60}}, color={191,0,0})); |
|---|
| 503 | connect(convection2.solid,heatCapacitor2. port) annotation (Line(points={ |
|---|
| 504 | {10,50},{10,60},{48,60}}, color={191,0,0})); |
|---|
| 505 | connect(convection1.solid,prescribedHeatFlow1. port) annotation (Line( |
|---|
| 506 | points={{10,-50},{10,-60},{-10,-60}}, color={191,0,0})); |
|---|
| 507 | connect(convection1.solid,heatCapacitor1. port) annotation (Line(points={{10,-50}, |
|---|
| 508 | {10,-60},{30,-60}}, color={191,0,0})); |
|---|
| 509 | connect(pipe2.flowPort_b,pipe3. flowPort_a) annotation (Line(points={{20, |
|---|
| 510 | 10},{30,10},{30,0},{40,0}}, color={255,0,0})); |
|---|
| 511 | connect(pipe1.flowPort_b,pipe3. flowPort_a) annotation (Line(points={{20, |
|---|
| 512 | -10},{30,-10},{30,0},{40,0}}, color={255,0,0})); |
|---|
| 513 | connect(pipe3.flowPort_b,ambient2. flowPort) |
|---|
| 514 | annotation (Line(points={{60,0},{80,0}}, color={255,0,0})); |
|---|
| 515 | connect(volumeFlow.y, pump.volumeFlow) annotation (Line( |
|---|
| 516 | points={{-39,20},{-30,20},{-30,10}}, |
|---|
| 517 | color={0,0,127}, |
|---|
| 518 | smooth=Smooth.None)); |
|---|
| 519 | end ParallelCooling; |
|---|
| 520 | |
|---|
| 521 | model IndirectCooling "Example: indirect cooling circuit" |
|---|
| 522 | extends Modelica.Icons.Example; |
|---|
| 523 | annotation (Documentation(info="<HTML> |
|---|
| 524 | <p> |
|---|
| 525 | 3rd test example: IndirectCooling |
|---|
| 526 | </p> |
|---|
| 527 | A prescribed heat sources dissipates its heat through a thermal conductor to the inner coolant cycle. It is necessary to define the pressure level of the inner coolant cycle. The inner coolant cycle is coupled to the outer coolant flow through a thermal conductor.<br> |
|---|
| 528 | Inner coolant's temperature rise near the source is the same as temperature drop near the cooler.<br> |
|---|
| 529 | <b>Results</b>:<br> |
|---|
| 530 | <table> |
|---|
| 531 | <tr> |
|---|
| 532 | <td valign=\"top\"><b>output</b></td> |
|---|
| 533 | <td valign=\"top\"><b>explanation</b></td> |
|---|
| 534 | <td valign=\"top\"><b>formula</b></td> |
|---|
| 535 | <td valign=\"top\"><b>actual steady-state value</b></td> |
|---|
| 536 | </tr> |
|---|
| 537 | <tr> |
|---|
| 538 | <td valign=\"top\">dTSource</td> |
|---|
| 539 | <td valign=\"top\">Source over Ambient</td> |
|---|
| 540 | <td valign=\"top\">dtouterCoolant + dtCooler + dTinnerCoolant + dtToPipe</td> |
|---|
| 541 | <td valign=\"top\">40 K</td> |
|---|
| 542 | </tr> |
|---|
| 543 | <tr> |
|---|
| 544 | <td valign=\"top\">dTtoPipe</td> |
|---|
| 545 | <td valign=\"top\">Source over inner Coolant</td> |
|---|
| 546 | <td valign=\"top\">Losses / ThermalConductor.G</td> |
|---|
<