Ideal Loads Outdoor Air Economizer

I think there might be one or two bugs in the HB Set Ideal Air Loads Parameters component. First, setting the airSideEconomizer boolean to True returns the following error:

** Severe ** InitPurchasedAir: In ZoneHVAC:IdealLoadsAirSystem = ZONE1 IDEAL LOADS AIR SYSTEM
** ~~~ ** There is outdoor air with economizer active but there is no limit on cooling air flow rate.
** ~~~ ** Cooling Limit must be set to LimitFlowRate or LimitFlowRateAndCapacity, and Maximum Cooling Air Flow Rate must be set to a value or autosize.
** ~~~ ** Simulation will proceed with no limit on outdoor air flow rate.

When I set the IDF to LimitFlowRate and autosize, it ran without an error but the cooling energy use was the same as without.

Secondly, I found that running the Ideal Loads System with or without the Economizer and/or Demand Control returned identical cooling energy use. It was only when I went into the IDF file and input the Outside Air Method as “None” that the cooling energy went to zero.

I discovered all this while trying to model a simple Ideal Loads System with no cooling, but I wasn’t able to get results with no cooling energy straight out of HB. I set the thermostat setpoint schedule to 40 degrees (using the CSV schedule of 8760 values of “40” that Chris suggested). Any further help would be greatly appreciated. I’m attaching the HB file I’ve been using for reference. (546 KB)


Sorry for getting back so late. This is great that you are testing this out as the air side economizer of EnergyPlus is something that I have been struggling to understand for a while. Thanks to the information that you have provided here, I think that I finally understand it and I am able to make some meaningful changes in the components.

First, I have come to realize that, with the current specifications of flow/person and flow/floor area that the OpenStudio libraries have (and corresponding outdoor air object), there is essentially an assumption of demand controlled ventilation any time that the total flow/floor area is below that of the total flow/person (by default, this seems to be the case for most OpenStudio programs). Accordingly, to put in an option for demand controlled ventilation on the ideal air loads parameters component is incorrect and I have since taken it out (I have replaced it with something else described later).

Second, the big decrease in energy that you see from switching the outdoor air object to “None” is not because the air economizer is working. Rather, it is because you eliminated the requirement of fresh air changes for your zone. As such, in a tightly sealed building with low infiltration, there is a danger that occupants might not be getting enough fresh air with this setting. Still, this frees up the airflow of the system to be moderated and the supply temperature to be a nicer levels (see further explanation below).

Thirdly, I have realized that the Ideal Air System is very simple any only works in one of two ways: 1) It takes a specified outdoor air fraction and moderates the temperature of the air to meet the cooling/heating load or 2) It takes a specified supply air temperature and moderates the volume of air to meet the cooling load. The former uses a lot more energy because it often has to make supply air that is at very cold or very hot but always ensures the specified amount of outdoor air is met for the occupants and uses the ventilationPerArea and ventilationPerPerson inputs. The latter risks not supplying the right amount of fresh air if the building is tightly sealed and completely ignores the ventilatioPerArea and ventilationPerPerson inputs but returns energy values that are more reasonable. It is also closer in principle to how modern-day VAV or VRF systems operate. After a long internal debate with myself, I have decided to make the former one (with lower energy values modulating the volume of flow) the default. I now give you the option to switch between the two with a boolean on the ideal Air Parameters component.

Clearly, the air side economizer has a larger effect when the air volume is allowed to modulate so I think that you should now see larger changes in energy use from adding it in. I have also noticed that adding in the economizer while letting the supply air temperature rise seems to give some pretty high reductions in cooling energy.

Thanks again and I have attached an updated file.

-Chris (559 KB)

Thanks for taking a look at this Chris. (Thanks also for the ctrl+B tip!) I’ve spent a few hours testing the revised component and I’m having a hard time understanding the results. I’m still finding that adding the economizer makes almost no difference in the cooling energy use.

The HoverOver description for the modulateFloworTemp parameter is confusing, but after looking at the IDF files, here is how I understand what you’ve done:

modulateFlow = True: sets Outdoor Air Method to “None.”

modulateFlow = False: sets Outdoor Air Method to “Maximum.”

airSideEconomizer = True: sets Cooling Limit to “LimitFlowRate,” Maximum Cooling to “autosize,” and Economizer Type to “DifferentialDryBulb.”

airSideEconomizer = False: sets Cooling Limit to “NoLimit,” and Economizer Type to “blank.”

First, I found that when the Outdoor Air Method set to None, the Economizer is not available so coupling the Economizer with your “VAV” method yields no difference in the results.

Second, I’m baffled by the results when the modulateFlow is False and the airSideEconomizer is True. I’m seeing the ventilation airflow increase (compared to no Economizer) but the cooling energy remain identical.

Third, this doesn’t hugely impact the results but as an aside, if you were to use the “Sum” of the area and occupant ventilation (rather than the Max), it would more closely reflect ASHRAE ventilation requirements.

Finally, forgive me for asking a dumb question, but after updating LB and HB the Ideal Loads Component does not update to the one you attached. Is this because your new component isn’t committed to github yet?

Sorry for the lengthy response - I hope it helps clarify.

Hi Burin,

Thanks for looking into this and clarifying what the boolean toggle options does for the IDF. I am sorry for not explaining this in my initial response.

To be honest, I am still confused by the results myself and I am open to changing the name/description of the input based on what you have found here. modulateFlowOrTemp is not the best name for what seems to be going on and we should change it to reflect more what is happening in the IDF.

