openstudio-model-articulation 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -2
  3. data/CHANGELOG.md +8 -0
  4. data/README.md +8 -3
  5. data/lib/measures/AssignConstructionSetToBuilding/measure.xml +10 -10
  6. data/lib/measures/AssignSpaceTypeBySpaceName/measure.xml +27 -9
  7. data/lib/measures/AssignSpaceTypeToBuilding/measure.xml +10 -10
  8. data/lib/measures/AssignSpacesToStories/measure.rb +2 -4
  9. data/lib/measures/AssignSpacesToStories/measure.xml +10 -10
  10. data/lib/measures/BarAspectRatioStudy/measure.rb +2 -1
  11. data/lib/measures/BarAspectRatioStudy/measure.xml +4 -4
  12. data/lib/measures/CleanupSpaceOrigins/measure.rb +3 -0
  13. data/lib/measures/CleanupSpaceOrigins/measure.xml +10 -10
  14. data/lib/measures/FindAndReplaceObjectNames/measure.xml +8 -8
  15. data/lib/measures/InjectOsmGeometryIntoAnExternalIdf/measure.rb +2 -2
  16. data/lib/measures/InjectOsmGeometryIntoAnExternalIdf/measure.xml +22 -4
  17. data/lib/measures/RemoveHardAssignedConstructions/measure.xml +8 -8
  18. data/lib/measures/RenameSpaceSurfacesBasedonParentSpaceandOrientation/measure.xml +37 -7
  19. data/lib/measures/RotateBuilding/measure.xml +8 -8
  20. data/lib/measures/SetExtWallToGroundBoundaryConditionByStory/measure.xml +13 -7
  21. data/lib/measures/SetInteriorWallsAndFloorsToAdiabatic/measure.rb +1 -1
  22. data/lib/measures/SetInteriorWallsAndFloorsToAdiabatic/measure.xml +10 -10
  23. data/lib/measures/SetInteriorWallsToSelectedConstruction/measure.rb +1 -1
  24. data/lib/measures/SetInteriorWallsToSelectedConstruction/measure.xml +10 -10
  25. data/lib/measures/SetWindowToWallRatioByFacade/README.md +11 -0
  26. data/lib/measures/SetWindowToWallRatioByFacade/measure.rb +84 -143
  27. data/lib/measures/SetWindowToWallRatioByFacade/measure.xml +32 -17
  28. data/lib/measures/SetWindowToWallRatioByFacade/resources/functions.rb +176 -0
  29. data/lib/measures/SimplifyGeometryToSlicedBar/measure.rb +8 -4
  30. data/lib/measures/SimplifyGeometryToSlicedBar/measure.xml +31 -13
  31. data/lib/measures/SimplifyGeometryToSlicedBar/resources/os_lib_cofee.rb +6 -4
  32. data/lib/measures/SimplifyGeometryToSlicedBar/resources/os_lib_geometry.rb +13 -8
  33. data/lib/measures/SimplifyGeometryToSlicedBar/resources/os_lib_helper_methods.rb +2 -4
  34. data/lib/measures/SpaceTypeAndConstructionSetWizard/measure.rb +1 -1
  35. data/lib/measures/SpaceTypeAndConstructionSetWizard/measure.xml +4 -4
  36. data/lib/measures/SurfaceMatching/measure.rb +1 -0
  37. data/lib/measures/SurfaceMatching/measure.xml +10 -10
  38. data/lib/measures/blended_space_type_from_floor_area_ratios/measure.rb +4 -3
  39. data/lib/measures/blended_space_type_from_floor_area_ratios/measure.xml +4 -4
  40. data/lib/measures/blended_space_type_from_model/{resources → docs}/replace_occupied_spaces_with_blended_space_type_design_doc.txt +0 -0
  41. data/lib/measures/blended_space_type_from_model/measure.rb +15 -3
  42. data/lib/measures/blended_space_type_from_model/measure.xml +15 -21
  43. data/lib/measures/clone_building_from_external_model/measure.xml +3 -3
  44. data/lib/measures/create_DOE_prototype_building/measure.rb +2 -2
  45. data/lib/measures/create_DOE_prototype_building/measure.xml +442 -438
  46. data/lib/measures/create_and_assign_thermal_zones_for_unassigned_spaces/measure.xml +3 -3
  47. data/lib/measures/create_bar_from_building_type_ratios/measure.rb +3 -3
  48. data/lib/measures/create_bar_from_building_type_ratios/measure.xml +14 -14
  49. data/lib/measures/create_bar_from_deer_building_type_ratios/measure.rb +3 -3
  50. data/lib/measures/create_bar_from_deer_building_type_ratios/measure.xml +16 -16
  51. data/lib/measures/create_bar_from_doe_building_type_ratios/measure.rb +3 -3
  52. data/lib/measures/create_bar_from_doe_building_type_ratios/measure.xml +14 -14
  53. data/lib/measures/create_bar_from_model/measure.rb +10 -6
  54. data/lib/measures/create_bar_from_model/measure.xml +4 -4
  55. data/lib/measures/create_bar_from_space_type_ratios/measure.rb +3 -3
  56. data/lib/measures/create_bar_from_space_type_ratios/measure.xml +16 -16
  57. data/lib/measures/create_baseline_building/measure.rb +3 -2
  58. data/lib/measures/create_baseline_building/measure.xml +4 -4
  59. data/lib/measures/create_deer_prototype_building/measure.xml +3 -3
  60. data/lib/measures/create_parametric_schedules/measure.rb +15 -10
  61. data/lib/measures/create_parametric_schedules/measure.xml +4 -4
  62. data/lib/measures/create_typical_building_from_model/measure.rb +1 -1
  63. data/lib/measures/create_typical_building_from_model/measure.xml +21 -21
  64. data/lib/measures/create_typical_deer_building_from_model/measure.rb +1 -1
  65. data/lib/measures/create_typical_deer_building_from_model/measure.xml +21 -21
  66. data/lib/measures/create_typical_doe_building_from_model/measure.rb +1 -1
  67. data/lib/measures/create_typical_doe_building_from_model/measure.xml +21 -21
  68. data/lib/measures/deer_space_type_and_construction_set_wizard/measure.rb +1 -1
  69. data/lib/measures/deer_space_type_and_construction_set_wizard/measure.xml +4 -4
  70. data/lib/measures/find_and_replace_in_all_thermal_zone_names/measure.xml +3 -3
  71. data/lib/measures/make_shading_surfaces_based_on_zone_multipliers/measure.rb +2 -0
  72. data/lib/measures/make_shading_surfaces_based_on_zone_multipliers/measure.xml +4 -4
  73. data/lib/measures/merge_floorspace_js_with_model/measure.rb +4 -1
  74. data/lib/measures/merge_floorspace_js_with_model/measure.xml +4 -4
  75. data/lib/measures/merge_spaces_from_external_file/measure.xml +3 -3
  76. data/lib/measures/radiance_measure/measure.rb +62 -56
  77. data/lib/measures/radiance_measure/measure.xml +4 -4
  78. data/lib/measures/radiant_slab_with_doas/measure.rb +4 -1
  79. data/lib/measures/radiant_slab_with_doas/measure.xml +4 -4
  80. data/lib/measures/replace_geometry_by_story/measure.rb +4 -0
  81. data/lib/measures/replace_geometry_by_story/measure.xml +4 -4
  82. data/lib/measures/scale_geometry/measure.xml +3 -3
  83. data/lib/openstudio/model_articulation/version.rb +1 -1
  84. data/openstudio-model-articulation.gemspec +1 -1
  85. metadata +7 -7
  86. data/lib/measures/blended_space_type_from_model/resources/os_lib_model_simplification.rb +0 -1049
