Hi @MingboPeng
I’m modeling a school building using Honeybee + IronBug. The full model has around 88 thermal zones, and I am using a VRF + DOAS setup created with IronBug.
The intended system is:
VRF terminal units → zone cooling/heating
DOAS / ventilation loop:
Outdoor air → constant volume fan → single duct constant volume no reheat air terminals → zones
The DOAS is meant to be a simple outdoor air ventilation system, without heat recovery and without cooling/heating coils. The VRF handles the zone loads.
I calculated a fixed outdoor air flow rate for each room, for example:
SESI-3LEV-CLASSROOM_1 = 0.305385 m³/s
SESI-3LEV-COMPUTERS_1 = 0.314520 m³/s
SESI-2LEV-OFFICE_2 = 0.031789 m³/s
In Grasshopper/IronBug, I assigned these values to the room air terminals. The fan and air loop received the total system flow rate.
In a simplified test with only one group of 12 rooms, the result seemed correct. However, when I applied the same logic to the complete model with several VRF + DOAS systems, the outdoor air flow started behaving as if it was being autosized.
After checking the exported IDF, I found that the room air terminals were still exported with Autosize:
AirTerminal:SingleDuct:ConstantVolume:NoReheat,
Air Terminal Single Duct Constant Volume No Reheat 29,
Always On Discrete,
Node 147,
Node 145,
AutoSize; !- Maximum Air Flow Rate {m3/s}
The fans were also exported with Autosize:
Fan:ConstantVolume,
Fan Constant Volume 1,
Always On Discrete,
0.7,
500,
AutoSize, !- Maximum Flow Rate {m3/s}
0.9,
1,
Node 1,
Node 2;
And the ZoneHVAC:TerminalUnit:VariableRefrigerantFlow objects also had the outdoor air fields as Autosize:
Autosize, !- Cooling Outdoor Air Flow Rate {m3/s}
Autosize, !- Heating Outdoor Air Flow Rate {m3/s}
Autosize, !- No Load Outdoor Air Flow Rate {m3/s}
This caused the HTML sizing report, especially:
Outdoor Air Volume Flow Rate at Ideal Loads Peak
to use the autosized/calculated values instead of my fixed room outdoor air values.
I eventually solved the issue by post-processing the exported IDF with a Python script. The script:
1. Sets each AirTerminal:SingleDuct:ConstantVolume:NoReheat
Maximum Air Flow Rate to the room outdoor air flow.
2. Sets each Fan:ConstantVolume
Maximum Flow Rate to the total flow of its system.
3. Sets each AirLoopHVAC
Design Supply Air Flow Rate to the same system total.
4. Sets each ZoneHVAC:TerminalUnit:VariableRefrigerantFlow:
Cooling Outdoor Air Flow Rate
Heating Outdoor Air Flow Rate
No Load Outdoor Air Flow Rate
to the same room outdoor air flow.
After this correction, the outdoor air results matched the expected values.
My question is:
Is this expected behavior when using IronBug VRF + DOAS, or should IronBug preserve the fixed outdoor air flow values from Grasshopper in the exported IDF?
More specifically:
My main question is:
For a VRF + DOAS system in IronBug, what is the correct way to model a simple fan-only outdoor air system with fixed room-by-room outdoor air flow rates?
Should these fixed OA values be written only to the DOAS air terminals, or also to the VRF terminal outdoor air flow fields?
And if the air terminal, fan, and air loop flow rates are explicitly set in Grasshopper, should they be exported as fixed values in the IDF instead of Autosize?
One thing I noticed in the full model is that the IDF had many OutdoorAir:Mixer objects related to the VRF terminals, but no AirLoopHVAC:OutdoorAirSystem or Controller:OutdoorAir:
OutdoorAir:Mixer = 88
AirLoopHVAC:OutdoorAirSystem = 0
Controller:OutdoorAir = 0
Controller:MechanicalVentilation = 0
So I am not sure whether the DOAS part of the system is being represented as a true outdoor air system at the air loop level, or whether EnergyPlus is still mainly relying on the VRF terminal outdoor air fields.
Thanks for any guidance. I would like to know whether my Python post-processing workaround is the correct approach for now, or if there is a better way to set this up directly in IronBug/Honeybee.