Short story: if you have clicked on "Use Ideal Air Loads" in the OS App next to the thermal Zone, you will want to request Zone Ventilation Mass Flow Rate [kg/s]
instead, as it uses a ZoneVentilation:DesignFlowRate
to mimic the DSOA, all output variables available for this object are here
I dug into the source code. There are two different thing that could be happening:
- If you clicked on a ThermalZone checkbox in the OS App to enable Ideal Air Loads (meaning
zone.setUseIdealAirLoads(true)
behind the scenes), you'll end up with an HVACTemplate:Zone:IdealLoadsAirSystem
which will get expanded by E+ as a ZoneHVAC:IdealLoadsAirSystem
by E+, but it won't have the DesignSpecific:OutdoorAir
(DSOA) object. Instead, a ZoneVentilation:DesignFlowRate
object is created to match the DSOA, so you can request the output variable Zone Ventilation Mass Flow Rate [kg/s]
- If you use the API, you can explicitly create a
ZoneHVACIdealLoadsAirSystem
and assign that as an actual equipment to the thermal Zone, and in this case the DSOA will be gotten and properly translated, and you can use the Output variable Zone Ideal Loads Outdoor Air Mass Flow Rate
Source:
Proof in action
Initial setup
In [1]:
# Create an Example model (1 Zone, 4 spaces, 1 spaceType)
m = OpenStudio::Model::exampleModel()
# It has one zone, connected to a AirLoopHVAC, we remove it
m.getAirLoopHVACs[0].remove
# Create a DSOA and assign to the only space Type in the model
space_type = m.getSpaceTypes[0]
dsoa = DesignSpecificationOutdoorAir.new(m)
dsoa.setOutdoorAirFlowAirChangesperHour(0.6)
dsoa.setName("DSOA 0.6 ACH")
Using an explicit ZoneHVACIdealLoadsAirSystem
In [2]:
# We create a ZoneHVACIdealLoadsAirSystem and add it to the thermal Zone
i = OpenStudio::Model::ZoneHVACIdealLoadsAirSystem.new(m)
i.addToThermalZone(z)
In [3]: puts i # Notice DSOA is empty...
Out[3]:
OS:ZoneHVAC:IdealLoadsAirSystem,
{03253713-01e8-44d8-a6a9-ea3509fdcbe0}, !- Handle
Zone HVAC Ideal Loads Air System 1, !- Name
, !- Availability Schedule Name
{79065160-831c-4d50-97bb-a32156865d3d}, !- Zone Supply Air Node Name
{846003a5-290c-490b-8623-3e59384f5dd3}, !- Zone Exhaust Air Node Name
, !- Maximum Heating Supply Air Temperature {C}
, !- Minimum Cooling Supply Air Temperature {C}
, !- Maximum Heating Supply Air Humidity Ratio {kg-H2O/kg-air}
, !- Minimum Cooling Supply Air Humidity Ratio {kg-H2O/kg-air}
, !- Heating Limit
, !- Maximum Heating Air Flow Rate {m3/s}
, !- Maximum Sensible Heating Capacity {W}
, !- Cooling Limit
, !- Maximum Cooling Air Flow Rate {m3/s}
, !- Maximum Total Cooling Capacity {W}
, !- Heating Availability Schedule Name
, !- Cooling Availability Schedule Name
, !- Dehumidification Control Type
, !- Cooling Sensible Heat Ratio {dimensionless}
, !- Humidification Control Type
, !- Design Specification Outdoor Air Object Name
, !- Demand Controlled Ventilation Type
, !- Outdoor Air Economizer Type
, !- Heat Recovery Type
, !- Sensible Heat Recovery Effectiveness {dimensionless}
; !- Latent Heat Recovery Effectiveness {dimensionless}
In [4]:
# Translate to E+
w = ft.translateModel(m)
# Show result
puts w.getObjectsByType("ZoneHVAC:IdealLoadsAirSystem".to_IddObjectType)
Out[4]:
ZoneHVAC:IdealLoadsAirSystem,
Zone HVAC Ideal Loads Air System 1, !- Name
, !- Availability Schedule Name
Node 3, !- Zone Supply Air Node Name
Node 2 ...
(more)
Do you have a thermostat defined for your zones? (optionally: can you upload your model somewhere and add a link in your question?)
Yes I have thermostat in my model. The other Output Variables like Zone Ideal Loads Zone Total Heating Energy, are okay.
So, I think you're requesting the right variable
Zone Ideal Loads Outdoor Air Mass Flow Rate
, so there must be something else at play here, your model would help troubleshooting.Check the resulting IDF file, to ensure the ZoneHVAC:IdealLoadsAirSystem does have its
Design Specification Outdoor Air Object Name
set correctly too.