@@ -50,6 +50,7 @@ require 'open3'
50
50
  class Array
51
51
  def average
52
52
  raise 'Cannot average 0 items' if empty?
53
+
53
54
  sum = inject(:+)
54
55
 
55
56
  (sum / size).to_f
@@ -126,6 +127,7 @@ class RadianceMeasure < OpenStudio::Measure::ModelMeasure
126
127
 
127
128
  print_statement("Reading '#{filename}'", runner)
128
129
  raise "Could not find illuminance file #{filename}" unless File.exist?(filename)
130
+
129
131
  File.read(filename).each_line do |line|
130
132
  data_section = true if line =~ /^\s?\d/
131
133
  if data_section
@@ -360,9 +362,10 @@ class RadianceMeasure < OpenStudio::Measure::ModelMeasure
360
362
  coreCount = OpenStudio::System.numberOfProcessors
361
363
  sim_cores = '1'
362
364
 
363
- if use_cores == 'Max'
365
+ case use_cores
366
+ when 'Max'
364
367
  sim_cores = coreCount
365
- elsif use_cores == 'Min'
368
+ when 'Min'
366
369
  sim_cores = 1
367
370
  else
368
371
  sim_cores = coreCount - 1
@@ -422,12 +425,12 @@ class RadianceMeasure < OpenStudio::Measure::ModelMeasure
422
425
  perlpath = OpenStudio.getApplicationRunDirectory.parent_path /
423
426
  OpenStudio::Path.new('strawberry-perl-5.16.2.1-32bit-portable-reduced/perl/bin')
424
427
  end
425
- print_statement('Adding path for local perl: ' + perlpath.to_s, runner)
426
- ENV['PATH'] = path + ';' + ENV['PATH'] + ';' + perlpath.to_s
427
- ENV['RAYPATH'] = path + ';' + raypath + ';.'
428
+ print_statement("Adding path for local perl: #{perlpath}", runner)
429
+ ENV['PATH'] = "#{path};#{ENV['PATH']};#{perlpath}"
430
+ ENV['RAYPATH'] = "#{path};#{raypath};."
428
431
  else
429
- ENV['PATH'] = path + ':' + ENV['PATH']
430
- ENV['RAYPATH'] = path + ':' + raypath + ':.'
432
+ ENV['PATH'] = "#{path}:#{ENV['PATH']}"
433
+ ENV['RAYPATH'] = "#{path}:#{raypath}:."
431
434
  end
432
435
 
433
436
  end
@@ -512,14 +515,10 @@ class RadianceMeasure < OpenStudio::Measure::ModelMeasure
512
515
  print_statement('Running on Windows (sorry)', runner) if OS.windows && debug_mode
513
516
  print_statement('Running on unix', runner) if OS.unix && debug_mode
514
517
 
515
- if !got_2x
516
-
517
- if Dir.glob(epw2weapath + programExtension).empty?
518
-
519
- runner.registerError("Cannot find epw2wea tool in radiance installation at '#{radiancePath}'. You may need to install a newer version of Radiance.")
520
- exit false
518
+ if !got_2x && Dir.glob(epw2weapath + programExtension).empty?
521
519
 
522
- end
520
+ runner.registerError("Cannot find epw2wea tool in radiance installation at '#{radiancePath}'. You may need to install a newer version of Radiance.")
521
+ exit false
523
522
 
524
523
  end
525
524
 
