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
@@ -174,6 +174,7 @@ module PrototypeFan
|
|
174
174
|
motor_in_airstream_fraction: motor_in_airstream_fraction,
|
175
175
|
end_use_subcategory: end_use_subcategory)
|
176
176
|
elsif fan_json['type'] == 'VariableVolume'
|
177
|
+
fan_power_coefficient_1, fan_power_coefficient_2, fan_power_coefficient_3, fan_power_coefficient_4, fan_power_coefficient_5 = lookup_fan_curve_coefficients_from_json(fan_json['fan_curve']) if fan_json['fan_curve']
|
177
178
|
create_fan_variable_volume_from_json(model,
|
178
179
|
fan_json,
|
179
180
|
fan_name: fan_name,
|
@@ -199,4 +200,15 @@ module PrototypeFan
|
|
199
200
|
end_use_subcategory: end_use_subcategory)
|
200
201
|
end
|
201
202
|
end
|
203
|
+
|
204
|
+
# Lookup fan curve coefficients
|
205
|
+
#
|
206
|
+
# @param fan_curve [String] name of the fan curve
|
207
|
+
# @return [Array] an array of fan curve coefficients
|
208
|
+
def lookup_fan_curve_coefficients_from_json(fan_curve)
|
209
|
+
search_criteria = {}
|
210
|
+
search_criteria['name'] = fan_curve
|
211
|
+
fan_curve = model_find_object(@standards_data['curves'], search_criteria)
|
212
|
+
return [fan_curve['coeff_1'], fan_curve['coeff_2'], fan_curve['coeff_3'], fan_curve['coeff_4'], fan_curve['coeff_5']]
|
213
|
+
end
|
202
214
|
end
|
@@ -597,7 +597,7 @@ Standard.class_eval do
|
|
597
597
|
next unless surface.surfaceType == 'Wall'
|
598
598
|
|
599
599
|
boundary_condition = surface.outsideBoundaryCondition
|
600
|
-
next unless boundary_condition == 'OtherSideCoefficients' || boundary_condition
|
600
|
+
next unless boundary_condition == 'OtherSideCoefficients' || boundary_condition.to_s.downcase.include?('ground')
|
601
601
|
|
602
602
|
# calculate wall height as difference of maximum and minimum z values, assuming square, vertical walls
|
603
603
|
z_values = []
|
@@ -677,7 +677,7 @@ Standard.class_eval do
|
|
677
677
|
|
678
678
|
# Find space's floors
|
679
679
|
space.surfaces.each do |surface|
|
680
|
-
if surface.surfaceType == 'Floor' && surface.outsideBoundaryCondition
|
680
|
+
if surface.surfaceType == 'Floor' && surface.outsideBoundaryCondition.to_s.downcase.include?('ground')
|
681
681
|
floors << surface
|
682
682
|
end
|
683
683
|
end
|
@@ -1794,7 +1794,7 @@ Standard.class_eval do
|
|
1794
1794
|
#
|
1795
1795
|
# @param model [OpenStudio::Model::Model] the model
|
1796
1796
|
def model_apply_prototype_hvac_efficiency_adjustments(model)
|
1797
|
-
building_data =
|
1797
|
+
building_data = model_get_building_properties(model)
|
1798
1798
|
building_type = building_data['building_type']
|
1799
1799
|
climate_zone = building_data['climate_zone']
|
1800
1800
|
|
@@ -2700,7 +2700,6 @@ Standard.class_eval do
|
|
2700
2700
|
# @param wwr [Boolean]
|
2701
2701
|
# @return [Numeric] Returns window to wall ratio (percentage) or window area.
|
2702
2702
|
def model_get_window_area_info(model, wwr = true)
|
2703
|
-
|
2704
2703
|
window_area = 0
|
2705
2704
|
wall_area = 0
|
2706
2705
|
|
@@ -62,7 +62,7 @@ class Standard
|
|
62
62
|
air_loop_hvac.thermalZones.sort.each do |zone|
|
63
63
|
sizing_zone = zone.sizingZone
|
64
64
|
if air_loop_hvac.model.version < OpenStudio::VersionString.new('3.0.0')
|
65
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.prototype.SizingSystem', "The design minimum zone ventilation efficiency cannot be set for #{sizing_system.name
|
65
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.prototype.SizingSystem', "The design minimum zone ventilation efficiency cannot be set for #{sizing_system.name}. It can only be set OpenStudio 3.0.0 and later.")
|
66
66
|
else
|
67
67
|
sizing_zone.setDesignMinimumZoneVentilationEfficiency(0.6)
|
68
68
|
end
|
@@ -226,32 +226,12 @@ class Standard
|
|
226
226
|
chilled_water_loop.setName(system_name)
|
227
227
|
end
|
228
228
|
|
229
|
-
# chilled water loop sizing and controls
|
230
229
|
if dsgn_sup_wtr_temp.nil?
|
231
|
-
dsgn_sup_wtr_temp = 44
|
232
|
-
dsgn_sup_wtr_temp_c = OpenStudio.convert(dsgn_sup_wtr_temp, 'F', 'C').get
|
233
|
-
else
|
234
|
-
dsgn_sup_wtr_temp_c = OpenStudio.convert(dsgn_sup_wtr_temp, 'F', 'C').get
|
235
|
-
end
|
236
|
-
if dsgn_sup_wtr_temp_delt.nil?
|
237
|
-
dsgn_sup_wtr_temp_delt_k = OpenStudio.convert(10.1, 'R', 'K').get
|
238
|
-
else
|
239
|
-
dsgn_sup_wtr_temp_delt_k = OpenStudio.convert(dsgn_sup_wtr_temp_delt, 'R', 'K').get
|
230
|
+
dsgn_sup_wtr_temp = 44
|
240
231
|
end
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
sizing_plant.setLoopType('Cooling')
|
245
|
-
sizing_plant.setDesignLoopExitTemperature(dsgn_sup_wtr_temp_c)
|
246
|
-
sizing_plant.setLoopDesignTemperatureDifference(dsgn_sup_wtr_temp_delt_k)
|
247
|
-
chw_temp_sch = model_add_constant_schedule_ruleset(model,
|
248
|
-
dsgn_sup_wtr_temp_c,
|
249
|
-
name = "#{chilled_water_loop.name} Temp - #{dsgn_sup_wtr_temp.round(0)}F")
|
250
|
-
chw_stpt_manager = OpenStudio::Model::SetpointManagerScheduled.new(model, chw_temp_sch)
|
251
|
-
chw_stpt_manager.setName("#{chilled_water_loop.name} Setpoint Manager")
|
252
|
-
chw_stpt_manager.addToNode(chilled_water_loop.supplyOutletNode)
|
253
|
-
# @todo Yixing check the CHW Setpoint from standards
|
254
|
-
# @todo Should be a OutdoorAirReset, see the changes I've made in Standards.PlantLoop.apply_prm_baseline_temperatures
|
232
|
+
|
233
|
+
# chilled water loop sizing and controls
|
234
|
+
chw_sizing_control(model, chilled_water_loop, dsgn_sup_wtr_temp, dsgn_sup_wtr_temp_delt)
|
255
235
|
|
256
236
|
# create chilled water pumps
|
257
237
|
if chw_pumping_type == 'const_pri'
|
@@ -269,28 +249,86 @@ class Standard
|
|
269
249
|
pri_chw_pump.setPumpControlType('Intermittent')
|
270
250
|
pri_chw_pump.addToNode(chilled_water_loop.supplyInletNode)
|
271
251
|
elsif chw_pumping_type == 'const_pri_var_sec'
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
252
|
+
pri_sec_config = plant_loop_set_chw_pri_sec_configuration(model)
|
253
|
+
|
254
|
+
if pri_sec_config == 'common_pipe'
|
255
|
+
# primary chilled water pump
|
256
|
+
pri_chw_pump = OpenStudio::Model::PumpConstantSpeed.new(model)
|
257
|
+
pri_chw_pump.setName("#{chilled_water_loop.name} Primary Pump")
|
258
|
+
pri_chw_pump.setRatedPumpHead(OpenStudio.convert(15.0, 'ftH_{2}O', 'Pa').get)
|
259
|
+
pri_chw_pump.setMotorEfficiency(0.9)
|
260
|
+
pri_chw_pump.setPumpControlType('Intermittent')
|
261
|
+
pri_chw_pump.addToNode(chilled_water_loop.supplyInletNode)
|
262
|
+
# secondary chilled water pump
|
263
|
+
sec_chw_pump = OpenStudio::Model::PumpVariableSpeed.new(model)
|
264
|
+
sec_chw_pump.setName("#{chilled_water_loop.name} Secondary Pump")
|
265
|
+
sec_chw_pump.setRatedPumpHead(OpenStudio.convert(45.0, 'ftH_{2}O', 'Pa').get)
|
266
|
+
sec_chw_pump.setMotorEfficiency(0.9)
|
267
|
+
# curve makes it perform like variable speed pump
|
268
|
+
sec_chw_pump.setFractionofMotorInefficienciestoFluidStream(0)
|
269
|
+
sec_chw_pump.setCoefficient1ofthePartLoadPerformanceCurve(0)
|
270
|
+
sec_chw_pump.setCoefficient2ofthePartLoadPerformanceCurve(0.0205)
|
271
|
+
sec_chw_pump.setCoefficient3ofthePartLoadPerformanceCurve(0.4101)
|
272
|
+
sec_chw_pump.setCoefficient4ofthePartLoadPerformanceCurve(0.5753)
|
273
|
+
sec_chw_pump.setPumpControlType('Intermittent')
|
274
|
+
sec_chw_pump.addToNode(chilled_water_loop.demandInletNode)
|
275
|
+
# Change the chilled water loop to have a two-way common pipes
|
276
|
+
chilled_water_loop.setCommonPipeSimulation('CommonPipe')
|
277
|
+
elsif pri_sec_config == 'heat_exchanger'
|
278
|
+
# NOTE: PRECONDITIONING for `const_pri_var_sec` pump type is only applicable for PRM routine and only applies to System Type 7 and System Type 8
|
279
|
+
# See: model_add_prm_baseline_system under Model object.
|
280
|
+
# In this scenario, we will need to create a primary and secondary configuration:
|
281
|
+
# chilled_water_loop is the primary loop
|
282
|
+
# Primary: demand: heat exchanger, supply: chillers, name: Chilled Water Loop_Primary, additionalProperty: secondary_loop_name
|
283
|
+
# Secondary: demand: Coils, supply: heat exchanger, name: Chilled Water Loop, additionalProperty: is_secondary_loop
|
284
|
+
secondary_chilled_water_loop = OpenStudio::Model::PlantLoop.new(model)
|
285
|
+
secondary_loop_name = system_name.nil? ? 'Chilled Water Loop' : system_name
|
286
|
+
# Reset primary loop name
|
287
|
+
chilled_water_loop.setName("#{secondary_loop_name}_Primary")
|
288
|
+
secondary_chilled_water_loop.setName(secondary_loop_name)
|
289
|
+
chw_sizing_control(model, secondary_chilled_water_loop, dsgn_sup_wtr_temp, dsgn_sup_wtr_temp_delt)
|
290
|
+
chilled_water_loop.additionalProperties.setFeature('is_primary_loop', true)
|
291
|
+
secondary_chilled_water_loop.additionalProperties.setFeature('is_secondary_loop', true)
|
292
|
+
# primary chilled water pump
|
293
|
+
# Add Constant pump, in plant loop, the number of chiller adjustment will assign pump to each chiller
|
294
|
+
pri_chw_pump = OpenStudio::Model::PumpConstantSpeed.new(model)
|
295
|
+
pri_chw_pump.setName("#{chilled_water_loop.name} Primary Pump")
|
296
|
+
# Will need to adjust the pump power after a sizing run
|
297
|
+
pri_chw_pump.setRatedPumpHead(OpenStudio.convert(15.0, 'ftH_{2}O', 'Pa').get / num_chillers)
|
298
|
+
pri_chw_pump.setMotorEfficiency(0.9)
|
299
|
+
pri_chw_pump.setPumpControlType('Intermittent')
|
300
|
+
# chiller_inlet_node = chiller.connectedObject(chiller.supplyInletPort).get.to_Node.get
|
301
|
+
pri_chw_pump.addToNode(chilled_water_loop.supplyInletNode)
|
302
|
+
|
303
|
+
# secondary chilled water pump
|
304
|
+
sec_chw_pump = OpenStudio::Model::PumpVariableSpeed.new(model)
|
305
|
+
sec_chw_pump.setName("#{secondary_chilled_water_loop.name} Pump")
|
306
|
+
sec_chw_pump.setRatedPumpHead(OpenStudio.convert(45.0, 'ftH_{2}O', 'Pa').get)
|
307
|
+
sec_chw_pump.setMotorEfficiency(0.9)
|
308
|
+
# curve makes it perform like variable speed pump
|
309
|
+
sec_chw_pump.setFractionofMotorInefficienciestoFluidStream(0)
|
310
|
+
sec_chw_pump.setCoefficient1ofthePartLoadPerformanceCurve(0)
|
311
|
+
sec_chw_pump.setCoefficient2ofthePartLoadPerformanceCurve(0.0205)
|
312
|
+
sec_chw_pump.setCoefficient3ofthePartLoadPerformanceCurve(0.4101)
|
313
|
+
sec_chw_pump.setCoefficient4ofthePartLoadPerformanceCurve(0.5753)
|
314
|
+
sec_chw_pump.setPumpControlType('Intermittent')
|
315
|
+
sec_chw_pump.addToNode(secondary_chilled_water_loop.demandInletNode)
|
316
|
+
|
317
|
+
# Add HX to connect secondary and primary loop
|
318
|
+
heat_exchanger = OpenStudio::Model::HeatExchangerFluidToFluid.new(model)
|
319
|
+
secondary_chilled_water_loop.addSupplyBranchForComponent(heat_exchanger)
|
320
|
+
chilled_water_loop.addDemandBranchForComponent(heat_exchanger)
|
321
|
+
|
322
|
+
# Clean up connections
|
323
|
+
hx_bypass_pipe = OpenStudio::Model::PipeAdiabatic.new(model)
|
324
|
+
hx_bypass_pipe.setName("#{secondary_chilled_water_loop.name} HX Bypass")
|
325
|
+
secondary_chilled_water_loop.addSupplyBranchForComponent(hx_bypass_pipe)
|
326
|
+
outlet_pipe = OpenStudio::Model::PipeAdiabatic.new(model)
|
327
|
+
outlet_pipe.setName("#{secondary_chilled_water_loop.name} Supply Outlet")
|
328
|
+
outlet_pipe.addToNode(secondary_chilled_water_loop.supplyOutletNode)
|
329
|
+
else
|
330
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.Model.Model', 'No primary/secondary configuration specified for the chilled water loop.')
|
331
|
+
end
|
294
332
|
else
|
295
333
|
OpenStudio.logFree(OpenStudio::Error, 'openstudio.Model.Model', 'No pumping type specified for the chilled water loop.')
|
296
334
|
end
|
@@ -322,6 +360,7 @@ class Standard
|
|
322
360
|
chiller = OpenStudio::Model::ChillerElectricEIR.new(model)
|
323
361
|
chiller.setName("#{template} #{chiller_cooling_type} #{chiller_condenser_type} #{chiller_compressor_type} Chiller #{i}")
|
324
362
|
chilled_water_loop.addSupplyBranchForComponent(chiller)
|
363
|
+
dsgn_sup_wtr_temp_c = OpenStudio.convert(dsgn_sup_wtr_temp, 'F', 'C').get
|
325
364
|
chiller.setReferenceLeavingChilledWaterTemperature(dsgn_sup_wtr_temp_c)
|
326
365
|
chiller.setLeavingChilledWaterLowerTemperatureLimit(OpenStudio.convert(36.0, 'F', 'C').get)
|
327
366
|
chiller.setReferenceEnteringCondenserFluidTemperature(OpenStudio.convert(95.0, 'F', 'C').get)
|
@@ -1660,25 +1699,28 @@ class Standard
|
|
1660
1699
|
# create heating coil
|
1661
1700
|
if hot_water_loop.nil?
|
1662
1701
|
if heating_type == 'Electricity'
|
1663
|
-
create_coil_heating_electric(model,
|
1664
|
-
|
1665
|
-
|
1702
|
+
htg_coil = create_coil_heating_electric(model,
|
1703
|
+
air_loop_node: air_loop.supplyInletNode,
|
1704
|
+
name: "#{air_loop.name} Main Electric Htg Coil")
|
1666
1705
|
else # default to NaturalGas
|
1667
|
-
create_coil_heating_gas(model,
|
1668
|
-
|
1669
|
-
|
1706
|
+
htg_coil = create_coil_heating_gas(model,
|
1707
|
+
air_loop_node: air_loop.supplyInletNode,
|
1708
|
+
name: "#{air_loop.name} Main Gas Htg Coil")
|
1670
1709
|
end
|
1671
1710
|
else
|
1672
|
-
create_coil_heating_water(model,
|
1673
|
-
|
1674
|
-
|
1675
|
-
|
1676
|
-
|
1677
|
-
|
1678
|
-
|
1679
|
-
|
1711
|
+
htg_coil = create_coil_heating_water(model,
|
1712
|
+
hot_water_loop,
|
1713
|
+
air_loop_node: air_loop.supplyInletNode,
|
1714
|
+
name: "#{air_loop.name} Main Htg Coil",
|
1715
|
+
rated_inlet_water_temperature: hw_temp_c,
|
1716
|
+
rated_outlet_water_temperature: (hw_temp_c - hw_delta_t_k),
|
1717
|
+
rated_inlet_air_temperature: dsgn_temps['prehtg_dsgn_sup_air_temp_c'],
|
1718
|
+
rated_outlet_air_temperature: dsgn_temps['htg_dsgn_sup_air_temp_c'])
|
1680
1719
|
end
|
1681
1720
|
|
1721
|
+
# set the setpointmanager for the central/preheat coil if required
|
1722
|
+
model_set_central_preheat_coil_spm(model, thermal_zones, htg_coil)
|
1723
|
+
|
1682
1724
|
# create cooling coil
|
1683
1725
|
if chilled_water_loop.nil?
|
1684
1726
|
create_coil_cooling_dx_two_speed(model,
|
@@ -1874,9 +1916,12 @@ class Standard
|
|
1874
1916
|
fan.addToNode(air_loop.supplyInletNode)
|
1875
1917
|
|
1876
1918
|
# create heating coil
|
1877
|
-
create_coil_heating_electric(model,
|
1878
|
-
|
1879
|
-
|
1919
|
+
htg_coil = create_coil_heating_electric(model,
|
1920
|
+
air_loop_node: air_loop.supplyInletNode,
|
1921
|
+
name: "#{air_loop.name} Htg Coil")
|
1922
|
+
|
1923
|
+
# set the setpointmanager for the central/preheat coil if required
|
1924
|
+
model_set_central_preheat_coil_spm(model, thermal_zones, htg_coil)
|
1880
1925
|
|
1881
1926
|
# create cooling coil
|
1882
1927
|
create_coil_cooling_water(model,
|
@@ -2018,25 +2063,27 @@ class Standard
|
|
2018
2063
|
# create heating coil
|
2019
2064
|
if hot_water_loop.nil?
|
2020
2065
|
if heating_type == 'Electricity'
|
2021
|
-
create_coil_heating_electric(model,
|
2022
|
-
|
2023
|
-
|
2066
|
+
htg_coil = create_coil_heating_electric(model,
|
2067
|
+
air_loop_node: air_loop.supplyInletNode,
|
2068
|
+
name: "#{air_loop.name} Main Electric Htg Coil")
|
2024
2069
|
else # default to NaturalGas
|
2025
|
-
create_coil_heating_gas(model,
|
2026
|
-
|
2027
|
-
|
2070
|
+
htg_coil = create_coil_heating_gas(model,
|
2071
|
+
air_loop_node: air_loop.supplyInletNode,
|
2072
|
+
name: "#{air_loop.name} Main Gas Htg Coil")
|
2028
2073
|
end
|
2029
2074
|
else
|
2030
|
-
create_coil_heating_water(model,
|
2031
|
-
|
2032
|
-
|
2033
|
-
|
2034
|
-
|
2035
|
-
|
2036
|
-
|
2037
|
-
rated_outlet_air_temperature: dsgn_temps['htg_dsgn_sup_air_temp_c'])
|
2075
|
+
htg_coil = create_coil_heating_water(model, hot_water_loop,
|
2076
|
+
air_loop_node: air_loop.supplyInletNode,
|
2077
|
+
name: "#{air_loop.name} Main Htg Coil",
|
2078
|
+
rated_inlet_water_temperature: hw_temp_c,
|
2079
|
+
rated_outlet_water_temperature: (hw_temp_c - hw_delta_t_k),
|
2080
|
+
rated_inlet_air_temperature: dsgn_temps['prehtg_dsgn_sup_air_temp_c'],
|
2081
|
+
rated_outlet_air_temperature: dsgn_temps['htg_dsgn_sup_air_temp_c'])
|
2038
2082
|
end
|
2039
2083
|
|
2084
|
+
# set the setpointmanager for the central/preheat coil if required
|
2085
|
+
model_set_central_preheat_coil_spm(model, thermal_zones, htg_coil)
|
2086
|
+
|
2040
2087
|
# create cooling coil
|
2041
2088
|
if chilled_water_loop.nil?
|
2042
2089
|
create_coil_cooling_dx_two_speed(model,
|
@@ -2194,9 +2241,12 @@ class Standard
|
|
2194
2241
|
fan.addToNode(air_loop.supplyInletNode)
|
2195
2242
|
|
2196
2243
|
# create heating coil
|
2197
|
-
create_coil_heating_electric(model,
|
2198
|
-
|
2199
|
-
|
2244
|
+
htg_coil = create_coil_heating_electric(model,
|
2245
|
+
air_loop_node: air_loop.supplyInletNode,
|
2246
|
+
name: "#{air_loop.name} Main Htg Coil")
|
2247
|
+
|
2248
|
+
# set the setpointmanager for the central/preheat coil if required
|
2249
|
+
model_set_central_preheat_coil_spm(model, thermal_zones, htg_coil)
|
2200
2250
|
|
2201
2251
|
# create cooling coil
|
2202
2252
|
if chilled_water_loop.nil?
|
@@ -2710,9 +2760,14 @@ class Standard
|
|
2710
2760
|
thermal_zones,
|
2711
2761
|
system_name: nil,
|
2712
2762
|
heating_type: nil,
|
2763
|
+
cooling_type: 'AirCooled',
|
2713
2764
|
supplemental_heating_type: nil,
|
2714
2765
|
hvac_op_sch: nil,
|
2715
|
-
|
2766
|
+
fan_type: 'VAV_System_Fan',
|
2767
|
+
oa_damper_sch: nil,
|
2768
|
+
hot_water_loop: nil,
|
2769
|
+
chilled_water_loop: nil,
|
2770
|
+
minimum_volume_setpoint: nil)
|
2716
2771
|
|
2717
2772
|
# hvac operation schedule
|
2718
2773
|
if hvac_op_sch.nil?
|
@@ -2767,7 +2822,7 @@ class Standard
|
|
2767
2822
|
# create fan
|
2768
2823
|
# @type [OpenStudio::Model::FanVariableVolume] fan
|
2769
2824
|
fan = create_fan_by_name(model,
|
2770
|
-
|
2825
|
+
fan_type,
|
2771
2826
|
fan_name: "#{air_loop.name} Fan",
|
2772
2827
|
end_use_subcategory: 'VAV System Fans')
|
2773
2828
|
fan.setAvailabilitySchedule(hvac_op_sch)
|
@@ -2780,6 +2835,11 @@ class Standard
|
|
2780
2835
|
when 'Electricity', 'Electric'
|
2781
2836
|
htg_coil = create_coil_heating_electric(model,
|
2782
2837
|
name: "#{air_loop.name} Electric Htg Coil")
|
2838
|
+
when 'Water'
|
2839
|
+
htg_coil = create_coil_heating_water(model,
|
2840
|
+
hot_water_loop,
|
2841
|
+
air_loop_node: air_loop.supplyOutletNode,
|
2842
|
+
name: "#{air_loop.name} Water Htg Coil")
|
2783
2843
|
else
|
2784
2844
|
# Zero-capacity, always-off electric heating coil
|
2785
2845
|
htg_coil = create_coil_heating_electric(model,
|
@@ -2805,14 +2865,21 @@ class Standard
|
|
2805
2865
|
end
|
2806
2866
|
|
2807
2867
|
# create cooling coil
|
2808
|
-
|
2809
|
-
|
2810
|
-
|
2811
|
-
|
2812
|
-
|
2813
|
-
|
2814
|
-
|
2815
|
-
|
2868
|
+
case cooling_type
|
2869
|
+
when 'WaterCooled'
|
2870
|
+
clg_coil = create_coil_cooling_water(model,
|
2871
|
+
chilled_water_loop,
|
2872
|
+
name: "#{air_loop.name} Clg Coil")
|
2873
|
+
else # 'AirCooled'
|
2874
|
+
clg_coil = OpenStudio::Model::CoilCoolingDXVariableSpeed.new(model)
|
2875
|
+
clg_coil.setName("#{air_loop.name} Var spd DX AC Clg Coil")
|
2876
|
+
clg_coil.setBasinHeaterCapacity(10.0)
|
2877
|
+
clg_coil.setBasinHeaterSetpointTemperature(2.0)
|
2878
|
+
# first speed level
|
2879
|
+
clg_spd_1 = OpenStudio::Model::CoilCoolingDXVariableSpeedSpeedData.new(model)
|
2880
|
+
clg_coil.addSpeed(clg_spd_1)
|
2881
|
+
clg_coil.setNominalSpeedLevel(1)
|
2882
|
+
end
|
2816
2883
|
|
2817
2884
|
# @todo enable economizer maximum fraction outdoor air schedule input
|
2818
2885
|
# econ_eff_sch = model_add_schedule(model, 'RetailStandalone PSZ_Econ_MaxOAFrac_Sch')
|
@@ -2824,13 +2891,20 @@ class Standard
|
|
2824
2891
|
unitary_system.setCoolingCoil(clg_coil)
|
2825
2892
|
unitary_system.setSupplementalHeatingCoil(supplemental_htg_coil)
|
2826
2893
|
unitary_system.setName("#{zone.name} Unitary PSZ-VAV")
|
2827
|
-
|
2894
|
+
# The following control strategy can lead to "Developer Error: Component sizing incomplete."
|
2895
|
+
# EnergyPlus severe (not fatal) errors if there is no heating design load
|
2896
|
+
unitary_system.setControlType('SingleZoneVAV')
|
2828
2897
|
unitary_system.setControllingZoneorThermostatLocation(zone)
|
2829
2898
|
unitary_system.setMaximumSupplyAirTemperature(dsgn_temps['zn_htg_dsgn_sup_air_temp_c'])
|
2830
2899
|
unitary_system.setFanPlacement('BlowThrough')
|
2831
2900
|
unitary_system.setSupplyAirFlowRateMethodDuringCoolingOperation('SupplyAirFlowRate')
|
2832
2901
|
unitary_system.setSupplyAirFlowRateMethodDuringHeatingOperation('SupplyAirFlowRate')
|
2833
|
-
|
2902
|
+
if minimum_volume_setpoint.nil?
|
2903
|
+
unitary_system.setSupplyAirFlowRateMethodWhenNoCoolingorHeatingisRequired('SupplyAirFlowRate')
|
2904
|
+
else
|
2905
|
+
unitary_system.setSupplyAirFlowRateMethodWhenNoCoolingorHeatingisRequired('FractionOfAutosizedCoolingValue')
|
2906
|
+
unitary_system.setFractionofAutosizedDesignCoolingSupplyAirFlowRateWhenNoCoolingorHeatingisRequired(minimum_volume_setpoint)
|
2907
|
+
end
|
2834
2908
|
unitary_system.setSupplyAirFanOperatingModeSchedule(model.alwaysOnDiscreteSchedule)
|
2835
2909
|
unitary_system.addToNode(air_loop.supplyInletNode)
|
2836
2910
|
|
@@ -4415,7 +4489,7 @@ class Standard
|
|
4415
4489
|
# @param model_occ_hr_end [Double] (Optional) Only applies if control_strategy is 'proportional_control'.
|
4416
4490
|
# Ending hour of building occupancy.
|
4417
4491
|
# @param control_strategy [String] name of control strategy. Options are 'proportional_control' and 'none'.
|
4418
|
-
# If control strategy is 'proportional_control', the method will apply the CBE radiant control sequences
|
4492
|
+
# If control strategy is 'proportional_control', the method will apply the CBE radiant control sequences
|
4419
4493
|
# detailed in Raftery et al. (2017), “A new control strategy for high thermal mass radiant systems”.
|
4420
4494
|
# Otherwise no control strategy will be applied and the radiant system will assume the EnergyPlus default controls.
|
4421
4495
|
# @param proportional_gain [Double] (Optional) Only applies if control_strategy is 'proportional_control'.
|
@@ -470,8 +470,6 @@ class Standard
|
|
470
470
|
# Calculate the typical pressure - same for all building types
|
471
471
|
final_pressure_pa = 0.5 * cs * rho * uh**2
|
472
472
|
|
473
|
-
# OpenStudio::logFree(OpenStudio::Debug, "openstudio.Standards.Space", "Final pressure PA = #{final_pressure_pa.round(3)} Pa.")
|
474
|
-
|
475
473
|
adjusted_infiltration_rate_m3_per_s = (1.0 + alpha) * initial_infiltration_rate_m3_per_s * (final_pressure_pa / intial_pressure_pa)**n
|
476
474
|
|
477
475
|
return adjusted_infiltration_rate_m3_per_s
|
@@ -691,10 +689,10 @@ class Standard
|
|
691
689
|
case intended_surface_type
|
692
690
|
when 'AtticFloor'
|
693
691
|
film_r_si += film_int_surf_ht_flow_up_r_si if ext_film # Outside
|
694
|
-
film_r_si += film_semi_ext_surf_r_si if int_film # Inside
|
692
|
+
film_r_si += film_semi_ext_surf_r_si if int_film # Inside @todo: this is only true if the attic is ventilated, interior film should be used otheriwse
|
695
693
|
when 'AtticWall', 'AtticRoof'
|
696
694
|
film_r_si += film_ext_surf_r_si if ext_film # Outside
|
697
|
-
film_r_si += film_semi_ext_surf_r_si if int_film # Inside
|
695
|
+
film_r_si += film_semi_ext_surf_r_si if int_film # Inside @todo: this is only true if the attic is ventilated, interior film should be used otherwise
|
698
696
|
when 'DemisingFloor', 'InteriorFloor'
|
699
697
|
film_r_si += film_int_surf_ht_flow_up_r_si if ext_film # Outside
|
700
698
|
film_r_si += film_int_surf_ht_flow_dwn_r_si if int_film # Inside
|
@@ -39,6 +39,7 @@ def create_class_array
|
|
39
39
|
'ASHRAE9012007' => '90.1-2007',
|
40
40
|
'ASHRAE9012010' => '90.1-2010',
|
41
41
|
'ASHRAE9012013' => '90.1-2013',
|
42
|
+
'ASHRAE901PRM2019' => '90.1-PRM-2019',
|
42
43
|
'ASHRAE9012016' => '90.1-2016',
|
43
44
|
'ASHRAE9012019' => '90.1-2019',
|
44
45
|
'DOERef1980to2004' => 'DOE Ref 1980-2004',
|
@@ -30,6 +30,9 @@ module References
|
|
30
30
|
# @see https://www.techstreet.com/ashrae/standards/ashrae-90-1-2016-i-p?product_id=1931793 Purchase in the ASHRAE Bookstore
|
31
31
|
class ASHRAE9012016; end
|
32
32
|
|
33
|
+
# ASHRAE 90.1-2019 Appendix G PRM
|
34
|
+
# @see https://www.techstreet.com/ashrae/standards/ashrae-90-1-2019-i-p?product_id=2088527 Purchase in the ASHRAE Bookstore
|
35
|
+
class ASHRAE901PRM2019; end
|
33
36
|
# ASHRAE 90.1-2019
|
34
37
|
# @see https://www.techstreet.com/ashrae/standards/ashrae-90-1-2019-i-p?product_id=2088527 Purchase in the ASHRAE Bookstore
|
35
38
|
class ASHRAE9012019; end
|