diff --git a/hub/exports/building_energy/idf.py b/hub/exports/building_energy/idf.py index f35f55a3..18f2f89d 100644 --- a/hub/exports/building_energy/idf.py +++ b/hub/exports/building_energy/idf.py @@ -56,10 +56,12 @@ class Idf: _SIMPLE = 'Simple' _EQUIPMENT_CONNECTIONS = 'ZONEHVAC:EQUIPMENTCONNECTIONS' _NODE_LIST = 'NODELIST' - _BASEBOARD ='ZONEHVAC:BASEBOARD:CONVECTIVE:ELECTRIC' - _AIR_TERMINAL_NO_REHEAT= 'AIRTERMINAL:SINGLEDUCT:CONSTANTVOLUME:NOREHEAT' - _AIR_DISTRIBUTION='ZONEHVAC:AIRDISTRIBUTIONUNIT' - _EQUIPMENT_LIST='ZONEHVAC:EQUIPMENTLIST' + _BASEBOARD = 'ZONEHVAC:BASEBOARD:CONVECTIVE:ELECTRIC' + _AIR_TERMINAL_NO_REHEAT = 'AIRTERMINAL:SINGLEDUCT:CONSTANTVOLUME:NOREHEAT' + _AIR_DISTRIBUTION = 'ZONEHVAC:AIRDISTRIBUTIONUNIT' + _EQUIPMENT_LIST = 'ZONEHVAC:EQUIPMENTLIST' + _SIZING_ZONE = 'SIZING:ZONE' + _DESIGN_SPECIFICATION_OUTDOOR_AIR = 'DESIGNSPECIFICATION:OUTDOORAIR' idf_surfaces = { cte.WALL: 'wall', @@ -400,7 +402,9 @@ class Idf: Zone_Return_Air_Node_or_NodeList_Name=f'{zone_name} Return Node List') def _add_nodelist_system(self, thermal_zone, zone_name): - self._idf.newidfobject(self._NODE_LIST, Name=f'{zone_name} Inlet Node List',Node_1_Name='Node 1') + self._idf.newidfobject(self._NODE_LIST, + Name=f'{zone_name} Inlet Node List', + Node_1_Name='Node 2') self._idf.newidfobject(self._NODE_LIST, Name=f'{zone_name} Return Node List', Node_1_Name='Node 3') @@ -418,8 +422,8 @@ class Idf: self._idf.newidfobject(self._AIR_TERMINAL_NO_REHEAT, Name=f'Diffuser', Availability_Schedule_Name='HVAC AVAIL', Air_Inlet_Node_Name='Node 4', - Air_Outlet_Node_Name='Node 2') - + Air_Outlet_Node_Name='Node 2', + Maximum_Air_Flow_Rate='AutoSize') def _add_air_distribution_system(self, thermal_zone, zone_name): for air_distribution in self._idf.idfobjects[self._AIR_DISTRIBUTION]: @@ -430,6 +434,7 @@ class Idf: Air_Distribution_Unit_Outlet_Node_Name='Node 2', Air_Terminal_Object_Type='AirTerminal:SingleDuct:ConstantVolume:NoReheat', Air_Terminal_Name='Diffuser') + def _add_equipment_list_system(self, thermal_zone, zone_name): for air_distribution in self._idf.idfobjects[self._EQUIPMENT_LIST]: if air_distribution.Zone_Name == zone_name: @@ -439,9 +444,27 @@ class Idf: Load_Distribution_Scheme='SequentialLoad', Zone_Equipment_1_Object_Type='ZoneHVAC:Baseboard:Convective:Electric', Zone_Equipment_1_Name='Elec Baseboard', + Zone_Equipment_1_Cooling_Sequence='1', Zone_Equipment_1_Heating_or_NoLoad_Sequence='1', Zone_Equipment_2_Object_Type='ZoneHVAC:AirDistributionUnit', - Zone_Equipment_2_Name ='ADU Diffuser') + Zone_Equipment_2_Name='ADU Diffuser', + Zone_Equipment_2_Cooling_Sequence='2', + Zone_Equipment_2_Heating_or_NoLoad_Sequence='2' + ) + + def _add_sizing_zone(self, thermal_zone, zone_name): + koa=self._idf.newidfobject(self._SIZING_ZONE, + Zone_or_ZoneList_Name=f'{zone_name}', + Zone_Cooling_Design_Supply_Air_Humidity_Ratio='0.0085', + Zone_Heating_Design_Supply_Air_Humidity_Ratio='0.008' + ) + + def _add_outdoor_air_design_specification(self, thermal_zone, zone_name): + self._idf.newidfobject(self._DESIGN_SPECIFICATION_OUTDOOR_AIR, + Name='MidriseApartment Apartment Ventilation', + Outdoor_Air_Method='Sum', + Outdoor_Air_Flow_per_Person='0.0169901079552') + def _add_occupancy(self, thermal_zone, zone_name): number_of_people = thermal_zone.occupancy.occupancy_density * thermal_zone.total_floor_area fraction_radiant = 0 @@ -607,6 +630,10 @@ class Idf: self._add_air_terminal_system(thermal_zone, building.name) self._add_air_distribution_system(thermal_zone, building.name) self._add_equipment_list_system(thermal_zone, building.name) + + self._add_sizing_zone(thermal_zone, building.name) + self._add_outdoor_air_design_specification(thermal_zone, building.name) + self._add_infiltration(thermal_zone, building.name) self._add_ventilation(thermal_zone, building.name) self._add_occupancy(thermal_zone, building.name)