@@ -738,7 +737,7 @@ class RadianceMeasure < OpenStudio::Measure::ModelMeasure
738
737
  tempSettings = tempIO.split(' ')
739
738
  options_klemsDensity = "#{tempSettings[0]} #{tempSettings[1]}"
740
739
  options_skyvecDensity = tempSettings[3].split(':')[1]
741
- options_tregVars = tempSettings[2..-1].join(' ')
740
+ options_tregVars = tempSettings[2..].join(' ')
742
741
  end
743
742
 
744
743
  File.open("#{radPath}/options/dmx.opt", 'r') do |file|
@@ -777,11 +776,13 @@ class RadianceMeasure < OpenStudio::Measure::ModelMeasure
777
776
  windowGroupCheck = File.open('bsdf/mapping.rad')
778
777
  windowGroupCheck.each do |row|
779
778
  next if row[0] == '#'
779
+
780
780
  wg = row.split(',')[0]
781
781
 
782
- if wg == 'WG0'
782
+ case wg
783
+ when 'WG0'
783
784
  haveWG0 = 'True'
784
- elsif wg == 'WG1'
785
+ when 'WG1'
785
786
  haveWG1 = 'True'
786
787
  end
787
788
  end
@@ -804,6 +805,7 @@ class RadianceMeasure < OpenStudio::Measure::ModelMeasure
804
805
 
805
806
  windowMaps.each do |row|
806
807
  next if row[0] == '#'
808
+
807
809
  wg = row.split(',')[0]
808
810
 
809
811
  rad_command = ''
@@ -968,11 +970,13 @@ class RadianceMeasure < OpenStudio::Measure::ModelMeasure
968
970
  windowGroupCheck = File.open('bsdf/mapping.rad')
969
971
  windowGroupCheck.each do |row|
970
972
  next if row[0] == '#'
973
+
971
974
  wg = row.split(',')[0]
972
975
 
973
- if wg == 'WG0'
976
+ case wg
977
+ when 'WG0'
974
978
  haveWG0 = 'True'
975
- elsif wg == 'WG1'
979
+ when 'WG1'
976
980
  haveWG1 = 'True'
977
981
  end
978
982
  end
@@ -992,6 +996,7 @@ class RadianceMeasure < OpenStudio::Measure::ModelMeasure
992
996
  windowMaps.each do |row|
993
997
  # skip header
994
998
  next if row[0] == '#'
999
+
995
1000
  wg = row.split(',')[0]
996
1001
 
997
1002
  # do uncontrolled windows (WG0)
@@ -1027,7 +1032,7 @@ class RadianceMeasure < OpenStudio::Measure::ModelMeasure
1027
1032
 
1028
1033
  else
1029
1034
 
1030
- wgXMLs = row.split(',')[4..-1]
1035
+ wgXMLs = row.split(',')[4..]
1031
1036
  if wgXMLs.size > 2
1032
1037
  print_statement("WARN: Window Group #{wg} has #{wgXMLs.size} BSDFs (2 max supported by OpenStudio application).", runner)
1033
1038
  end
@@ -1071,6 +1076,7 @@ class RadianceMeasure < OpenStudio::Measure::ModelMeasure
1071
1076
  windowGroups = File.open('bsdf/mapping.rad')
1072
1077
  windowGroups.each do |wg|
1073
1078
  next if wg[0] == '#' # skip header
1079
+
1074
1080
  windowGroup = wg.split(',')[0]
1075
1081
  next if windowGroup == 'WG0' # skip unshaded windows
1076
1082
 
@@ -1087,10 +1093,10 @@ class RadianceMeasure < OpenStudio::Measure::ModelMeasure
1087
1093
  wg_normal_z = wg_normal.split(' ')[2].to_f
1088
1094
 
1089
1095
  # DLM: hacktastic way to implement these options for now
1090
- if shadeControlType == 'AlwaysOn'
1096
+ case shadeControlType
1097
+ when 'AlwaysOn'
1091
1098
  shadeControlSetpoint = -1000
1092
- elsif
1093
- shadeControlType == 'AlwaysOff'
1099
+ when 'AlwaysOff'
1094
1100
  shadeControlSetpoint = 10000000000
1095
1101
  end
1096
1102
 
@@ -1129,7 +1135,7 @@ class RadianceMeasure < OpenStudio::Measure::ModelMeasure
1129
1135
  wgIllum = File.open("output/ts/m_#{windowGroup}.ill", 'w')
1130
1136
  wgShade = File.open("output/ts/#{windowGroup}.shd", 'w')
1131
1137
  header.each { |head| wgIllum.print head.to_s }
1132
- wgMerge.to_a.each { |array_ts| wgIllum.print " #{array_ts.join(' ')}\n" } # note leading space, for compatibility with default rfluxmtx output
1138
+ wgMerge.to_a.each { |array_ts| wgIllum.print " #{array_ts.join(' ')}\n" } # NOTE: leading space, for compatibility with default rfluxmtx output
1133
1139
  wgShadeSchedule.each { |sh| wgShade.print sh.to_s }
1134
1140
  wgIllum.close
1135
1141
  wgShade.close
@@ -1177,7 +1183,7 @@ class RadianceMeasure < OpenStudio::Measure::ModelMeasure
1177
1183
  print_statement("Starting final building illumimance file with #{mergeWindows[0]}...", runner)
1178
1184
  exec_statement("rmtxop -fa #{mergeWindows[0]} -t > output/final_merge.tmp", runner)
1179
1185
  # add remaining groups, one at a time
