Heat Recovery Chillers

Hi All,

In high performance buildings, heat recovery chillers is one of common energy saving strategies to save heating energy. However, it is generally difficult to model this chiller (central heat pump) via current OpenStudio App, and there aren’t any examples that others can really check for reference.

There are a couple of posts on UnmetHours mentioned the idf examples that come from the EnergyPlus installation.

I have spent some time to replicate this example in GH, and feel free to check it out.
20191113_HeatRecoveryChiller.gh (689.7 KB)
In this file, I created two VAV systems, with and without heat recovery chillers for comparison. In heat recovery chiller option, the heat recovery chiller is hard-sized to work with regular water cooled chiller, and I have added a backup boiler to ensure the hot water supply in cold seasons.

Please let met know if you have any comments.


Hi @MingboPeng This new function is a powerful component . I loved it.I just tested it with little question.
Here is the readme:

Current document units is in Meters
Conversion to Meters will be applied = 1.000
Current working directory is set to: c:\ladybug\WithHXChiller\OpenStudio
Model saved to: c:\ladybug\WithHXChiller\OpenStudio\WithHXChiller.osm
OSM > IDF: c:/ladybug/WithHXChiller/OpenStudio/WithHXChiller/ModelToIdf/in.idf
Program Version,EnergyPlus, Version 8.9.0-eba93e8e1b, YMD=2019.11.19 15:45,

** Severe ** [ChillerHeaterPerformance:Electric:EIR][Chiller Heater Performance Electric EIR 1] - Missing required property ‘cooling_mode_electric_input_to_cooling_output_ratio_function_of_part_load_ratio_curve_name’.

** Severe ** [ChillerHeaterPerformance:Electric:EIR][Chiller Heater Performance Electric EIR 1] - Missing required property ‘heating_mode_electric_input_to_cooling_output_ratio_function_of_part_load_ratio_curve_name’.

** Fatal ** Errors occurred on processing input file. Preceding condition(s) cause termination.

…Summary of Errors that led to program termination:

… Reference severe error count=2

… Last severe error=[ChillerHeaterPerformance:Electric:EIR][Chiller Heater Performance Electric EIR 1] - Missing required property ‘heating_mode_electric_input_to_cooling_output_ratio_function_of_part_load_ratio_curve_name’.

************* Warning: Node connection errors not checked - most system input has not been read (see previous warning).

************* Fatal error – final processing. Program exited before simulations began. See previous error messages.

************* EnergyPlus Warmup Error Summary. During Warmup: 0 Warning; 0 Severe Errors.

************* EnergyPlus Sizing Error Summary. During Sizing: 0 Warning; 0 Severe Errors.

************* EnergyPlus Terminated–Fatal Error Detected. 0 Warning; 2 Severe Errors; Elapsed Time=00hr 00min 0.25sec

I checked the EnergyPlus IDF file and found this setting as below:

1 Like

Great job, thanks @MingboPeng! I usually use this energyplus system with a “trick” to simulate a multi-purpose air to water air cooled chillers like this:
“the trick” is to use the condenser plant with a supply side temperature source that reads the outside temperature … Do you think it is correct? If so, can it be implemented in Ironbug?

@minggangyin I guess you are using the OpenStudio 2.5. If yes, please upgrade it to 2.8 or above.

@MingboPeng Yeah, you are right. Thanks for your reply.

Hi @MassimilianoBusnelli, it looks like it is a heating and cooling independent operation system.
EnergyPlus also has an example for this type of system, and you can do it in Ironbug as well if I understand your system correctly.

Hi @MingboPeng thx for reply. I have used exactly the example you showing, considering to model it using the object “Central Heat Pump System” and definitions of the reference guide, only water cooled solutions seem to be allowed. The unit I’m modeling is air cooled: I forced the input using the “temperature source” object (to consider the real temperatures entering in the condenser/evaporator) I’m wondering what happens when external temperatures go below zero.
Generaly this is the scheme:

And generale description of the system:
The multipurpose 4-pipe units have been made for applications with 4 pipe terminals, e.g. shopping centres, offices or facilities with large windows where there can be the simultaneous demand for hot and cold water with a system which does not require season changeover and therefore is a valid alternative to traditional systems based on the chiller-boiler combination.
The multipurpose unit acts as a classical refrigerator: cool water to the system and condensation heat disposal outside through finned coils.
The multipurpose unit acts as a heat pump, exploiting the heat of the outside air, through the finned coil (evaporator) it raises the temperature of the water to be sent to the system through a plate heat exchanger (condenser). The main difference from traditional cycle reverse heat pumps is that the heated water is produced in different heat exchanger from the one used to produce cold water. This separates the two hot-cold sections required for 4-pipe systems.
If the utility requires simultaneous hot and cold water, the unit acts as a water heat pump, controlling condensation and evaporation on two distinct plate heat exchangers associated to circulation of cold and hot water in the system.
It automatically changes from one configuration to another to optimise the spent energy depending on the demand by the utility.

