openstudio-standards 0.2.16 → 0.2.17.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/data/standards/manage_OpenStudio_Standards.rb +31 -4
- data/lib/openstudio-standards/btap/geometry.rb +1 -1
- data/lib/openstudio-standards/hvac_sizing/Siz.HeatingCoolingFuels.rb +354 -2
- data/lib/openstudio-standards/hvac_sizing/Siz.ThermalZone.rb +79 -0
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.College.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Laboratory.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/do_not_edit_metaclasses.rb +3313 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Fan.rb +12 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +3 -4
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.SizingSystem.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +167 -93
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb +2 -4
- data/lib/openstudio-standards/prototypes/common/prototype_metaprogramming.rb +1 -0
- data/lib/openstudio-standards/refs/references.rb +3 -0
- data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +279 -6
- data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctParallelPIUReheat.rb +50 -2
- data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +4 -0
- data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +0 -1
- data/lib/openstudio-standards/standards/Standards.Construction.rb +185 -3
- data/lib/openstudio-standards/standards/Standards.Fan.rb +14 -6
- data/lib/openstudio-standards/standards/Standards.HeatExchangerSensLat.rb +1 -0
- data/lib/openstudio-standards/standards/Standards.Model.rb +1751 -383
- data/lib/openstudio-standards/standards/Standards.PlanarSurface.rb +130 -9
- data/lib/openstudio-standards/standards/Standards.PlantLoop.rb +50 -3
- data/lib/openstudio-standards/standards/Standards.ScheduleCompact.rb +44 -0
- data/lib/openstudio-standards/standards/Standards.ScheduleConstant.rb +27 -0
- data/lib/openstudio-standards/standards/Standards.ScheduleRuleset.rb +543 -0
- data/lib/openstudio-standards/standards/Standards.Space.rb +665 -15
- data/lib/openstudio-standards/standards/Standards.SpaceType.rb +141 -4
- data/lib/openstudio-standards/standards/Standards.SubSurface.rb +2 -1
- data/lib/openstudio-standards/standards/Standards.Surface.rb +117 -0
- data/lib/openstudio-standards/standards/Standards.ThermalZone.rb +197 -49
- data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +41 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.Model.rb +6 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/ashrae_90_1.schedules.json +45 -45
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/comstock_ashrae_90_1_2004.spc_typ.json +7 -7
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/ashrae_90_1.schedules.json +45 -45
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/comstock_ashrae_90_1_2007.spc_typ.json +7 -7
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/ashrae_90_1.schedules.json +45 -45
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/comstock_ashrae_90_1_2010.spc_typ.json +9 -9
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/ashrae_90_1.schedules.json +45 -45
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/comstock_ashrae_90_1_2013.spc_typ.json +4 -4
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/data/ashrae_90_1.schedules.json +45 -45
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/data/comstock_ashrae_90_1_2016.spc_typ.json +5 -5
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +5 -5
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/data/ashrae_90_1.schedules.json +45 -45
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/data/comstock_ashrae_90_1_2019.spc_typ.json +5 -5
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.constructions.json +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.fans.json +12 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/ashrae_90_1.schedules.json +45 -45
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/comstock_doe_ref_1980_2004.spc_typ.json +10 -10
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/ashrae_90_1.schedules.json +45 -45
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/comstock_doe_ref_pre_1980.spc_typ.json +10 -10
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirLoopHVAC.rb +792 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirTerminalSingleDuctParallelPIUReheat.rb +10 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirTerminalSingleDuctVAVReheat.rb +31 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.BoilerHotWater.rb +91 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.ChillerElectricEIR.rb +84 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXSingleSpeed.rb +145 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXTwoSpeed.rb +106 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilDX.rb +71 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilHeatingDXSingleSpeed.rb +194 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilHeatingGas.rb +120 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoolingTower.rb +110 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoolingTowerVariableSpeed.rb +5 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Fan.rb +73 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanConstantVolume.rb +5 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanOnOff.rb +5 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanVariableVolume.rb +24 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanZoneExhaust.rb +5 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.HeatExchangerSensLat.rb +55 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Model.rb +3045 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.PlanarSurface.rb +187 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.PlantLoop.rb +450 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Space.rb +106 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.SpaceType.rb +666 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Surface.rb +54 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.ThermalZone.rb +168 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.ZoneHVACComponent.rb +132 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.rb +239 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019.Model.rb +176 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019.rb +25 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.boilers.json +52 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.chillers.json +112 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.climate_zone_sets.json +210 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.construction_properties.json +10384 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.construction_sets.json +133 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.furnaces.json +43 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.heat_pumps.json +119 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.heat_pumps_heating.json +130 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.heat_rejection.json +13 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.lpd_space_type.json +568 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.motors.json +264 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_baseline_hvac.json +439 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_constructions.json +685 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_economizers.json +213 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_ext_ltg.json +32 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_heat_type.json +136 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_hvac_bldg_type.json +32 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_interior_lighting.json +1837 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_swh_bldg_type.json +184 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_wwr_bldg_type.json +84 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.unitary_acs.json +148 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.water_heaters.json +157 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/data/ashrae_90_1_prm.climate_zone_sets.json +210 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/data/ashrae_90_1_prm.curves.json +18329 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/data/ashrae_90_1_prm.fans.json +340 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/data/ashrae_90_1_prm.materials.json +49924 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/baseline_building_rotation_exception.md +44 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/check_pump_power_and_control.md +71 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/dcv.md +68 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/dcv_implementation.png +0 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/elevators.md +14 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/exhaust_air_energy_recovery.md +36 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/f_c_factors.md +19 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/fan_power_credits.md +15 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/preheat_coil.md +59 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/pump_power_control.md +46 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/return_air_type.md +31 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/set_baseline_wwr.md +191 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/set_hw_and_chw_supply_water_temp_reset_control.md +24 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/set_num_boilers_chillers_towers.md +49 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/set_plug_load_measures.md +80 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/set_space_lpd.md +73 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/unenclosed_and_unconditioned_spaces.md +11 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/unmet_load_hours.md +20 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/vav_parallel_piu_terminals_fan_control.md +23 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/vav_terminals_min_flow_setpoint.md +21 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_airloop_hvac.csv +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_airloop_hvac_doas.csv +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_building.csv +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_design_specification_outdoor_air.csv +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_electric_equipment.csv +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_exterior_lights.csv +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_gas_equipment.csv +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_lights.csv +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_space.csv +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_spacetype.csv +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_thermal_zone.csv +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_wateruse_connections.csv +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_wateruse_equipment.csv +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_wateruse_equipment_definition.csv +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_zone_hvac.csv +1 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_zone_infiltration.csv +1 -0
- data/lib/openstudio-standards/standards/cbes/data/cbes.fans.json +12 -0
- data/lib/openstudio-standards/standards/deer/data/deer.fans.json +12 -0
- data/lib/openstudio-standards/standards/necb/ECMS/data/heat_pumps.json +1 -1
- data/lib/openstudio-standards/standards/necb/ECMS/data/heat_pumps_heating.json +1 -1
- data/lib/openstudio-standards/standards/necb/ECMS/data/unitary_acs.json +24 -11
- data/lib/openstudio-standards/standards/necb/ECMS/erv.rb +13 -15
- data/lib/openstudio-standards/standards/necb/NECB2011/data/province_map.json +17 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_multi_speed.rb +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_single_speed.rb +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_4.rb +2 -2
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_6.rb +6 -5
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +3 -2
- data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +2 -3
- data/lib/openstudio-standards/standards/necb/NECB2020/data/chillers.json +2 -2
- data/lib/openstudio-standards/standards/necb/NECB2020/data/space_types.json +33 -924
- data/lib/openstudio-standards/standards/necb/NECB2020/data/unitary_acs.json +15 -15
- data/lib/openstudio-standards/standards/necb/common/btap_data.rb +135 -29
- data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +16 -4
- data/lib/openstudio-standards/standards/necb/common/neb_end_use_prices.csv +40 -42
- data/lib/openstudio-standards/standards/necb/common/necb_reference_runs.csv +1 -1
- data/lib/openstudio-standards/standards/necb/common/space_type_upgrade_map.json +89 -89
- data/lib/openstudio-standards/utilities/array.rb +11 -0
- data/lib/openstudio-standards/utilities/logging.rb +48 -0
- data/lib/openstudio-standards/utilities/object_info.rb +20 -0
- data/lib/openstudio-standards/utilities/schedule_translator.rb +348 -0
- data/lib/openstudio-standards/utilities/sqlfile.rb +68 -0
- data/lib/openstudio-standards/version.rb +2 -2
- data/lib/openstudio-standards/weather/Weather.Model.rb +42 -55
- data/lib/openstudio-standards/weather/Weather.stat_file.rb +1 -1
- data/lib/openstudio-standards.rb +35 -1
- metadata +111 -6
- data/data/standards/OpenStudio_Standards-ashrae_90_1.xlsx +0 -0
- data/data/standards/OpenStudio_Standards-ashrae_90_1_28Jan2022.xlsx +0 -0
- data/data/standards/OpenStudio_Standards-ashrae_90_1_28_Jan2022_2.xlsx +0 -0
- data/data/standards/openstudio_standards_duplicates_log.csv +0 -143
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 39b582fa207724f31d5a3910ad4bf6c63cfe98724909cace2709ba682e118c00
|
4
|
+
data.tar.gz: 8b4664e527a26076997689401b42166c457c60545be6c71f2d9c2c01d4c60e20
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '08d48a15ccc05be7aeb412e9b1c87a895122e974cd997ae910a5542ecd740087b259ca9ee679d38b4e6f2a3ec98a3fb6dca76ff7a89093c8ae22a1de6c8a2d7b'
|
7
|
+
data.tar.gz: a1e8906ce8b024a09fe2d7c538d6c89281a9348722131cd0e5c2d6c78ca6f12bb20198bfd4716db94bbbb2f2db0a0f6468834549e2d772ed6e868888f554328f
|
@@ -84,6 +84,10 @@ def unique_properties(sheet_name)
|
|
84
84
|
return case sheet_name
|
85
85
|
when 'templates', 'standards', 'climate_zone_sets', 'constructions', 'curves', 'fans'
|
86
86
|
['name']
|
87
|
+
when 'prm_constructions'
|
88
|
+
['template', 'name']
|
89
|
+
when 'prm_exterior_lighting'
|
90
|
+
['template']
|
87
91
|
when 'materials'
|
88
92
|
['name', 'code_category']
|
89
93
|
when 'space_types', 'space_types_lighting', 'space_types_rendering_color', 'space_types_ventilation', 'space_types_occupancy', 'space_types_infiltration', 'space_types_equipment', 'space_types_thermostats', 'space_types_swh', 'space_types_exhaust'
|
@@ -128,6 +132,8 @@ def unique_properties(sheet_name)
|
|
128
132
|
['template', 'compressor_name', 'compressor_type']
|
129
133
|
when 'economizers'
|
130
134
|
['template', 'climate_zone', 'data_center']
|
135
|
+
when 'prm_economizers'
|
136
|
+
['template', 'climate_ID']
|
131
137
|
when 'motors'
|
132
138
|
['template', 'number_of_poles', 'type', 'synchronous_speed', 'minimum_capacity', 'maximum_capacity']
|
133
139
|
when 'ground_temperatures'
|
@@ -148,9 +154,23 @@ def unique_properties(sheet_name)
|
|
148
154
|
['template', 'climate_zone', 'under_8000_hours', 'nontransient_dwelling', 'enthalpy_recovery_ratio_design_conditions']
|
149
155
|
when 'space_types_lighting_control'
|
150
156
|
['template', 'building_type', 'space_type']
|
157
|
+
when 'prm_hvac_bldg_type'
|
158
|
+
['template', 'hvac_building_type']
|
159
|
+
when 'prm_swh_bldg_type'
|
160
|
+
['template', 'swh_building_type']
|
161
|
+
when 'prm_wwr_bldg_type'
|
162
|
+
['template', 'wwr_building_type']
|
163
|
+
when 'prm_baseline_hvac'
|
164
|
+
['template', 'hvac_building_type', 'bldg_area_min', 'bldg_area_max', 'bldg_flrs_min', 'bldg_flrs_max']
|
165
|
+
when 'prm_heat_type'
|
166
|
+
['template', 'hvac_building_type', 'climate_zone']
|
167
|
+
when 'prm_interior_lighting'
|
168
|
+
['template', 'lpd_space_type']
|
169
|
+
when 'lpd_space_type'
|
170
|
+
['template', 'lpd_space_type']
|
151
171
|
else
|
152
172
|
[]
|
153
|
-
|
173
|
+
end
|
154
174
|
end
|
155
175
|
|
156
176
|
# Shortens JSON file path names to avoid Windows build errors when
|
@@ -316,6 +336,7 @@ def export_spreadsheet_to_json(spreadsheet_titles, dataset_type: 'os_stds')
|
|
316
336
|
|
317
337
|
# Open workbook
|
318
338
|
workbook = RubyXL::Parser.parse(xlsx_path)
|
339
|
+
puts "After parse workbook"
|
319
340
|
|
320
341
|
# Find all the template directories that match the search criteria embedded in the spreadsheet title
|
321
342
|
dirs = spreadsheet_title.gsub('OpenStudio_Standards-', '').gsub(/\(\w*\)/, '').split('-')
|
@@ -323,7 +344,8 @@ def export_spreadsheet_to_json(spreadsheet_titles, dataset_type: 'os_stds')
|
|
323
344
|
dirs.each { |d| d == 'ALL' ? new_dirs << '*' : new_dirs << "*#{d}*" }
|
324
345
|
glob_string = "#{standards_dir}/#{new_dirs.join('/')}"
|
325
346
|
puts "--spreadsheet title embedded search criteria: #{glob_string} yields:"
|
326
|
-
template_dirs = Dir.glob(glob_string).select { |f| File.directory?(f) && !f.include?('data') }
|
347
|
+
# template_dirs = Dir.glob(glob_string).select { |f| File.directory?(f) && !f.include?('data') && !f.include?('prm')}
|
348
|
+
template_dirs = Dir.glob(glob_string).select { |f| File.directory?(f) && !f.include?('data')}
|
327
349
|
template_dirs.each do |template_dir|
|
328
350
|
puts "----#{template_dir}"
|
329
351
|
end
|
@@ -462,7 +484,7 @@ def export_spreadsheet_to_json(spreadsheet_titles, dataset_type: 'os_stds')
|
|
462
484
|
end
|
463
485
|
new_obj['climate_zones'] = items
|
464
486
|
objs << new_obj
|
465
|
-
elsif sheet_name == 'constructions'
|
487
|
+
elsif sheet_name == 'constructions' or sheet_name == 'prm_constructions'
|
466
488
|
new_obj = {}
|
467
489
|
new_obj['name'] = obj['name']
|
468
490
|
items = []
|
@@ -607,10 +629,15 @@ def export_spreadsheet_to_json(spreadsheet_titles, dataset_type: 'os_stds')
|
|
607
629
|
sorted_objs = {sheet_name => objs}.sort_by_key_updated(true) {|x, y| x.to_s <=> y.to_s}
|
608
630
|
|
609
631
|
# Also check directly underneath the parent directory
|
610
|
-
|
632
|
+
if /prm/.match(template_dir_name) && !/prm/.match(parent_dir)
|
633
|
+
child_dir = "#{standards_dir}/#{parent_dir}_prm/#{template_dir_name}"
|
634
|
+
else
|
635
|
+
child_dir = "#{standards_dir}/#{parent_dir}/#{template_dir_name}"
|
636
|
+
end
|
611
637
|
additional_dirs = []
|
612
638
|
additional_dirs << child_dir if Dir.exist?(child_dir)
|
613
639
|
possible_template_dirs = template_dirs + additional_dirs
|
640
|
+
puts "Additional dir = #{child_dir}"
|
614
641
|
|
615
642
|
wrote_json = false
|
616
643
|
possible_template_dirs.each do |template_dir|
|
@@ -3752,7 +3752,7 @@ module BTAP
|
|
3752
3752
|
if point_b1[:x] == point_b2[:x]
|
3753
3753
|
xcross = point_b2[:x]
|
3754
3754
|
# If the line is horizontal you cannot find the y intercept
|
3755
|
-
elsif point_b1[:y] == point_b2[:
|
3755
|
+
elsif (point_b1[:y] == point_b2[:y])
|
3756
3756
|
raise("This line is horizontal so no y intercept can be found.")
|
3757
3757
|
# Otherwise determine the line coefficients and get the intercept
|
3758
3758
|
else
|
@@ -196,6 +196,358 @@ class OpenStudio::Model::Model
|
|
196
196
|
|
197
197
|
end
|
198
198
|
|
199
|
+
# Get type of heat for coil for Appendix G system type selections
|
200
|
+
#
|
201
|
+
# @param heating_coil [object]
|
202
|
+
# @return string description of heat type: Fuel, Electric, District, HeatPump, Solar, Mixed
|
203
|
+
def coil_heat_type(heating_coil)
|
204
|
+
fuels = []
|
205
|
+
heat_type = ''
|
206
|
+
# Get the object type
|
207
|
+
obj_type = heating_coil.iddObjectType.valueName.to_s
|
208
|
+
case obj_type
|
209
|
+
when 'OS_Coil_Heating_DX_MultiSpeed'
|
210
|
+
heat_type = 'HeatPump'
|
211
|
+
when 'OS_Coil_Heating_DX_SingleSpeed'
|
212
|
+
heat_type = 'HeatPump'
|
213
|
+
when 'OS_Coil_Heating_DX_VariableRefrigerantFlow'
|
214
|
+
heat_type = 'HeatPump'
|
215
|
+
when 'OS_Coil_Heating_DX_VariableSpeed'
|
216
|
+
heat_type = 'HeatPump'
|
217
|
+
when 'OS_Coil_Heating_Desuperheater'
|
218
|
+
heat_type = 'Electric'
|
219
|
+
when 'OS_Coil_Heating_Electric'
|
220
|
+
heat_type = 'Electric'
|
221
|
+
when 'OS_Coil_Heating_Gas'
|
222
|
+
heat_type = 'Fuel'
|
223
|
+
when 'OS_Coil_Heating_Gas_MultiStage'
|
224
|
+
heat_type = 'Fuel'
|
225
|
+
when 'OS_Coil_Heating_Water'
|
226
|
+
heating_coil = heating_coil.to_CoilHeatingWater.get
|
227
|
+
if heating_coil.plantLoop.is_initialized
|
228
|
+
fuels += self.plant_loop_heating_fuels(heating_coil.plantLoop.get)
|
229
|
+
end
|
230
|
+
when 'OS_Coil_Heating_Water_BaseboardRadiant'
|
231
|
+
heating_coil = heating_coil.to_CoilHeatingWaterBaseboardRadiant.get
|
232
|
+
if heating_coil.plantLoop.is_initialized
|
233
|
+
fuels += self.plant_loop_heating_fuels(heating_coil.plantLoop.get)
|
234
|
+
end
|
235
|
+
when 'OS_Coil_Heating_WaterToAirHeatPump_EquationFit'
|
236
|
+
fuels << 'Electricity'
|
237
|
+
heating_coil = heating_coil.to_CoilHeatingWaterToAirHeatPumpEquationFit.get
|
238
|
+
if heating_coil.plantLoop.is_initialized
|
239
|
+
fuels += self.plant_loop_heating_fuels(heating_coil.plantLoop.get)
|
240
|
+
end
|
241
|
+
when 'OS_Coil_Heating_WaterToAirHeatPump_VariableSpeedEquationFit'
|
242
|
+
fuels << 'Electricity'
|
243
|
+
heating_coil = heating_coil.to_CoilHeatingWaterToAirHeatPumpVariableSpeedEquationFit.get
|
244
|
+
if heating_coil.plantLoop.is_initialized
|
245
|
+
fuels += self.plant_loop_heating_fuels(heating_coil.plantLoop.get)
|
246
|
+
end
|
247
|
+
when 'OS_Coil_Heating_LowTemperatureRadiant_ConstantFlow'
|
248
|
+
heating_coil = heating_coil.to_CoilHeatingLowTempRadiantConstFlow.get
|
249
|
+
if heating_coil.plantLoop.is_initialized
|
250
|
+
fuels += self.plant_loop_heating_fuels(heating_coil.plantLoop.get)
|
251
|
+
end
|
252
|
+
when 'OS_Coil_Heating_LowTemperatureRadiant_VariableFlow'
|
253
|
+
heating_coil = heating_coil.to_CoilHeatingLowTempRadiantVarFlow.get
|
254
|
+
if heating_coil.plantLoop.is_initialized
|
255
|
+
fuels += self.plant_loop_heating_fuels(heating_coil.plantLoop.get)
|
256
|
+
end
|
257
|
+
when 'OS_Coil_WaterHeating_AirToWaterHeatPump'
|
258
|
+
heat_type = 'Electricity'
|
259
|
+
when 'OS_Coil_WaterHeating_Desuperheater'
|
260
|
+
heat_type = 'Electricity'
|
261
|
+
else
|
262
|
+
OpenStudio::logFree(OpenStudio::Debug, 'openstudio.sizing.Model', "No heating fuel types found for #{obj_type}")
|
263
|
+
end
|
264
|
+
|
265
|
+
has_electric = false
|
266
|
+
has_fuel = false
|
267
|
+
has_district = false
|
268
|
+
has_solar = false
|
269
|
+
has_hp = false
|
270
|
+
if fuels.size > 0
|
271
|
+
fuels.sort.each do |fuel|
|
272
|
+
case fuel
|
273
|
+
when 'Electricity'
|
274
|
+
has_electric = true
|
275
|
+
when 'DistrictHeating'
|
276
|
+
has_district = true
|
277
|
+
when 'SolarEnergy'
|
278
|
+
has_solar = true
|
279
|
+
when 'NaturalGas', 'PropaneGas', 'Coal', 'Diesel'
|
280
|
+
has_fuel = true
|
281
|
+
when 'FuelOilNo1', 'FuelOilNo2'
|
282
|
+
has_fuel = true
|
283
|
+
end
|
284
|
+
end
|
285
|
+
end
|
286
|
+
|
287
|
+
# Choose only one heat type, or Mixed if there are multiple
|
288
|
+
if heat_type == ''
|
289
|
+
if has_fuel == true
|
290
|
+
heat_type = 'Fuel'
|
291
|
+
end
|
292
|
+
if has_district == true && heat_type != 'District'
|
293
|
+
if heat_type == ''
|
294
|
+
heat_type = 'District'
|
295
|
+
else
|
296
|
+
heat_type = 'Mixed'
|
297
|
+
end
|
298
|
+
end
|
299
|
+
if has_electric == true && heat_type != 'Electric'
|
300
|
+
if heat_type == ''
|
301
|
+
heat_type = 'Electric'
|
302
|
+
else
|
303
|
+
heat_type = 'Mixed'
|
304
|
+
end
|
305
|
+
end
|
306
|
+
if has_solar == true && heat_type != 'Solar'
|
307
|
+
if heat_type == ''
|
308
|
+
heat_type = 'Solar'
|
309
|
+
else
|
310
|
+
heat_type = 'Mixed'
|
311
|
+
end
|
312
|
+
end
|
313
|
+
if has_hp == true && heat_type != 'HeatPump'
|
314
|
+
if heat_type == ''
|
315
|
+
heat_type = 'HeatPump'
|
316
|
+
elsif heat_type != 'HeatPump'
|
317
|
+
heat_type = 'Mixed'
|
318
|
+
end
|
319
|
+
end
|
320
|
+
end
|
321
|
+
|
322
|
+
return heat_type
|
323
|
+
end
|
324
|
+
|
325
|
+
# Get primary type of heat for one air loop for Appendix G system type selections
|
326
|
+
#
|
327
|
+
# @param air_loop [object]
|
328
|
+
# @return string description of heat type: Fuel, Electric, District, HeatPump, Solar, Mixed
|
329
|
+
def airloop_primary_heat_type(air_loop)
|
330
|
+
|
331
|
+
heat_types = []
|
332
|
+
air_loop.supplyComponents.each do |component|
|
333
|
+
# Get the object type
|
334
|
+
obj_type = component.iddObjectType.valueName.to_s
|
335
|
+
case obj_type
|
336
|
+
when 'OS_AirLoopHVAC_UnitaryHeatCool_VAVChangeoverBypass'
|
337
|
+
component = component.to_AirLoopHVACUnitaryHeatCoolVAVChangeoverBypass.get
|
338
|
+
heat_types << self.coil_heat_type(component.heatingCoil)
|
339
|
+
when 'OS_AirLoopHVAC_UnitaryHeatPump_AirToAir'
|
340
|
+
component = component.to_AirLoopHVACUnitaryHeatPumpAirToAir.get
|
341
|
+
heat_types << self.coil_heat_type(component.heatingCoil)
|
342
|
+
when 'OS_AirLoopHVAC_UnitaryHeatPump_AirToAir_MultiSpeed'
|
343
|
+
component = component.to_AirLoopHVACUnitaryHeatPumpAirToAirMultiSpeed.get
|
344
|
+
heat_types << self.coil_heat_type(component.heatingCoil)
|
345
|
+
when 'OS_AirLoopHVAC_UnitarySystem'
|
346
|
+
component = component.to_AirLoopHVACUnitarySystem.get
|
347
|
+
if component.heatingCoil.is_initialized
|
348
|
+
heat_types << self.coil_heat_type(component.heatingCoil.get)
|
349
|
+
end
|
350
|
+
when 'OS_Coil_Heating_DX_MultiSpeed'
|
351
|
+
heat_types << self.coil_heat_type(component)
|
352
|
+
when 'OS_Coil_Heating_DX_SingleSpeed'
|
353
|
+
heat_types << self.coil_heat_type(component)
|
354
|
+
when 'OS_Coil_Heating_DX_VariableSpeed'
|
355
|
+
heat_types << self.coil_heat_type(component)
|
356
|
+
when 'OS_Coil_Heating_Desuperheater'
|
357
|
+
heat_types << self.coil_heat_type(component)
|
358
|
+
when 'OS_Coil_Heating_Electric'
|
359
|
+
heat_types << self.coil_heat_type(component)
|
360
|
+
when 'OS_Coil_Heating_Gas'
|
361
|
+
heat_types << self.coil_heat_type(component)
|
362
|
+
when 'OS_Coil_Heating_Gas_MultiStage'
|
363
|
+
heat_types << self.coil_heat_type(component)
|
364
|
+
when 'OS_Coil_Heating_Water'
|
365
|
+
heat_types << self.coil_heat_type(component)
|
366
|
+
when 'OS_Coil_Heating_WaterToAirHeatPump_EquationFit'
|
367
|
+
heat_types << self.coil_heat_type(component)
|
368
|
+
when 'OS_Coil_Heating_WaterToAirHeatPump_VariableSpeed_EquationFit'
|
369
|
+
heat_types << self.coil_heat_type(component)
|
370
|
+
when 'OS_Coil_WaterHeating_AirToWaterHeatPump'
|
371
|
+
heat_types << self.coil_heat_type(component)
|
372
|
+
when 'OS_Coil_WaterHeating_Desuperheater'
|
373
|
+
heat_types << self.coil_heat_type(component)
|
374
|
+
when 'OS_Node', 'OS_Fan_ConstantVolume', 'OS_Fan_VariableVolume', 'OS_AirLoopHVAC_OutdoorAirSystem'
|
375
|
+
# To avoid extraneous debug messages
|
376
|
+
else
|
377
|
+
#OpenStudio::logFree(OpenStudio::Debug, 'openstudio.sizing.Model', "No heating fuel types found for #{obj_type}")
|
378
|
+
end
|
379
|
+
end
|
380
|
+
|
381
|
+
has_electric = false
|
382
|
+
has_fuel = false
|
383
|
+
has_district = false
|
384
|
+
has_solar = false
|
385
|
+
has_hp = false
|
386
|
+
has_mixed = false
|
387
|
+
if heat_types.size > 0
|
388
|
+
heat_types.sort.each do |heat_type|
|
389
|
+
case heat_type
|
390
|
+
when 'Electricity', 'Electric'
|
391
|
+
has_electric = true
|
392
|
+
when 'DistrictHeating', 'District'
|
393
|
+
has_district = true
|
394
|
+
when 'SolarEnergy', 'Solar'
|
395
|
+
has_solar = true
|
396
|
+
when 'NaturalGas', 'Fuel', 'PropaneGas', 'Coal', 'Diesel'
|
397
|
+
has_fuel = true
|
398
|
+
when 'FuelOilNo1', 'FuelOilNo2'
|
399
|
+
has_fuel = true
|
400
|
+
when 'HeatPump'
|
401
|
+
has_hp = true
|
402
|
+
when 'Mixed'
|
403
|
+
has_mixed = true
|
404
|
+
end
|
405
|
+
end
|
406
|
+
end
|
407
|
+
|
408
|
+
# Choose only one heat type, or Mixed if there are multiple
|
409
|
+
heat_type = ''
|
410
|
+
if has_mixed == true
|
411
|
+
heat_type = 'Mixed'
|
412
|
+
end
|
413
|
+
if has_fuel == true && heat_type != 'Fuel'
|
414
|
+
if heat_type == ''
|
415
|
+
heat_type = 'Fuel'
|
416
|
+
else
|
417
|
+
heat_type = 'Mixed'
|
418
|
+
end
|
419
|
+
end
|
420
|
+
if has_district == true && heat_type != 'District'
|
421
|
+
if heat_type == ''
|
422
|
+
heat_type = 'District'
|
423
|
+
else
|
424
|
+
heat_type = 'Mixed'
|
425
|
+
end
|
426
|
+
end
|
427
|
+
if has_electric == true && heat_type != 'Electric'
|
428
|
+
if heat_type == ''
|
429
|
+
heat_type = 'Electric'
|
430
|
+
else
|
431
|
+
heat_type = 'Mixed'
|
432
|
+
end
|
433
|
+
end
|
434
|
+
if has_solar == true && heat_type != 'Solar'
|
435
|
+
if heat_type == ''
|
436
|
+
heat_type = 'Solar'
|
437
|
+
else
|
438
|
+
heat_type = 'Mixed'
|
439
|
+
end
|
440
|
+
end
|
441
|
+
if has_hp == true && heat_type != 'HeatPump'
|
442
|
+
# Assume any additional heat types are supplemental
|
443
|
+
heat_type = 'HeatPump'
|
444
|
+
end
|
445
|
+
|
446
|
+
return heat_type
|
447
|
+
|
448
|
+
end
|
449
|
+
|
450
|
+
# Get primary type of heat for one air loop for Appendix G system type selections
|
451
|
+
#
|
452
|
+
# @param air_loop [object]
|
453
|
+
# @return string description of heat type: Fuel, Electric, District, HeatPump, Solar, Mixed
|
454
|
+
def zone_equipment_heat_type(zone)
|
455
|
+
fuels = []
|
456
|
+
heat_type = ''
|
457
|
+
# Get the heating fuels for all zone HVAC equipment
|
458
|
+
zone.equipment.each do |equipment|
|
459
|
+
# Get the object type
|
460
|
+
obj_type = equipment.iddObjectType.valueName.to_s
|
461
|
+
case obj_type
|
462
|
+
when 'OS_AirTerminal_SingleDuct_ConstantVolume_FourPipeInduction'
|
463
|
+
equipment = equipment.to_AirTerminalSingleDuctConstantVolumeFourPipeInduction.get
|
464
|
+
heat_type = self.coil_heat_type(equipment.heatingCoil)
|
465
|
+
when 'OS_AirTerminal_SingleDuct_ConstantVolume_Reheat'
|
466
|
+
equipment = equipment.to_AirTerminalSingleDuctConstantVolumeReheat.get
|
467
|
+
heat_type = self.coil_heat_type(equipment.reheatCoil)
|
468
|
+
when 'OS_AirTerminal_SingleDuct_InletSideMixer'
|
469
|
+
# TODO
|
470
|
+
when 'OS_AirTerminal_SingleDuct_ParallelPIU_Reheat'
|
471
|
+
equipment = equipment.to_AirTerminalSingleDuctParallelPIUReheat.get
|
472
|
+
heat_type = self.coil_heat_type(equipment.reheatCoil)
|
473
|
+
when 'OS_AirTerminal_SingleDuct_SeriesPIU_Reheat'
|
474
|
+
equipment = equipment.to_AirTerminalSingleDuctSeriesPIUReheat.get
|
475
|
+
heat_type = self.coil_heat_type(equipment.reheatCoil)
|
476
|
+
when 'OS_AirTerminal_SingleDuct_VAVHeatAndCool_Reheat'
|
477
|
+
equipment = equipment.to_AirTerminalSingleDuctVAVHeatAndCoolReheat.get
|
478
|
+
heat_type = self.coil_heat_type(equipment.reheatCoil)
|
479
|
+
when 'OS_AirTerminal_SingleDuct_VAV_Reheat'
|
480
|
+
equipment = equipment.to_AirTerminalSingleDuctVAVReheat.get
|
481
|
+
heat_type = self.coil_heat_type(equipment.reheatCoil)
|
482
|
+
when 'OS_ZoneHVAC_Baseboard_Convective_Water'
|
483
|
+
equipment = equipment.to_ZoneHVACBaseboardConvectiveWater.get
|
484
|
+
heat_type = self.coil_heat_type(equipment.heatingCoil)
|
485
|
+
when 'OS_ZoneHVAC_Baseboard_RadiantConvective_Water'
|
486
|
+
equipment = equipment.to_ZoneHVACBaseboardRadiantConvectiveWater.get
|
487
|
+
heat_type = self.coil_heat_type(equipment.heatingCoil)
|
488
|
+
when 'OS_ZoneHVAC_FourPipeFanCoil'
|
489
|
+
equipment = equipment.to_ZoneHVACFourPipeFanCoil.get
|
490
|
+
heat_type = self.coil_heat_type(equipment.heatingCoil)
|
491
|
+
when 'OS_ZoneHVAC_LowTemperatureRadiant_ConstantFlow'
|
492
|
+
equipment = equipment.to_ZoneHVACLowTempRadiantConstFlow.get
|
493
|
+
heat_type = self.coil_heat_type(equipment.heatingCoil)
|
494
|
+
when 'OS_ZoneHVAC_LowTemperatureRadiant_VariableFlow'
|
495
|
+
equipment = equipment.to_ZoneHVACLowTempRadiantVarFlow.get
|
496
|
+
heat_type = self.coil_heat_type(equipment.heatingCoil)
|
497
|
+
when 'OS_ZoneHVAC_UnitHeater'
|
498
|
+
equipment = equipment.to_ZoneHVACUnitHeater.get
|
499
|
+
heat_type = self.coil_heat_type(equipment.heatingCoil)
|
500
|
+
when 'OS_ZoneHVAC_UnitVentilator'
|
501
|
+
equipment = equipment.to_ZoneHVACUnitVentilator.get
|
502
|
+
if equipment.heatingCoil.is_initialized
|
503
|
+
heat_type = self.coil_heat_type(equipment.heatingCoil.get)
|
504
|
+
end
|
505
|
+
when 'OS_ZoneHVAC_Baseboard_Convective_Electric'
|
506
|
+
heat_type = 'Electric'
|
507
|
+
when 'OS_ZoneHVAC_Baseboard_RadiantConvective_Electric'
|
508
|
+
heat_type = 'Electric'
|
509
|
+
when 'OS_ZoneHVAC_HighTemperatureRadiant'
|
510
|
+
equipment = equipment.to_ZoneHVACHighTemperatureRadiant.get
|
511
|
+
case equipment.fuelType
|
512
|
+
when 'Electricity'
|
513
|
+
heat_type = 'Electric'
|
514
|
+
when 'DistrictHeating', 'District'
|
515
|
+
heat_type = 'District'
|
516
|
+
when 'SolarEnergy', 'Solar'
|
517
|
+
heat_type = 'Solar'
|
518
|
+
when 'NaturalGas', 'Fuel', 'PropaneGas', 'Coal', 'Diesel'
|
519
|
+
heat_type = 'Fuel'
|
520
|
+
when 'FuelOilNo1', 'FuelOilNo2'
|
521
|
+
heat_type = 'Fuel'
|
522
|
+
when 'HeatPump'
|
523
|
+
heat_type = 'HeatPump'
|
524
|
+
else
|
525
|
+
heat_type = 'Other'
|
526
|
+
end
|
527
|
+
when 'OS_ZoneHVAC_IdealLoadsAirSystem'
|
528
|
+
heat_type = 'District'
|
529
|
+
when 'OS_ZoneHVAC_LowTemperatureRadiant_Electric'
|
530
|
+
heat_type = 'Electric'
|
531
|
+
when 'OS_ZoneHVAC_PackagedTerminalAirConditioner'
|
532
|
+
equipment = equipment.to_ZoneHVACPackagedTerminalAirConditioner.get
|
533
|
+
heat_type = self.coil_heating_fuels(equipment.heatingCoil)
|
534
|
+
when 'OS_ZoneHVAC_PackagedTerminalHeatPump'
|
535
|
+
heat_type = 'HeatPump'
|
536
|
+
when 'OS_ZoneHVAC_TerminalUnit_VariableRefrigerantFlow'
|
537
|
+
heat_type = 'HeatPump'
|
538
|
+
when 'OS_ZoneHVAC_WaterToAirHeatPump'
|
539
|
+
# We also go check what fuel serves the loop on which the WSHP heating coil is
|
540
|
+
equipment = equipment.to_ZoneHVACWaterToAirHeatPump.get
|
541
|
+
heat_type = self.coil_heat_type(equipment.heatingCoil)
|
542
|
+
else
|
543
|
+
OpenStudio::logFree(OpenStudio::Debug, 'openstudio.sizing.Model', "No heat type found for #{obj_type}") end
|
544
|
+
end
|
545
|
+
|
546
|
+
return heat_type
|
547
|
+
|
548
|
+
end
|
549
|
+
|
550
|
+
|
199
551
|
# Get the cooling fuel type of a cooling coil
|
200
552
|
def coil_cooling_fuels(cooling_coil)
|
201
553
|
fuels = []
|
@@ -276,10 +628,10 @@ class OpenStudio::Model::Model
|
|
276
628
|
fuels += self.coil_heating_fuels(equipment.reheatCoil)
|
277
629
|
when 'OS_AirTerminal_SingleDuct_InletSideMixer'
|
278
630
|
# @todo complete method
|
279
|
-
when '
|
631
|
+
when 'OS_AirTerminal_SingleDuct_ParallelPIU_Reheat'
|
280
632
|
equipment = equipment.to_AirTerminalSingleDuctParallelPIUReheat.get
|
281
633
|
fuels += self.coil_heating_fuels(equipment.reheatCoil)
|
282
|
-
when '
|
634
|
+
when 'OS_AirTerminal_SingleDuct_SeriesPIU_Reheat'
|
283
635
|
equipment = equipment.to_AirTerminalSingleDuctSeriesPIUReheat.get
|
284
636
|
fuels += self.coil_heating_fuels(equipment.reheatCoil)
|
285
637
|
when 'OS_AirTerminal_SingleDuct_VAVHeatAndCool_Reheat'
|
@@ -182,6 +182,85 @@ class OpenStudio::Model::ThermalZone
|
|
182
182
|
|
183
183
|
end
|
184
184
|
|
185
|
+
def designAirFlowRate
|
186
|
+
|
187
|
+
result = OpenStudio::OptionalDouble.new
|
188
|
+
|
189
|
+
name = self.name.get.upcase
|
190
|
+
|
191
|
+
sql = self.model.sqlFile
|
192
|
+
|
193
|
+
if sql.is_initialized
|
194
|
+
sql = sql.get
|
195
|
+
|
196
|
+
table_name = 'Zone Sizing Information'
|
197
|
+
|
198
|
+
# Get zone row name
|
199
|
+
query = "SELECT RowName
|
200
|
+
FROM tabulardatawithstrings
|
201
|
+
WHERE ReportName='Initialization Summary'
|
202
|
+
AND ReportForString='Entire Facility'
|
203
|
+
AND TableName='#{table_name}'
|
204
|
+
AND ColumnName='Zone Name'
|
205
|
+
AND Value='#{name}'"
|
206
|
+
|
207
|
+
val = sql.execAndReturnVectorOfString(query).get
|
208
|
+
|
209
|
+
if !val.empty?
|
210
|
+
# no heating or cooling load; flow assumed to be the same
|
211
|
+
if val.length == 1
|
212
|
+
clg_id = val[0]
|
213
|
+
htg_id = clg_id
|
214
|
+
else
|
215
|
+
clg_id = val[0]
|
216
|
+
htg_id = val[1]
|
217
|
+
end
|
218
|
+
htg_des_air_flow_rate = 0
|
219
|
+
clg_des_air_flow_rate = 0
|
220
|
+
|
221
|
+
# Get zone cooling design flow rate
|
222
|
+
query = "SELECT Value
|
223
|
+
FROM tabulardatawithstrings
|
224
|
+
WHERE ReportName='Initialization Summary'
|
225
|
+
AND ReportForString='Entire Facility'
|
226
|
+
AND TableName='#{table_name}'
|
227
|
+
AND ColumnName='User Des Air Flow Rate {m3/s}'
|
228
|
+
AND RowName='#{clg_id}'"
|
229
|
+
val = sql.execAndReturnFirstDouble(query)
|
230
|
+
if val.is_initialized
|
231
|
+
clg_des_air_flow_rate = val
|
232
|
+
else
|
233
|
+
OpenStudio::logFree(OpenStudio::Warn, "openstudio.model.Model", "Data not found for query: #{query}")
|
234
|
+
end
|
235
|
+
|
236
|
+
# Get zone heating design flow rate
|
237
|
+
query = "SELECT Value
|
238
|
+
FROM tabulardatawithstrings
|
239
|
+
WHERE ReportName='Initialization Summary'
|
240
|
+
AND ReportForString='Entire Facility'
|
241
|
+
AND TableName='#{table_name}'
|
242
|
+
AND ColumnName='User Des Air Flow Rate {m3/s}'
|
243
|
+
AND RowName='#{htg_id}'"
|
244
|
+
val = sql.execAndReturnFirstDouble(query)
|
245
|
+
if val.is_initialized
|
246
|
+
htg_des_air_flow_rate = val
|
247
|
+
else
|
248
|
+
OpenStudio::logFree(OpenStudio::Warn, "openstudio.model.Model", "Data not found for query: #{query}")
|
249
|
+
end
|
250
|
+
|
251
|
+
# Use maximum of the two as actual design flow rate
|
252
|
+
result = OpenStudio::OptionalDouble.new([clg_des_air_flow_rate.to_f, htg_des_air_flow_rate.to_f].max)
|
253
|
+
else
|
254
|
+
OpenStudio::logFree(OpenStudio::Warn, "openstudio.model.Model", "Data not found for query: #{query}")
|
255
|
+
end
|
256
|
+
|
257
|
+
else
|
258
|
+
OpenStudio::logFree(OpenStudio::Error, 'openstudio.model.Model', 'Model has no sql file containing results, cannot lookup data.')
|
259
|
+
end
|
260
|
+
|
261
|
+
return result
|
262
|
+
end
|
263
|
+
|
185
264
|
# returns the calculated heating design load as an optional double
|
186
265
|
def heatingDesignLoad
|
187
266
|
|
@@ -32,7 +32,7 @@ module Laboratory
|
|
32
32
|
# add exhaust fan to fume hood zone
|
33
33
|
fume_hood_zone_volume = space.volume
|
34
34
|
flow_rate_fume_hood = fume_hood_zone_volume * fume_hood_exhaust_ach / 3600.0
|
35
|
-
model_add_exhaust_fan(model, [space.thermalZone.get], flow_rate: flow_rate_fume_hood,
|
35
|
+
model_add_exhaust_fan(model, [space.thermalZone.get], flow_rate: flow_rate_fume_hood, flow_fraction_schedule_name: 'Lab_FumeHood_Sch')
|
36
36
|
end
|
37
37
|
|
38
38
|
# adjust doas sizing
|