1180
- mergeWindows[1..-1].each do |merge|
1186
+ mergeWindows[1..].each do |merge|
1181
1187
  print_statement("adding #{merge}...", runner)
1182
1188
  temp_fname = rand(36**15).to_s(36)
1183
1189
  while merge_count > 1
@@ -1317,7 +1323,7 @@ class RadianceMeasure < OpenStudio::Measure::ModelMeasure
1317
1323
  # iterate over each sensor and combine the views together
1318
1324
  new_hash = {}
1319
1325
 
1320
- t_radGlareSensorViews[space_name].each do |sensor, v|
1326
+ t_radGlareSensorViews[space_name]&.each do |sensor, v|
1321
1327
  new_hash[sensor] = v[hour]
1322
1328
  end
1323
1329
  splitvalues[space_name] += [new_hash]
@@ -1416,7 +1422,7 @@ class RadianceMeasure < OpenStudio::Measure::ModelMeasure
1416
1422
  illum.length.times do |n|
1417
1423
  data[n] = illum[n].to_f
1418
1424
  rescue Exception => e
1419
- print_statement('Error inserting data: ' + illum[n] + ' inserting 0 instead', runner)
1425
+ print_statement("Error inserting data: #{illum[n]} inserting 0 instead", runner)
1420
1426
  data[n] = 0
1421
1427
  end
1422
1428
 
@@ -1438,7 +1444,7 @@ class RadianceMeasure < OpenStudio::Measure::ModelMeasure
1438
1444
 
1439
1445
  # for each environment period (design days, annual, or arbitrary) you will create a directory for results
1440
1446
  t_sqlFile.availableEnvPeriods.each do |envPeriod|
1441
- print_statement("envPeriod = '" + envPeriod.to_s + "'", runner)
1447
+ print_statement("envPeriod = '#{envPeriod}'", runner)
1442
1448
 
1443
1449
  diffHorizIllumAll, dirNormIllumAll, diffEfficacyAll, dirNormEfficacyAll, solarAltitudeAll, solarAzimuthAll, diffHorizUnits, dirNormUnits = getTimeSeries(t_sqlFile, envPeriod)
1444
1450
 
@@ -1493,16 +1499,14 @@ class RadianceMeasure < OpenStudio::Measure::ModelMeasure
1493
1499
  # Debug
1494
1500
  # File.open('glareSensorValues.out', 'w') { |f| f.write(glareSensorValues.to_s) }
1495
1501
 
1496
- timeSeriesIllum[i] = tsDateTime.to_s.tr(' ', ',') + ',' + "#{dirNormIllum[i]},#{diffHorizIllum[i]}," + illumSensorValues.join(',') + ',' + illumValues.join(',')
1502
+ timeSeriesIllum[i] = "#{tsDateTime.to_s.tr(' ', ',')},#{dirNormIllum[i]},#{diffHorizIllum[i]},#{illumSensorValues.join(',')},#{illumValues.join(',')}"
1497
1503
 
1498
1504
  # add glare sensor values
1499
- if t_radGlareSensorViews[space_name]
1500
- if !glareSensorValues.nil?
1501
- timeSeriesGlare[i] = tsDateTime.to_s.tr(' ', ',')
1502
- glareSensorValues.each_key do |key|
1503
- glare_values = glareSensorValues[key].map { |_, v| v['dgp'] }
1504
- timeSeriesGlare[i] += ",#{key},#{glare_values.average.round(2)},#{glare_values.min.round(2)},#{glare_values.max.round(2)},raw,#{glare_values.join(',')}"
1505
- end
1505
+ if t_radGlareSensorViews[space_name] && !glareSensorValues.nil?
1506
+ timeSeriesGlare[i] = tsDateTime.to_s.tr(' ', ',')
1507
+ glareSensorValues.each_key do |key|
1508
+ glare_values = glareSensorValues[key].map { |_, v| v['dgp'] }
1509
+ timeSeriesGlare[i] += ",#{key},#{glare_values.average.round(2)},#{glare_values.min.round(2)},#{glare_values.max.round(2)},raw,#{glare_values.join(',')}"
1506
1510
  end
1507
1511
  end
1508
1512
 
@@ -1634,7 +1638,7 @@ class RadianceMeasure < OpenStudio::Measure::ModelMeasure
1634
1638
  ys << ymin + (n * ySpacing)
1635
1639
  end
1636
1640
 
