openstudio-standards 0.2.17.rc1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/data/standards/OpenStudio_Standards-ashrae_90_1.xlsx +0 -0
  3. data/data/standards/openstudio_standards_duplicates_log.csv +5 -0
  4. data/lib/openstudio-standards/btap/btap_result.rb +138 -138
  5. data/lib/openstudio-standards/btap/economics.rb +58 -53
  6. data/lib/openstudio-standards/btap/envelope.rb +1 -1
  7. data/lib/openstudio-standards/btap/fileio.rb +12 -12
  8. data/lib/openstudio-standards/btap/measures.rb +63 -59
  9. data/lib/openstudio-standards/btap/vintagizer.rb +1 -1
  10. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.exterior_lights.rb +7 -7
  11. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +5 -1
  12. data/lib/openstudio-standards/prototypes/common/objects/Prototype.ServiceWaterHeating.rb +8 -0
  13. data/lib/openstudio-standards/prototypes/common/objects/Prototype.SizingSystem.rb +9 -3
  14. data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +53 -23
  15. data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +15 -1
  16. data/lib/openstudio-standards/standards/Standards.Construction.rb +1 -1
  17. data/lib/openstudio-standards/standards/Standards.Model.rb +18 -18
  18. data/lib/openstudio-standards/standards/Standards.PlanarSurface.rb +1 -1
  19. data/lib/openstudio-standards/standards/Standards.ThermalZone.rb +1 -1
  20. data/lib/openstudio-standards/standards/Standards.WaterHeaterMixed.rb +5 -5
  21. data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +3 -2
  22. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +43 -40
  23. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.ZoneHVACComponent.rb +2 -1
  24. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.entryways.json +19 -8
  25. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.parking.json +13 -4
  26. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.AirLoopHVAC.rb +11 -0
  27. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.AirLoopHVAC.rb +11 -0
  28. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirLoopHVAC.rb +1 -1
  29. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Model.rb +9 -9
  30. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.PlanarSurface.rb +1 -1
  31. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.PlantLoop.rb +5 -1
  32. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_6.rb +5 -1
  33. data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +8 -4
  34. data/lib/openstudio-standards/standards/necb/ECMS/nv.rb +8 -2
  35. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +7 -3
  36. data/lib/openstudio-standards/standards/necb/NECB2011/qaqc/necb_qaqc.rb +4 -4
  37. data/lib/openstudio-standards/standards/necb/NECB2011/service_water_heating.rb +1 -1
  38. data/lib/openstudio-standards/standards/necb/NECB2020/service_water_heating.rb +1 -1
  39. data/lib/openstudio-standards/version.rb +1 -1
  40. data/lib/openstudio-standards/weather/Weather.Model.rb +5 -0
  41. metadata +4 -2
@@ -21,9 +21,9 @@ class NECB2011
21
21
  # @return [Bool] returns true if an economizer is required, false if not
22
22
  def air_loop_hvac_economizer_required?(air_loop_hvac)
23
23
  economizer_required = false
24
-
24
+
25
25
  # need a better way to determine if an economizer is needed.
