modelPartialHeatPump
Extends from IDEAS.Fluid.Interfaces.FourPortHeatMassExchanger (Model transporting two fluid streams between four ports with storing mass or energy), IDEAS.Fluid.HeatPumps.Interfaces.ModulationSecurity (Non physical down modulation of the power of a heat production when the fluid temperature approach its boundaries temperature in order to reduce the number of events), IDEAS.Fluid.Interfaces.OnOffInterface (Interface for either setting a device on using a parameter or using a realInput).
Information
This partial model provides an implementation for a heat pump. Heat is drawn from the fluid at the 'Brine' side and injected into the 'Fluid' side. The model uses performance tables to calculate the COP and electrical power.
Main equations
The COP and electrical power Pel are read from performance tables as a function of the evaporator inlet temperature and the condensor outlet temperature:
COP = f1(T_out_condensor, T_in_evaporator)
P_el = f2(T_out_condensor, T_in_evaporator)
These values are used to calculate the thermal powers:
Q_condensor = P_el*COP
Q_evaporator = P_el*(COP-1)
If the parameter use_scaling is true, the powers of the heat pump will be scaled with QNom / QNomRef. The nominal mass flow rate of the heat pump is also scaled to correctly scale the pressure losses.
The models also allows partial load if use_modulationSignal is set to true. The modulation is assumed to be ideal and it works then as a scaling input of the power.
The heat pump compressor will be switched off when:
- The external control signal is false
- The over/under-temperature protection is activated
In this case P_el will become zero. The transition from on to off can happen discretely or through a filter using the parameter 'avoidEvents'.
Assumptions and limitations
- The transient behaviour of the thermodynamic cycle is not simulated.
- The fluid mass flow rates do not have an impact on the values of COP and P_el.
- Modulation of the power is not supported.
- Maximum temperatures of the evaporator and minimum temperatures of the condensor are not considered.
- Defrosting cycles etc are not considered.
Typical use and important parameters
A record with the required parameters needs to be provided.
The parameter 'avoidEvents' can be used to avoid an event when activating the over/under-temperature protection. When avoidEvents is true the thermal mass of the condensor and evaporator are increased to avoid undercooling/overheating the heat pump while it is switching off and the mass flow rate is zero. This factor can be quite significant and depends on the 'riseTime'.
Options
- Typical options inherited through lumpedVolumeDeclarations can be used.
Validation
Examples of this model can be found in IDEAS.Fluid.Production.Examples.HeatPump_BrineWater, IDEAS.Fluid.Production.Examples.HeatPump_BrineWaterTset and IDEAS.Fluid.Production.Examples.HeatPump_Events
Parameters
| Type | Name | Default | Description |
|---|---|---|---|
| Boolean | homotopyInitialization (from FourPortHeatMassExchanger) | true | = true, use homotopy method |
| Modelica.Units.SI.TemperatureDifference | deltaT_security (from ModulationSecurity) | if use_modulation_security then 1 else 5 | Temperature difference from the boundary at which the security hysteresis will be released |
| Modelica.Units.SI.Temperature | T_max (from ModulationSecurity) | 373.15 | Maximum fluid temperature |
| Modelica.Units.SI.Temperature | T_min (from ModulationSecurity) | 273.15 | Minimum fluid temperature |
| Boolean | use_onOffSignal (from OnOffInterface) | false | Set to true to switch device on/off using external signal |
| Boolean | onOff (from OnOffInterface) | true | Set to true if device is on |
| IDEAS.Fluid.HeatPumps.BaseClasses.HeatPumpData | heatPumpData | ||
| Boolean | use_TSet | false | True if the heat pump uses a set point temperature control |
| Real | sca | if use_scaling then P_the_nominal/heatPumpData.P_the_nominal else 1 | scaling factor for the nominal power of the heat pump |
| Assumptions | |||
| Boolean | allowFlowReversal1 (from PartialFourPort) | true | = false to simplify equations, assuming, but not enforcing, no flow reversal for medium 1 |
| Boolean | allowFlowReversal2 (from PartialFourPort) | true | = false to simplify equations, assuming, but not enforcing, no flow reversal for medium 2 |
| Nominal condition | |||
| Modelica.Units.SI.MassFlowRate | m1_flow_nominal (from PartialFourPortInterface) | Nominal mass flow rate | |
| Modelica.Units.SI.MassFlowRate | m2_flow_nominal (from PartialFourPortInterface) | Nominal mass flow rate | |
| Modelica.Units.SI.PressureDifference | dp1_nominal (from FourPortFlowResistanceParameters) | Pressure difference | |
| Modelica.Units.SI.PressureDifference | dp2_nominal (from FourPortFlowResistanceParameters) | Pressure difference | |
| Advanced | |||
| Medium1.MassFlowRate | m1_flow_small (from PartialFourPortInterface) | 1E-4*abs(m1_flow_nominal) | Small mass flow rate for regularization of zero flow |
| Medium2.MassFlowRate | m2_flow_small (from PartialFourPortInterface) | 1E-4*abs(m2_flow_nominal) | Small mass flow rate for regularization of zero flow |
| Boolean | use_scaling | false | scale the performance data based on the nominal power |
| Boolean | perfFromTout | false | = true, then recompute performance based on evaporator outlet temperature instead of directly using the inlet temperature |
| Boolean | use_modulationSignal | false | enables an input for modulating the heat pump ideally (no change of COP, just scaling of the electrical and thermal power) |
| Modelica.Units.SI.Power | P_the_nominal | heatPumpData.P_the_nominal | nominal thermal power of the heat pump |
| Real | mSenFac | 1 | Factor to scale the thermal mass of the evaporator and condensor |
| Advanced › Diagnostics | |||
| Boolean | show_T (from PartialFourPortInterface) | false | = true, if actual temperature at port is computed |
| Flow resistance › Medium 1 | |||
| Boolean | computeFlowResistance1 (from FourPortFlowResistanceParameters) | true | =true, compute flow resistance. Set to false to assume no friction |
| Boolean | from_dp1 (from FourPortFlowResistanceParameters) | false | = true, use m_flow = f(dp) else dp = f(m_flow) |
| Boolean | linearizeFlowResistance1 (from FourPortFlowResistanceParameters) | false | = true, use linear relation between m_flow and dp for any flow rate |
| Real | deltaM1 (from FourPortFlowResistanceParameters) | 0.1 | Fraction of nominal flow rate where flow transitions to laminar |
| Flow resistance › Medium 2 | |||
| Boolean | computeFlowResistance2 (from FourPortFlowResistanceParameters) | true | =true, compute flow resistance. Set to false to assume no friction |
| Boolean | from_dp2 (from FourPortFlowResistanceParameters) | false | = true, use m_flow = f(dp) else dp = f(m_flow) |
| Boolean | linearizeFlowResistance2 (from FourPortFlowResistanceParameters) | false | = true, use linear relation between m_flow and dp for any flow rate |
| Real | deltaM2 (from FourPortFlowResistanceParameters) | 0.1 | Fraction of nominal flow rate where flow transitions to laminar |
| Dynamics › Nominal condition | |||
| Modelica.Units.SI.Time | tau1 (from FourPortHeatMassExchanger) | 30 | Time constant at nominal flow |
| Modelica.Units.SI.Time | tau2 (from FourPortHeatMassExchanger) | 30 | Time constant at nominal flow |
| Dynamics › Conservation equations | |||
| Modelica.Fluid.Types.Dynamics | energyDynamics (from FourPortHeatMassExchanger) | Modelica.Fluid.Types.Dynamics.DynamicFreeInitial | Type of energy balance: dynamic (3 initialization options) or steady state |
| Initialization › Medium 1 | |||
| Medium1.AbsolutePressure | p1_start (from FourPortHeatMassExchanger) | Medium1.p_default | Start value of pressure |
| Medium1.Temperature | T1_start (from FourPortHeatMassExchanger) | Medium1.T_default | Start value of temperature |
| Medium1.MassFraction[Medium1.nX] | X1_start (from FourPortHeatMassExchanger) | Medium1.X_default | Start value of mass fractions m_i/m |
| Medium1.ExtraProperty[Medium1.nC] | C1_start (from FourPortHeatMassExchanger) | fill(0, Medium1.nC) | Start value of trace substances |
| Medium1.ExtraProperty[Medium1.nC] | C1_nominal (from FourPortHeatMassExchanger) | fill(1E-2, Medium1.nC) | Nominal value of trace substances. (Set to typical order of magnitude.) |
| Initialization › Medium 2 | |||
| Medium2.AbsolutePressure | p2_start (from FourPortHeatMassExchanger) | Medium2.p_default | Start value of pressure |
| Medium2.Temperature | T2_start (from FourPortHeatMassExchanger) | Medium2.T_default | Start value of temperature |
| Medium2.MassFraction[Medium2.nX] | X2_start (from FourPortHeatMassExchanger) | Medium2.X_default | Start value of mass fractions m_i/m |
| Medium2.ExtraProperty[Medium2.nC] | C2_start (from FourPortHeatMassExchanger) | fill(0, Medium2.nC) | Start value of trace substances |
| Medium2.ExtraProperty[Medium2.nC] | C2_nominal (from FourPortHeatMassExchanger) | fill(1E-2, Medium2.nC) | Nominal value of trace substances. (Set to typical order of magnitude.) |
| Advanced › Events | |||
| Boolean | use_modulation_security (from ModulationSecurity) | false | Set to true if power modulation should be used to avoid exceeding temperature. |
| Flow resistance | |||
| Boolean | computeFlowResistance | true | =true, compute flow resistance. Set to false to assume no friction |
Connectors
| Type | Name | Default | Description |
|---|---|---|---|
| Modelica.Fluid.Interfaces.FluidPort_a | port_a1 (from PartialFourPort) | Fluid connector a1 (positive design flow direction is from port_a1 to port_b1) | |
| Modelica.Fluid.Interfaces.FluidPort_b | port_b1 (from PartialFourPort) | Fluid connector b1 (positive design flow direction is from port_a1 to port_b1) | |
| Modelica.Fluid.Interfaces.FluidPort_a | port_a2 (from PartialFourPort) | Fluid connector a2 (positive design flow direction is from port_a2 to port_b2) | |
| Modelica.Fluid.Interfaces.FluidPort_b | port_b2 (from PartialFourPort) | Fluid connector b2 (positive design flow direction is from port_a2 to port_b2) | |
| Modelica.Blocks.Interfaces.RealOutput | modulation_security (from ModulationSecurity) | IDEAS.Utilities.Math.Functions.spliceFunction(x = min(limLow.y, limUp.y)/max(Modelica.Constants.eps, deltaT_security) - 1, pos = 1, neg = 0, deltax = 0.5) | Modulation to avoid reaching temperature boundaries |
| Modelica.Blocks.Interfaces.BooleanInput | on (from OnOffInterface) | ||
| Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a | heatLoss | ||
| Modelica.Blocks.Interfaces.RealOutput | P | Electrical power consumption | |
| Modelica.Blocks.Interfaces.RealInput | mod | Modulation level |
Components
| Type | Name | Default | Description |
|---|---|---|---|
| Medium1.MassFlowRate | m1_flow (from PartialFourPortInterface) | port_a1.m_flow | Mass flow rate from port_a1 to port_b1 (m1_flow > 0 is design flow direction) |
| Modelica.Units.SI.PressureDifference | dp1 (from PartialFourPortInterface) | port_a1.p - port_b1.p | Pressure difference between port_a1 and port_b1 |
| Medium2.MassFlowRate | m2_flow (from PartialFourPortInterface) | port_a2.m_flow | Mass flow rate from port_a2 to port_b2 (m2_flow > 0 is design flow direction) |
| Modelica.Units.SI.PressureDifference | dp2 (from PartialFourPortInterface) | port_a2.p - port_b2.p | Pressure difference between port_a2 and port_b2 |
| Medium1.ThermodynamicState | sta_a1 (from PartialFourPortInterface) | if allowFlowReversal1 then Medium1.setState_phX(port_a1.p, noEvent(actualStream(port_a1.h_outflow)), noEvent(actualStream(port_a1.Xi_outflow))) else Medium1.setState_phX(port_a1.p, inStream(port_a1.h_outflow), inStream(port_a1.Xi_outflow)) | Medium properties in port_a1 |
| Medium1.ThermodynamicState | sta_b1 (from PartialFourPortInterface) | if allowFlowReversal1 then Medium1.setState_phX(port_b1.p, noEvent(actualStream(port_b1.h_outflow)), noEvent(actualStream(port_b1.Xi_outflow))) else Medium1.setState_phX(port_b1.p, port_b1.h_outflow, port_b1.Xi_outflow) | Medium properties in port_b1 |
| Medium2.ThermodynamicState | sta_a2 (from PartialFourPortInterface) | if allowFlowReversal2 then Medium2.setState_phX(port_a2.p, noEvent(actualStream(port_a2.h_outflow)), noEvent(actualStream(port_a2.Xi_outflow))) else Medium2.setState_phX(port_a2.p, inStream(port_a2.h_outflow), inStream(port_a2.Xi_outflow)) | Medium properties in port_a2 |
| Medium2.ThermodynamicState | sta_b2 (from PartialFourPortInterface) | if allowFlowReversal2 then Medium2.setState_phX(port_b2.p, noEvent(actualStream(port_b2.h_outflow)), noEvent(actualStream(port_b2.Xi_outflow))) else Medium2.setState_phX(port_b2.p, port_b2.h_outflow, port_b2.Xi_outflow) | Medium properties in port_b2 |
| Modelica.Units.SI.HeatFlowRate | Q1_flow (from FourPortHeatMassExchanger) | vol1.heatPort.Q_flow | Heat flow rate into medium 1 |
| Modelica.Units.SI.HeatFlowRate | Q2_flow (from FourPortHeatMassExchanger) | vol2.heatPort.Q_flow | Heat flow rate into medium 2 |
| IDEAS.Fluid.MixingVolumes.BaseClasses.MixingVolumeHeatPort | vol1 (from FourPortHeatMassExchanger) | ||
| IDEAS.Fluid.MixingVolumes.MixingVolume | vol2 (from FourPortHeatMassExchanger) | ||
| IDEAS.Fluid.FixedResistances.PressureDrop | preDro1 (from FourPortHeatMassExchanger) | Flow resistance of fluid 1 | |
| IDEAS.Fluid.FixedResistances.PressureDrop | preDro2 (from FourPortHeatMassExchanger) | Flow resistance of fluid 2 | |
| Modelica.Blocks.Tables.CombiTable2Ds | powerTable | Interpolation table for finding the electrical power | |
| Modelica.Blocks.Tables.CombiTable2Ds | copTable | ||
| Modelica.Blocks.Sources.RealExpression | QEvap | ||
| Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow | prescribedHeatEvap | ||
| Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow | prescribedHeatCond | ||
| Modelica.Thermal.HeatTransfer.Components.ThermalConductor | thermalConductorLosses | ||
| Modelica.Blocks.Sources.RealExpression | QCond | ||
| Modelica.Units.SI.Power | P_el | Electrical power consumption | |
| Modelica.Units.SI.Power | P_evap | Thermal power of the evaporator (positive) | |
| Modelica.Units.SI.Power | P_cond | Thermal power of the condensor (positive) | |
| Modelica.Units.SI.Temperature | TEvapIn | Evaporator inlet temperature | |
| Real | cop | COP of the heat pump | |
| Modelica.Blocks.Sources.RealExpression | PElec | ||
| Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor | T_out_cond | ||
| Modelica.Blocks.Sources.RealExpression | TEvapInExp |
Revisions
- January 2014 by Damien Picard:
Remove unnecessary filters + add modulation temperature security to avoid overheating and undercooling and limit number of events. - December 2014 by Damien Picard:
Make filter parameters final to avoid warning durings compilation. - December 2014 by Damien Picard:
Add value to internal variable modulationRate_internal to close the equations when use_modulation_security is false. Add a modulation input. - November 2014 by Filip Jorissen:
Added 'AvoidEvents' parameter, temperature protection and documentation. - March 2014 by Filip Jorissen:
Initial version