Here is how I am understanding the results of the different cases:

  1. When the variable flow option is selected (and the outdoor air set to “None”), the heating and cooling of the space seems to happen only through re-circulation of the indoor air. My comparison to a VAV system was not appropriate and perhaps it would be better to compare it to a window air conditioner or a warm air furnace, which, as far as I understand, only re-circulate indoor air and do not bring in outside air.

  2. My reasoning for the name modulateFlowOrTemp came mostly from my realization that the supply air temperature remained within the defined limits when the variable flow option is selected (and the outdoor air set to “None”). When the outdoor air was set to Maximum or Sum, the supply air temperature went way out of the temperature limits that I initially set. I realize now that the flows are varying in both cases and the name of the input really must change.

  3. I think that the reason why we don’t see any effect from the air side economizer is because the heating/cooling energy results that you get from an ideal air system are just the sum of the sensible and the latent heat added/removed from the zone by the system. This value of heat added or removed from the zone does not change whether the added/removed heat comes from outside air or from a cooling/heating coil. Since there is no cooling coil or boiler or chiller in an ideal air system, there is no way to request an output of the energy added/removed by such a coil or chiller as opposed to that removed/added by outside air. In other words, the air side economizer option on the ideal air system is practically useless because it does not help us differentiate the cooling that comes from the outside air vs. that which comes from a coil. All that it does is change the outdoor air fraction while keeping the reported cooling/heating values the same.

Please let me know if you think that this explanation makes sense, Burin and, in light of all this, I am very interested in your suggestions.

From my own perspective, I am now convinced that the default should definitely have the outside air requirements set to “None” since, otherwise, we cannot distinguish cooling/heating that happens from addition of outside air and that which must be supplied by a coil. At least when we get rid of the outside air requirement, we can be sure that the ideal air system values are only showing heating/cooling from a coil or HVAC system.

I have decided to remove the airsideEconomizer input since it seems to give misleading expectations. I am going to recommend here on out that, if you want to estimate the effect of increasing outside air on cooling, you should use the “Set EP Airflow” component, use fan-driven natural ventilation, and you should connect a custom CSV schedule of airflow. You will have to create such a schedule with native GH components using the outside air temperature, your zone setpoints, and the times that you are cooling in your initial run of E+. Either you do this or you set up a full-blown system with OpenStudio.

I have also decided to get rid of the heatRecovery input since it seems like this will also produce misleading expectations by the same logic.

Lastly, I am going to change the name of the modulateFlowOrTemp_ input to outdoorAirReq_. The default will be to have no indoor air requirement as stated above but you can input either “maximum” or “sum” to have the IDF run accordingly.

Let me know if this sounds good or if you have suggestions. Updated GH file attached. The github has the new Ideal Air Loads component. Make sure that you have sync correctly and restart GH after updating your components.

-Chris (548 KB)

When I’ve used the Ideal Loads Systems in the past, it’s been without Economizer and Heat Recovery (for the reasons you list), and I’ve created custom ventilation schedules (fan or nat vent) to account for the actual building economizer and/or ventilation (as you discuss). The problem with this method is that it is impossible to get the setpoints and schedules just right so that the Ideal Loads System doesn’t end up working too hard either on the heating or cooling end of things.

When I saw the Ideal Loads System component in HB I got excited because I thought you’d solved the economizer “problem.” It threw me for a loop when I didn’t see the economizer impact the cooling energy use, but I think you’re correct that the Ideal Loads System is just reporting sensible + latent heat in/out. That said, I have the suspicion that there must be a way of breaking out the economizer “energy savings” or the EPlus developers wouldn’t have included this option in the component. Same with heat recovery. I’ll do a little bit of research in the EPlus documentation and then test your new component. I’ll try to get back to you in the next few days, but it might take more time.


Thanks for sticking with this problem and being committed to solving it. I think that I have finally realized what the problem was with the original economizer. The error was in a place that we would not expect.

I was requesting the wrong cooling/heating outputs from the ideal air system. From the image below taken from the E+ input/output reference, it seems that I should be requesting “Zone Ideal Loads Supply Air Total Heating Energy” instead of “Zone Ideal Loads Zone Total Heating Energy” (with the same situation for cooling).

Man, I swear that the E+ output names are the most confusing things that I have encountered in my coding experience thus far.

I have now corrected all of the components involved with the requesting of this output and I have re-instantiated the economizer. You now see a very big jump in cooling energy between having/not having an economizer. Adding in the economizer now practically drops your entire cooling load to a third of its non-economizer value in San Francisco. Also, your cooling values are now generally a lot lower (both with and without economizer) because the outdoor air requirement does a lot of cooling for you, which you are seeing now that we are requesting the right output. If you change the outdoor air requirement to “None”, you get values close to that originally posted at the start of this discussion.

I have changed the default conditioned HBZone to now have an economizer and have an outdoor air requirement set by “Sum” since, as you say Burin, that is what ASHRAE recommends. You can still change this outdoor air input on the Set Ideal Air Loads Parameters component and I have made clear in the description that there is an assumption of demand controlled ventilation when the outdoor air is set to “Maximum”. The default conditioned HBZone does not have heat recovery but it seems to be working correctly now that we are requesting the right output.

Thanks again for sticking with this, Burin, and let me know if the attached GH file makes sense.

-Chris (548 KB)

Bless your soul. I don’t think I ever would have noticed that the wrong variable was being requested. I feel your pain - that was not an obvious error.

Thanks for fixing this. It appears to be running (and reporting) correctly now.