Also I’m in doubt about the input of the field “Number of the chiller heater modules”. I’m considering a system based on a single standard unit (EU market). I’d fill the field with 1.
Probably I’m confused because of the diagram in the reference guide that shows a solution made of three modules (but I suppose it is to explain the typical configuration made of more than one module). Anyway I want just to make sure the term “module” is referred to the “packaged unit”(able to work stand-alone) and not to internal components (e.g. number of circuits/compressors).

I appreciate your help

Hi @MassimilianoBusnelli, I’m picking up this old conversation because I’m modelling an air cooled heat pump as well, I don’t understand where do I need to force the input for the temperature source that you mentioned, to reflect that the system is not water cooled. Probably the question is not that smart but I’m quite new in energy modelling.

Thank you

In this case the temperature source is the component I have used in the supply emi-loop because I have modeled a multipurpose heat pump. This component is simple. I have used the schedule input with a simple EMS that read the site outdoor dry bulb temperature and write a schedule.
Best regards

Hi @MassimilianoBusnelli, thank you for your answer. I’m sorry to bother you, but I don’t really get how to model this in gh. I attach my script to this post, if by chance you could give it a look it would be helpful.

Thank you!

144_modello.gh (713.9 KB)

Hi @mich.dimart ,
I don’t use ironbug, simply because I don’t use openstudio for the plant engineering part, but I write the loops directly from the idfeditor. However for the multipurpose heat pump you must also set a condenser loop and define a supply class for this loop, I used the temperature source class. Then through an EMS script (the programming language of EnergyPlus) I replaced the values ​​of the schedule that reads this class.
Best regards


Attempting to model heat recovery chillers, but unfortunately for some reason using the chiller heater component as suggested above did not work, there was absolutely nothing happening on the heat recovery side.

The chiller heater module has often given me fits in the past, and I know it can be used for a variety of things like ASHPs, but I often use alternative components when I can because of these difficulties. So after tearing out my hair a bit on using it for the heat recovery chillers, I found this alternative approach that looked promising, as : Modeling Heat Recovery Chiller in EnergyPlus using Heat Exchanger - Unmet Hours

The article has this nifty sketch explaining the concept:

However, the issue is connecting the chiller to both the condenser loop and the heat recovery loop. I anticipated an issue trying to draw two wires coming out of the chiller ‘ToCondensor’, with one wire going to the Condenser Water Loop and one to supply the Heat Recovery Water Loop, like so:

and the chiller no longer appear in Open Studio on the Chilled Water Loop (Because the supply is on the Heat Recovery Water Loop now even though the supply wire is attached to the CHW loop)

I have tried various configurations of heat exchangers and loop configurations, but all seem to cause issues because of a mismatch between traditional supply and demand side functions. Wondering if this is inherent to Ironbug or if there is some other OS/E+ reason that these cannot be flipped.

Also any alternative ideas are appreciated.

Hi @Elliot_Glassman
Have you tried to combine the Heat recovery loop and condenser loop?

So in the condenser loop, you add a heat exchanger right after the chiller where it rejects heat, and connect the same heat exchanger before the boiler so that it pre-heat the water before the boiler.

1 Like

Thanks, this is helpful. I configured it as you have shown but for some reason the EUI exploded, driven by a large increase in heating energy (which should be going down). I am going to dig deeper into exactly what is going, but let me know if there is anything related to controls that I may be missing.

Some more information. EUI was about 61 then ballooned to 178 with the configuration and a huge increase in heating energy. I adjusted the properties of the heat exchanger to be HeatingSetpointModulated and that brought the EUI down to 76, heating energy still higher than it was without the ‘heat recovery chiller’ when it should be less. But it indicates that the issue is with the heat recovery controls. I will continue to see how I can improve them.

A separate issue I was trying to attach probes to before and after the heat exchanger on the condenser loop and hot water loop to take a look at exactly what was happening, but when I do, it says:

  1. Solution exception:Failed to run OpenStudio CLI:
    Failed to apply Ironbug HVAC:.

It runs when I disable to probes. Any idea what the issue could be?

A couple questions:

  • I put the components for the loop into a list (with a merge component) and its coming in a different order like putting the heat exchanger after the pump, even though the list shows the heat exchanger first. Don’t know why that sometimes happens in IB.

  • I got some of the node sensors to work (although I still don’t understand why IB does not translate when all the sensors are hooked up. I was able to see what the heat loop temperature was without the heat exchanger (top) and with the heat exchanger (bottom two, before and after the boiler).

For some reason, it looks like the heat exchanger is preventing the loop temperature from meeting its setpoint. As mentioned in the previous posts, I was able to improve things by changing the control type, but playing with the other inputs such as temperature limits did not seem to make a difference, and I don’t know if its because there is no node specified for the override nodes. Now sure how to specify this from Ironbug.

Will continue wrestling with this, but let me know if there are any ideas.