26
- return economizer_required if ((air_loop_hvac.name.to_s.include? 'Outpatient F1' ) ||
26
+ return economizer_required if ((air_loop_hvac.name.to_s.include? 'Outpatient F1' ) ||
27
27
  (air_loop_hvac.sizingSystem.typeofLoadtoSizeOn.to_s == "VentilationRequirement"))
28
28
 
29
29
  # A big number of btu per hr as the minimum requirement
@@ -1997,7 +1997,11 @@ class NECB2011
1997
1997
  air_loop_sizing.setCentralHeatingDesignSupplyAirTemperature(system_data[:CentralHeatingDesignSupplyAirTemperature]) unless system_data[:CentralHeatingDesignSupplyAirTemperature].nil?
1998
1998
  air_loop_sizing.setAllOutdoorAirinCooling(system_data[:AllOutdoorAirinCooling]) unless system_data[:AllOutdoorAirinCooling].nil?
1999
1999
  air_loop_sizing.setAllOutdoorAirinHeating(system_data[:AllOutdoorAirinHeating]) unless system_data[:AllOutdoorAirinHeating].nil?
2000
- air_loop_sizing.setMinimumSystemAirFlowRatio(system_data[:MinimumSystemAirFlowRatio]) unless system_data[:MinimumSystemAirFlowRatio].nil?
2000
+ if model.version < OpenStudio::VersionString.new('2.7.0')
2001
+ air_loop_sizing.setMinimumSystemAirFlowRatio(system_data[:MinimumSystemAirFlowRatio]) unless system_data[:MinimumSystemAirFlowRatio].nil?
2002
+ else
2003
+ air_loop_sizing.setCentralHeatingMaximumSystemAirFlowRatio(system_data[:MinimumSystemAirFlowRatio]) unless system_data[:MinimumSystemAirFlowRatio].nil?
2004
+ end
2001
2005
  return mau_air_loop
2002
2006
  end
2003
2007
 
@@ -835,7 +835,7 @@ class NECB2011
835
835
  air_loop_info[:cooling_coils][:dx_single_speed] << coil
836
836
  single_speed = supply_comp.to_CoilCoolingDXSingleSpeed.get
837
837
  coil[:name] = single_speed.name.get
838
- coil[:cop] = single_speed.ratedCOP.get
838
+ coil[:cop] = single_speed.ratedCOP.to_f
839
839
  coil[:nominal_total_capacity_w] = model.sqlFile.get.execAndReturnFirstDouble("SELECT Value FROM TabularDataWithStrings WHERE ReportName='EquipmentSummary' AND ReportForString='Entire Facility' AND TableName='Cooling Coils' AND ColumnName='Nominal Total Capacity' AND RowName='#{coil[:name].upcase}' ")
840
840
  coil[:nominal_total_capacity_w] = validate_optional(coil[:nominal_total_capacity_w], model, -1.0)
841
841
  end
@@ -844,8 +844,8 @@ class NECB2011
844
844
  air_loop_info[:cooling_coils][:dx_two_speed] << coil
845
845
  two_speed = supply_comp.to_CoilCoolingDXTwoSpeed.get
846
846
  coil[:name] = two_speed.name.get
847
- coil[:cop_low] = two_speed.ratedLowSpeedCOP.get
848
- coil[:cop_high] = two_speed.ratedHighSpeedCOP.get
847
+ coil[:cop_low] = two_speed.ratedLowSpeedCOP.to_f
848
+ coil[:cop_high] = two_speed.ratedHighSpeedCOP.to_f
849
849
  coil[:nominal_total_capacity_w] = model.sqlFile.get.execAndReturnFirstDouble("SELECT Value FROM TabularDataWithStrings WHERE ReportName='EquipmentSummary' AND ReportForString='Entire Facility' AND TableName='Cooling Coils' AND ColumnName='Nominal Total Capacity' AND RowName='#{coil[:name].upcase}' ")
850
850
  coil[:nominal_total_capacity_w] = validate_optional(coil[:nominal_total_capacity_w], model, -1.0)
851
851
  end
@@ -1712,7 +1712,7 @@ class NECB2011
1712
1712
  # This method will run the HRV compliance for a single air loop
1713
1713
  #
1714
1714
  # @param qaqc [:hash] Hash that contains the base data with qaqc keys
1715
- # @param model [:OS:Model] Openstudio Model
1715
+ # @param model [:OS:Model] OpenStudio Model
1716
1716
  # @param air_loop_info [:hash] single air_loop object from the qaqc hash
1717
1717
  def necb_hrv_compliance_for_single_airloop(qaqc, model, air_loop_info)
1718
1718
  # HRV check
@@ -222,7 +222,7 @@ class NECB2011
222
222
 
223
223
  # Append the name with standards information
224
224
  water_heater_mixed.setName("#{water_heater_mixed.name} #{water_heater_eff.round(3)} Therm Eff")
225
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.WaterHeaterMixed', "For #{template}: #{water_heater_mixed.name}; thermal efficiency = #{water_heater_eff.round(3)}, skin-loss UA = #{ua_btu_per_hr_per_f.round}Btu/hr")
225
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.WaterHeaterMixed', "For #{template}: #{water_heater_mixed.name}; thermal efficiency = #{water_heater_eff.round(3)}, skin-loss UA = #{ua_btu_per_hr_per_f.round}Btu/hr-R")
226
226
  return true
227
227
  end
228
228
 
@@ -153,7 +153,7 @@ class NECB2020
153
153
 
154
154
  # Append the name with standards information
155
155
  water_heater_mixed.setName("#{water_heater_mixed.name} #{water_heater_eff.round(3)} Therm Eff")
156
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.WaterHeaterMixed', "For #{template}: #{water_heater_mixed.name}; thermal efficiency = #{water_heater_eff.round(3)}, skin-loss UA = #{ua_btu_per_hr_per_f.round}Btu/hr")
156
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.WaterHeaterMixed', "For #{template}: #{water_heater_mixed.name}; thermal efficiency = #{water_heater_eff.round(3)}, skin-loss UA = #{ua_btu_per_hr_per_f.round}Btu/hr-R")
157
157
  return true
158
158
  end
159
159
  end
@@ -13,5 +13,5 @@ module OpenstudioStandards
13
13
  end
14
14
  return 'git-not-found-on-this-system'
15
15
  end
16
- VERSION = '0.2.17.rc1'.freeze
16
+ VERSION = '0.3.0'.freeze
17
17
  end
@@ -98,6 +98,11 @@ class Standard
98
98
  weather_dir = File.expand_path(File.join(Dir.pwd, 'extracted_files/weather/'))
99
99
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.weather.Model', "Extracting weather files from OpenStudio CLI to #{weather_dir}")
100
100
  FileUtils.mkdir_p(weather_dir)
101
+
102
+ path_length = "#{weather_dir}/#{weather_file_name}".length
103
+ if path_length > 260
104
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.weather.Model', "Weather file path length #{path_length} is >260 characters and may cause issues in Windows environments.")
105
+ end
101
106
  File.open("#{weather_dir}/#{weather_file_name}", 'wb') { |f| f << epw_string; f.flush }
102
107
  File.open("#{weather_dir}/#{weather_file_name.gsub('.epw', '.ddy')}", 'wb') { |f| f << ddy_string; f.flush }
103
108
  File.open("#{weather_dir}/#{weather_file_name.gsub('.epw', '.stat')}", 'wb') { |f| f << stat_string; f.flush }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openstudio-standards
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.17.rc1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Parker
@@ -28,7 +28,7 @@ authors:
28
28
  autorequire:
29
29
  bindir: bin
30
30
  cert_chain: []
31
- date: 2022-10-07 00:00:00.000000000 Z
31
+ date: 2022-11-03 00:00:00.000000000 Z
32
32
  dependencies:
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: minitest-reporters
@@ -653,6 +653,7 @@ files:
653
653
  - data/geometry/DOERefSmallOffice.json
654
654
  - data/geometry/DOERefWarehouse.json
655
655
  - data/geometry/DOERefWarehouse.osm
656
+ - data/standards/OpenStudio_Standards-ashrae_90_1.xlsx
656
657
  - data/standards/exclude_list.csv
657
658
  - data/standards/export_OpenStudio_libraries.rb
658
659
  - data/standards/legacy_dd_results.csv
@@ -661,6 +662,7 @@ files:
661
662
  - data/standards/metadata_units_OpenStudio_Standards-ashrae_90_1-ALL-comstockspace_types.csv
662
663
  - data/standards/metadata_units_OpenStudio_Standards-ashrae_90_1.csv
663
664
  - data/standards/metadata_units_OpenStudio_Standards-ashrae_90_1space_types.csv
665
+ - data/standards/openstudio_standards_duplicates_log.csv
664
666
  - data/standards/templates_to_climate_zones.json
665
667
  - data/standards/test_performance_expected_dd_results.csv
666
668
  - data/weather/ALTURAS_725958_CZ2010.ddy