1637
- sqlOutFile.insertIlluminanceMap(space_name, space_name + ' DAYLIGHT MAP', t_epwFile.wmoNumber,
1641
+ sqlOutFile.insertIlluminanceMap(space_name, "#{space_name} DAYLIGHT MAP", t_epwFile.wmoNumber,
1638
1642
  simDateTimes, xs, ys, map.originZCoordinate,
1639
1643
  illuminanceMatrixMaps)
1640
1644
 
@@ -1755,8 +1759,8 @@ class RadianceMeasure < OpenStudio::Measure::ModelMeasure
1755
1759
  daylightSetpoint = secondaryDaylightingControl.get.illuminanceSetpoint
1756
1760
  else
1757
1761
  print_statement("Ignoring secondary daylighting control in ThermalZone '#{thermalZone.name}'", runner)
1762
+ end
1758
1763
  end
1759
- end
1760
1764
 
1761
1765
  if daylightSetpoint == 0.0
1762
1766
  space.daylightingControls.each do |i|
@@ -1809,7 +1813,7 @@ class RadianceMeasure < OpenStudio::Measure::ModelMeasure
1809
1813
 
1810
1814
  schedule = schedule.get
1811
1815
 
1812
- schedule.setName(thermalZone.name.get + ' Lights Schedule')
1816
+ schedule.setName("#{thermalZone.name.get} Lights Schedule")
1813
1817
 
1814
1818
  # remove all lights in this zone
1815
1819
  spaces.each do |space|
@@ -1872,6 +1876,7 @@ class RadianceMeasure < OpenStudio::Measure::ModelMeasure
1872
1876
 
1873
1877
  thermalZone = space.thermalZone
1874
1878
  next if thermalZone.empty?
1879
+
1875
1880
  thermalZone = thermalZone.get
1876
1881
 
1877
1882
  map_name = "#{space_name} DAYLIGHT MAP"
@@ -1949,7 +1954,8 @@ class RadianceMeasure < OpenStudio::Measure::ModelMeasure
1949
1954
 
1950
1955
  da = 0
1951
1956
 
1952
- if $METHOD == 0
1957
+ case $METHOD
1958
+ when 0
1953
1959
 
1954
1960
  # get map values
1955
1961
  map_values = radoutFile.illuminanceMap(hourly_report_index)
@@ -1968,9 +1974,9 @@ class RadianceMeasure < OpenStudio::Measure::ModelMeasure
1968
1974
  end
1969
1975
  end
1970
1976
 
1971
- da = num_da.to_f / num.to_f
1977
+ da = num_da.to_f / num
1972
1978
 
1973
- elsif $METHOD == 1
1979
+ when 1
1974
1980
 
1975
1981
  x = OpenStudio::DoubleVector.new
1976
1982
  y = OpenStudio::DoubleVector.new
@@ -2000,10 +2006,10 @@ class RadianceMeasure < OpenStudio::Measure::ModelMeasure
2000
2006
  end
2001
2007
  end
2002
2008
 
2003
- da = num_da.to_f / num.to_f
2004
- cda = num_cda.to_f / num.to_f
2005
- udi = num_udi.to_f / num.to_f
2006
- sda = num_sda.to_f / num.to_f
2009
+ da = num_da.to_f / num
2010
+ cda = num_cda.to_f / num
2011
+ udi = num_udi.to_f / num
2012
+ sda = num_sda.to_f / num
2007
2013
 
2008
2014
  end
2009
2015
 
@@ -2042,7 +2048,7 @@ class RadianceMeasure < OpenStudio::Measure::ModelMeasure
2042
2048
  da_daylit_num += 1
2043
2049
  end
2044
2050
  end
2045
- annual_da_daylit = da_daylit_sum.to_f / da_daylit_num.to_f
2051
+ annual_da_daylit = da_daylit_sum.to_f / da_daylit_num
2046
2052
  summary_report += "#{space_name},DA(#{daylightSetpoint.round(0)}),Daylit Hours,#{annual_da_daylit.round(2)},#{da_daylit_sum.round(0)},#{da_daylit_num}\n"
2047
2053
  if !peopleTimeseries.empty?
2048
2054
  da_occupied_sum = 0
@@ -2054,7 +2060,7 @@ class RadianceMeasure < OpenStudio::Measure::ModelMeasure
2054
2060
  end
2055
2061
  end
2056
2062
  # annual_da_occupied = (da_occupied_num == 0.0 || da_occupied_sum == 0.0) ? 0.0 : da_occupied_sum.to_f / da_occupied_num.to_f
2057
- annual_da_occupied = da_occupied_sum.to_f / da_occupied_num.to_f
2063
+ annual_da_occupied = da_occupied_sum.to_f / da_occupied_num
2058
2064
  summary_report += "#{space_name},DA(#{daylightSetpoint.round(0)}),Occupied Hours,#{annual_da_occupied.round(2)},#{da_occupied_sum.round(0)},#{da_occupied_num}\n"
2059
2065
 
2060
2066
  da_daylit_occupied_sum = 0
@@ -2066,7 +2072,7 @@ class RadianceMeasure < OpenStudio::Measure::ModelMeasure
2066
2072
  end
2067
2073
  end
2068
2074
  # annual_da_daylit_occupied = (da_daylit_occupied_num == 0.0 || da_daylit_occupied_sum == 0.0) ? 0.0 : da_daylit_occupied_sum.to_f / da_daylit_occupied_num.to_f
2069
- annual_da_daylit_occupied = da_daylit_occupied_sum.to_f / da_daylit_occupied_num.to_f
2075
+ annual_da_daylit_occupied = da_daylit_occupied_sum.to_f / da_daylit_occupied_num
2070
2076
  summary_report += "#{space_name},DA(#{daylightSetpoint.round(0)}),Daylit and Occupied Hours,#{annual_da_daylit_occupied.round(2)},#{da_daylit_occupied_sum.round(0)},#{da_daylit_occupied_num}\n"
2071
2077
  end
2072
2078
 
@@ -2079,7 +2085,7 @@ class RadianceMeasure < OpenStudio::Measure::ModelMeasure
2079
2085
  cda_daylit_num += 1
2080
2086
  end
2081
2087
  end
2082
- annual_cda_daylit = cda_daylit_sum.to_f / cda_daylit_num.to_f
2088
+ annual_cda_daylit = cda_daylit_sum.to_f / cda_daylit_num
2083
2089
  summary_report += "#{space_name},conDA(#{daylightSetpoint.round(0)}),Daylit Hours,#{annual_cda_daylit.round(2)},#{cda_daylit_sum.round(0)},#{cda_daylit_num}\n"
2084
2090
 
2085
2091
  if !peopleTimeseries.empty?
@@ -2091,7 +2097,7 @@ class RadianceMeasure < OpenStudio::Measure::ModelMeasure
2091
2097
  cda_occupied_num += 1
2092
2098
  end
2093
2099
  end
2094
- annual_cda_occupied = cda_occupied_sum.to_f / cda_occupied_num.to_f
2100
+ annual_cda_occupied = cda_occupied_sum.to_f / cda_occupied_num
2095
2101
  summary_report += "#{space_name},conDA(#{daylightSetpoint.round(0)}),Occupied Hours,#{annual_cda_occupied.round(2)},#{cda_occupied_sum.round(0)},#{cda_occupied_num}\n"
2096
2102
 
2097
2103
  cda_daylit_occupied_sum = 0
@@ -2102,7 +2108,7 @@ class RadianceMeasure < OpenStudio::Measure::ModelMeasure
2102
2108
  cda_daylit_occupied_num += 1
2103
2109
  end
2104
2110
  end
2105
- annual_cda_daylit_occupied = cda_daylit_occupied_sum.to_f / cda_daylit_occupied_num.to_f
2111
+ annual_cda_daylit_occupied = cda_daylit_occupied_sum.to_f / cda_daylit_occupied_num
2106
2112
  summary_report += "#{space_name},conDA(#{daylightSetpoint.round(0)}),Daylit and Occupied Hours,#{annual_cda_daylit_occupied.round(2)},#{cda_daylit_occupied_sum.round(0)},#{cda_daylit_occupied_num}\n"
2107
2113
  end
2108
2114
 
@@ -2115,7 +2121,7 @@ class RadianceMeasure < OpenStudio::Measure::ModelMeasure
2115
2121
  udi_daylit_num += 1
2116
2122
  end
2117
2123
  end
2118
- annual_udi_daylit = udi_daylit_sum.to_f / udi_daylit_num.to_f
2124
+ annual_udi_daylit = udi_daylit_sum.to_f / udi_daylit_num
2119
2125
  summary_report += "#{space_name},UDI(100-3000),Daylit Hours,#{annual_udi_daylit.round(2)},#{udi_daylit_sum.round(0)},#{udi_daylit_num}\n"
2120
2126
  if !peopleTimeseries.empty?
2121
2127
  udi_occupied_sum = 0
@@ -2126,7 +2132,7 @@ class RadianceMeasure < OpenStudio::Measure::ModelMeasure
2126
2132
  udi_occupied_num += 1
2127
2133
  end
2128
2134
  end
2129
- annual_udi_occupied = udi_occupied_sum.to_f / udi_occupied_num.to_f
2135
+ annual_udi_occupied = udi_occupied_sum.to_f / udi_occupied_num
2130
2136
  summary_report += "#{space_name},UDI(100-3000),Occupied Hours,#{annual_udi_occupied.round(2)},#{udi_occupied_sum.round(0)},#{udi_occupied_num}\n"
2131
2137
 
2132
2138
  udi_daylit_occupied_sum = 0
@@ -2137,7 +2143,7 @@ class RadianceMeasure < OpenStudio::Measure::ModelMeasure
2137
2143
  udi_daylit_occupied_num += 1
2138
2144
  end
2139
2145
  end
2140
- annual_udi_daylit_occupied = udi_daylit_occupied_sum.to_f / udi_daylit_occupied_num.to_f
2146
+ annual_udi_daylit_occupied = udi_daylit_occupied_sum.to_f / udi_daylit_occupied_num
2141
2147
  summary_report += "#{space_name},UDI(100-3000),Daylit and Occupied Hours,#{annual_udi_daylit_occupied.round(2)},#{cda_daylit_occupied_sum.round(0)},#{cda_daylit_occupied_num}\n"
2142
2148
  end
2143
2149
 
@@ -2150,7 +2156,7 @@ class RadianceMeasure < OpenStudio::Measure::ModelMeasure
2150
2156
  sda_num += 1
2151
2157
  end
2152
2158
  end
2153
- annual_sda = sda_sum.to_f / sda_num.to_f
2159
+ annual_sda = sda_sum.to_f / sda_num
2154
2160
  summary_report += "#{space_name},sDA(300),8AM-5PM (10 hours/day per IESNA LM-83-12),#{annual_sda.round(2)},#{sda_sum.round(0)},#{sda_num}\n"
2155
2161
 
2156
2162
  # Make building average metrics
@@ -3,8 +3,8 @@
3
3
  <schema_version>3.0</schema_version>
4
4
  <name>radiance_measure</name>
5
5
  <uid>1e3cfef8-b051-4e60-8bb0-ed2d29d4f45f</uid>
6
- <version_id>8f5a752a-5020-460d-b6b8-5cb7fe90e688</version_id>
7
- <version_modified>20210423T142538Z</version_modified>
6
+ <version_id>9b2fd6b5-9767-4a55-9b61-eb663567509b</version_id>
7
+ <version_modified>20220505T182929Z</version_modified>
8
8
  <xml_checksum>381B7733</xml_checksum>
9
9
  <class_name>RadianceMeasure</class_name>
10
10
  <display_name>Radiance Daylighting Measure</display_name>
@@ -193,13 +193,13 @@
193
193
  <filename>measure.rb</filename>
194
194
  <filetype>rb</filetype>
195
195
  <usage_type>script</usage_type>
196
- <checksum>6EB721A1</checksum>
196
+ <checksum>FD74EFB9</checksum>
197
197
  </file>
198
198
  <file>
199
199
  <filename>radiance_measure_test.rb</filename>
200
200
  <filetype>rb</filetype>
201
201
  <usage_type>test</usage_type>
202
- <checksum>7CDD7A50</checksum>
202
+ <checksum>AAD3F5F1</checksum>
203
203
  </file>
204
204
  </files>
205
205
  </measure>
@@ -221,7 +221,7 @@ To reduce unmet hours, use an expanded comfort range as mentioned above, remove
221
221
  if remove_existing_hvac
222
222
  runner.registerInfo('Removing existing HVAC systems from the model')
223
223
  if std.respond_to?('remove_HVAC')
224
- std.remove_HVAC(model) #OpenStuido 3.2.1 and earlierop use this, future versions will use snake_case method
224
+ std.remove_HVAC(model) # OpenStuido 3.2.1 and earlierop use this, future versions will use snake_case method
225
225
  else
226
226
  std.remove_hvac(model)
227
227
  end
@@ -232,6 +232,7 @@ To reduce unmet hours, use an expanded comfort range as mentioned above, remove
232
232
  model.getThermalZones.each do |zone|
233
233
  next if std.thermal_zone_plenum?(zone)
234
234
  next if !std.thermal_zone_heated?(zone) && !std.thermal_zone_cooled?(zone)
235
+
235
236
  conditioned_zones << zone
236
237
  end
237
238
 
@@ -386,8 +387,10 @@ To reduce unmet hours, use an expanded comfort range as mentioned above, remove
386
387
  next if radiant_type == 'floor' && surface.surfaceType != 'Floor'
387
388
  next if radiant_type == 'ceiling' && surface.surfaceType != 'RoofCeiling'
388
389
  next unless surface.space.is_initialized
390
+
389
391
  surface_space_name = surface.space.get.name.to_s
390
392
  next unless conditioned_space_names.include? surface_space_name
393
+
391
394
  var = OpenStudio::Model::OutputVariable.new('Surface Inside Face Temperature', model)
392
395
  var.setKeyValue(surface.name.to_s)
393
396
  vars << var
@@ -3,8 +3,8 @@
3
3
  <schema_version>3.0</schema_version>
4
4
  <name>radiant_slab_with_doas</name>
5
5
  <uid>8091a0c3-7760-4da6-adf4-133d55872816</uid>
6
- <version_id>04a7b943-a909-4dc9-a06a-d6f28b819be0</version_id>
7
- <version_modified>20210723T213422Z</version_modified>
6
+ <version_id>764afd7f-f6e7-4e73-bc92-1230e49b2145</version_id>
7
+ <version_modified>20220505T182927Z</version_modified>
8
8
  <xml_checksum>C49A7DAB</xml_checksum>
9
9
  <class_name>RadiantSlabWithDoas</class_name>
10
10
  <display_name>Radiant Slab with DOAS</display_name>
@@ -329,7 +329,7 @@ To reduce unmet hours, use an expanded comfort range as mentioned above, remove
329
329
  <filename>radiant_slab_with_doas_test.rb</filename>
330
330
  <filetype>rb</filetype>
331
331
  <usage_type>test</usage_type>
332
- <checksum>7C1AC4AE</checksum>
332
+ <checksum>2317B466</checksum>
333
333
  </file>
334
334
  <file>
335
335
  <version>
@@ -340,7 +340,7 @@ To reduce unmet hours, use an expanded comfort range as mentioned above, remove
340
340
  <filename>measure.rb</filename>
341
341
  <filetype>rb</filetype>
342
342
  <usage_type>script</usage_type>
343
- <checksum>41F3702A</checksum>
343
+ <checksum>12177EE8</checksum>
344
344
  </file>
345
345
  </files>
346
346
  </measure>
@@ -83,6 +83,7 @@ class ReplaceGeometryByStory < OpenStudio::Measure::ModelMeasure
83
83
  story_hash = {}
84
84
  model.getBuildingStorys.each do |story|
85
85
  next if !story.spaces.first.spaceType.is_initialized
86
+
86
87
  story_hash[story] = {}
87
88
  story_hash[story][:space_type] = story.spaces.first.spaceType.get
88
89
 
@@ -198,6 +199,7 @@ class ReplaceGeometryByStory < OpenStudio::Measure::ModelMeasure
198
199
  if hash[:basement]
199
200
  space.surfaces.each do |surface|
200
201
  next if surface.surfaceType != 'Wall'
202
+
201
203
  surface.setOutsideBoundaryCondition('Ground')
202
204
  end
203
205
  end
@@ -214,6 +216,7 @@ class ReplaceGeometryByStory < OpenStudio::Measure::ModelMeasure
214
216
  space.surfaces.each do |surface|
215
217
  next if surface.outsideBoundaryCondition != 'Outdoors'
216
218
  next if surface.surfaceType != 'Wall'
219
+
217
220
  surface.setWindowToWallRatio(target_wwr)
218
221
  end
219
222
  end
@@ -222,6 +225,7 @@ class ReplaceGeometryByStory < OpenStudio::Measure::ModelMeasure
222
225
  zone_hash = {} # key is zone value is floor area. It excludes zones with non 1 multiplier
223
226
  model.getThermalZones.each do |thermal_zone|
224
227
  next if thermal_zone.multiplier > 1
228
+
225
229
  zone_hash[thermal_zone] = thermal_zone.floorArea
226
230
  end
227
231
  target_zone = zone_hash.key(zone_hash.values.max)
@@ -3,8 +3,8 @@
3
3
  <schema_version>3.0</schema_version>
4
4
  <name>replace_geometry_by_story</name>
5
5
  <uid>03b18912-0ceb-47e9-8f8b-417a3008e189</uid>
6
- <version_id>00a0fde1-875a-470c-9754-7dac5123f162</version_id>
7
- <version_modified>20210423T142539Z</version_modified>
6
+ <version_id>0c043052-fbe4-4cb6-809b-4659f265a0dd</version_id>
7
+ <version_modified>20220505T182928Z</version_modified>
8
8
  <xml_checksum>2AF3A68E</xml_checksum>
9
9
  <class_name>ReplaceGeometryByStory</class_name>
10
10
  <display_name>Replace Geometry By Story</display_name>
@@ -72,13 +72,13 @@
72
72
  <filename>measure.rb</filename>
73
73
  <filetype>rb</filetype>
74
74
  <usage_type>script</usage_type>
75
- <checksum>41CF21B6</checksum>
75
+ <checksum>7478785A</checksum>
76
76
  </file>
77
77
  <file>
78
78
  <filename>replace_geometry_by_story_test.rb</filename>
79
79
  <filetype>rb</filetype>
80
80
  <usage_type>test</usage_type>
81
- <checksum>5724D925</checksum>
81
+ <checksum>DC2F0000</checksum>
82
82
  </file>
83
83
  </files>
84
84
  </measure>
@@ -3,8 +3,8 @@
3
3
  <schema_version>3.0</schema_version>
4
4
  <name>scale_geometry</name>
5
5
  <uid>f9cc2ffc-2838-4a18-8330-97e7cc94cdf8</uid>
6
- <version_id>1d87e96f-e6a1-4f0d-a214-43af7f49ed48</version_id>
7
- <version_modified>20210423T142539Z</version_modified>
6
+ <version_id>ea83673c-44b7-4fa4-90f4-f26a9ebf52bb</version_id>
7
+ <version_modified>20220505T182930Z</version_modified>
8
8
  <xml_checksum>7AD75066</xml_checksum>
9
9
  <class_name>ScaleGeometry</class_name>
10
10
  <display_name>scale_geometry</display_name>
@@ -116,7 +116,7 @@
116
116
  <filename>scale_geometry_test.rb</filename>
117
117
  <filetype>rb</filetype>
118
118
  <usage_type>test</usage_type>
119
- <checksum>4689D94C</checksum>
119
+ <checksum>5A612286</checksum>
120
120
  </file>
121
121
  </files>
122
122
  </measure>
@@ -35,6 +35,6 @@
35
35
 
36
36
  module OpenStudio
37
37
  module ModelArticulation
38
- VERSION = '0.5.0'.freeze
38
+ VERSION = '0.6.0'.freeze
39
39
  end
40
40
  end
@@ -30,7 +30,7 @@ Gem::Specification.new do |spec|
30
30
 
31
31
  spec.add_dependency 'bundler', '~> 2.1'
32
32
  spec.add_dependency 'openstudio-extension', '~> 0.5.1'
33
- spec.add_dependency 'openstudio-standards', '~> 0.2.15'
33
+ spec.add_dependency 'openstudio-standards', '~> 0.2.16'
34
34
 
35
35
  spec.add_development_dependency 'rake', '~> 13.0'
36
36
  spec.add_development_dependency 'rspec', '~> 3.9'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openstudio-model-articulation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Goldwasser
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-11-10 00:00:00.000000000 Z
11
+ date: 2022-05-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.2.15
47
+ version: 0.2.16
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.2.15
54
+ version: 0.2.16
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -184,6 +184,7 @@ files:
184
184
  - lib/measures/SetWindowToWallRatioByFacade/README.md.erb
185
185
  - lib/measures/SetWindowToWallRatioByFacade/measure.rb
186
186
  - lib/measures/SetWindowToWallRatioByFacade/measure.xml
187
+ - lib/measures/SetWindowToWallRatioByFacade/resources/functions.rb
187
188
  - lib/measures/SimplifyGeometryToSlicedBar/LICENSE.md
188
189
  - lib/measures/SimplifyGeometryToSlicedBar/README.md
189
190
  - lib/measures/SimplifyGeometryToSlicedBar/README.md.erb
@@ -219,10 +220,9 @@ files:
219
220
  - lib/measures/blended_space_type_from_model/LICENSE.md
220
221
  - lib/measures/blended_space_type_from_model/README.md
221
222
  - lib/measures/blended_space_type_from_model/README.md.erb
223
+ - lib/measures/blended_space_type_from_model/docs/replace_occupied_spaces_with_blended_space_type_design_doc.txt
222
224
  - lib/measures/blended_space_type_from_model/measure.rb
223
225
  - lib/measures/blended_space_type_from_model/measure.xml
224
- - lib/measures/blended_space_type_from_model/resources/os_lib_model_simplification.rb
225
- - lib/measures/blended_space_type_from_model/resources/replace_occupied_spaces_with_blended_space_type_design_doc.txt
226
226
  - lib/measures/clone_building_from_external_model/LICENSE.md
227
227
  - lib/measures/clone_building_from_external_model/README.md
228
228
  - lib/measures/clone_building_from_external_model/README.md.erb
@@ -438,7 +438,7 @@ licenses: []
438
438
  metadata:
439
439
  bug_tracker_uri: https://github.com/NREL/openstudio-model-articulation-gem/issues
440
440
  changelog_uri: https://github.com/NREL/openstudio-model-articulation-gem/blob/develop/CHANGELOG.md
441
- source_code_uri: https://github.com/NREL/openstudio-model-articulation-gem/tree/v0.5.0
441
+ source_code_uri: https://github.com/NREL/openstudio-model-articulation-gem/tree/v0.6.0
442
442
  post_install_message:
443
443
  rdoc_options: []
444
444
  require_paths: