Open jmarrec opened 3 years ago
here is a ruby MCVE
m = Model.new
a = AirLoopHVAC.new(m)
controller = ControllerOutdoorAir.new(m)
oa = AirLoopHVACOutdoorAirSystem.new(m, controller)
oa.addToNode(a.supplyInletNode)
fan = FanVariableVolume.new(m)
fan.addToNode(a.supplyInletNode)
z = ThermalZone.new(m)
atu = AirTerminalSingleDuctConstantVolumeNoReheat.new(m, m.alwaysOnDiscreteSchedule)
a.addBranchForZone(z, atu)
# We need a ThermalZone, with at least one equipment (or useIdealAirLoads) AND a DesignDay, for the Sizing:Zone to be translated
# And it is the Sizing:Zone translation that is populating the
# Controller:MechanicalVentilation
dd = DesignDay.new(m)
pts = OpenStudio::Point3dVector.new; pts << OpenStudio::Point3d.new(0, 0, 0); pts << OpenStudio::Point3d.new(0, 1, 0); pts << OpenStudio::Point3d.new(1, 1, 0); pts << OpenStudio::Point3d.new(1, 0, 0);
space = Space::fromFloorPrint(pts, 3, m).get()
space.setThermalZone(z)
w = ft.translateModel(m)
puts w.getObjectsByType('Controller:MechanicalVentilation')
Controller:MechanicalVentilation,
Controller Mechanical Ventilation 1, !- Name
Always On Discrete, !- Availability Schedule Name
No, !- Demand Controlled Ventilation
ZoneSum, !- System Outdoor Air Method
, !- Zone Maximum Outdoor Air Fraction {dimensionless}
Thermal Zone 1, !- Zone or ZoneList Name 1
, !- Design Specification Outdoor Air Object Name 1
; !- Design Specification Zone Air Distribution Object Name 1
Issue overview
Whenever you add an
AirLoopHVAC:OutdoorAirSystem
, aController:MechanicalVentilation
is always translated and adds all thermalZones even those voluntarily withoutDesignSpecification:OutdoorAir
(DSOA)Current Behavior
As reported in https://unmethours.com/question/51739/design-specification-outdoor-air-object-name-blank/?comment=51798#post-id-51798, the user is trying to hardsize everything and explicitly not rely on any
DesignSpecification:OutdoorAir
(DSOA). I reviewed his AirLoopHVAC with does have hardsized terminals for all zones served.The resulting
Controller:MechanicalVentilation
in IDF is as follows:As a result, the
eplusout.err
reports:Expected Behavior
Steps to Reproduce
1.Check out model https://wetransfer.com/downloads/54ebbd3f8e0c4cd37359167956ca147c20210218125926/415498
Possible Solution
https://github.com/NREL/OpenStudio/blob/988dd3fcb92a7eea4a879e9543d4e2132c8ffe43/src/energyplus/ForwardTranslator/ForwardTranslateSizingZone.cpp#L267-L295
We should not push an extensible group if it's going to be empty, should we? Well not really, empty, as it's valid per IDD, but when there is no DSOA attached to the zone at all?
https://bigladdersoftware.com/epx/docs/9-4/input-output-reference/group-controllers.html#field-design-specification-outdoor-air-object-name-x
Details
Environment
Some additional details about your environment for this issue (if relevant):
Context