openstudio-standards 0.2.17.rc1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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