NREL / OpenStudio

OpenStudio is a cross-platform collection of software tools to support whole building energy modeling using EnergyPlus and advanced daylight analysis using Radiance.
https://www.openstudio.net/
Other
500 stars 190 forks source link

Translation of control zone list for availability manager night cycle #4566

Open lymereJ opened 2 years ago

lymereJ commented 2 years ago

Issue overview

When forward translating availability manager night cycle objects, OpenStudio makes assumptions regarding the default control zones to include in the EnergyPlus input file. It appears that for the CycleOnAnyCoolingOrHeatingZone control type, some of these assumptions are limiting: Users should be able to model such objects with heating zone fan only zones specified but no heating control zones.

This is specifically the case when dealing with night cycle operation of VAV systems with parallel PIU terminal units where the desired behavior is to meet the load by running the terminal fan (central system fan is off).

Current Behavior

Currently, when not specified by the users, OpenStudio defaults both the heating control zones (heatingControlThermalZones) and heating zone fan only thermal zones (heatingZoneFansOnlyThermalZones) which prevents models to behave as described in the overview to happen: assigning zones to heatingControlThermalZones triggers the central system to come on during heating night cycle operations.

Expected Behavior

Users should be able to provide a list of zone under heating zone fan only (heatingZoneFansOnlyThermalZones) without having OpenStudio default the heating thermal zone (heatingControlThermalZones) to a list of all the zones served by the air loop.

Steps to Reproduce

defect_files.zip

Possible Solution

The code the default assumptions appears to be here.

Details

Some additional details about your environment for this issue (if relevant):

Context

This impacts the ASHRAE 90.1(-2019) Appendix G Baseline Automation feature of openstudio-standards. @dmaddoxwhite @mdahlhausen

jmarrec commented 2 years ago

@lymereJ thanks for the report.

I'm not 100%sure I'm following correctly. Given the behavior you seem to be looking for, I think CycleOnAnyHeatingZoneFansOnly is what you should be using (?). A cursory look at your AirLoopHVACs indicate you're using CycleOnAny, and that's just why OS is defaulting all the zonelists objects.

https://github.com/NREL/OpenStudio/blob/d39d697a2aa97984aeafeada0ec7563435632658/src/energyplus/ForwardTranslator/ForwardTranslateAvailabilityManagerNightCycle.cpp#L181-L193

Am I missing something here? If so, could you dumb it down for me, or maybe use a MCVE ? Your file has 5 airloophvacs, so I'm not sure where to look. At the very least some short explanation of which loop is given you troubles and what you expect the resulting IDF to look like would go a long way.

lymereJ commented 2 years ago

Thanks for following up @jmarrec! Sorry if the request was not clear. In short, for VAV systems using PIU terminals we want to cycle the zone fans when meeting a heating load (central fan must be off) and the central fan when meeting a cooling load. CycleOnAnyHeatingZoneFansOnly won't run the central system when meeting a cooling load, and CycleOnAnyCoolingOrHeatingZone will turn on the central fan during heating operation if zones are specified under Heating Control Zone or Zone List Name. It looks like, during the translation, OS currently defaults what zone(s) should be listed as Heating Control Zone or Zone List Name as shown here. I think that this should be left for the user to decide, especially because it seems to prevent the control strategy I describe here to be modeled.

The Availability Manager Night Cycle 8 in the defect file showcase this behavior.

jmarrec commented 2 years ago

@lymereJ So you want to end up with what object? This?

AvailabilityManager:NightCycle,
  VAV Sys 1 Avail,       !- Name
  SysAvailApplicSch,     !- Applicability Schedule Name
  FanAvailSched,         !- Fan Schedule Name
  CycleOnAnyCoolingOrHeatingZone,            !- Control Type
  4.0,                   !- Temperature Tolerance {delta C}
  7200.;                 !- Cycle Run Time {s}
  ,                      !- Control Zone or Zone List Name
  <zones>,                      !- Cooling Zone or Zone List Name
  ,                      !- Heating Control Zone or Zone List Name
  <zones>;                      !- Heating Zone Fans Only Zone or Zone List Name

I am not 100% sure how to retain the defaulting (which is useful for most cases) and allow the user to do as they please, but I think we could do: If any of the zone lists are filled out, then do not default anything. (the alternative is to add a Yes/No field to the object, like "Override OS defaults" but that seems like a bad idea)

https://github.com/NREL/OpenStudio/blob/d39d697a2aa97984aeafeada0ec7563435632658/src/energyplus/ForwardTranslator/ForwardTranslateAvailabilityManagerNightCycle.cpp#L115-L119

lymereJ commented 2 years ago

Yes, the object looks correct. What you proposed sounds good to me.