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.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -2
- data/CHANGELOG.md +8 -0
- data/README.md +8 -3
- data/lib/measures/AssignConstructionSetToBuilding/measure.xml +10 -10
- data/lib/measures/AssignSpaceTypeBySpaceName/measure.xml +27 -9
- data/lib/measures/AssignSpaceTypeToBuilding/measure.xml +10 -10
- data/lib/measures/AssignSpacesToStories/measure.rb +2 -4
- data/lib/measures/AssignSpacesToStories/measure.xml +10 -10
- data/lib/measures/BarAspectRatioStudy/measure.rb +2 -1
- data/lib/measures/BarAspectRatioStudy/measure.xml +4 -4
- data/lib/measures/CleanupSpaceOrigins/measure.rb +3 -0
- data/lib/measures/CleanupSpaceOrigins/measure.xml +10 -10
- data/lib/measures/FindAndReplaceObjectNames/measure.xml +8 -8
- data/lib/measures/InjectOsmGeometryIntoAnExternalIdf/measure.rb +2 -2
- data/lib/measures/InjectOsmGeometryIntoAnExternalIdf/measure.xml +22 -4
- data/lib/measures/RemoveHardAssignedConstructions/measure.xml +8 -8
- data/lib/measures/RenameSpaceSurfacesBasedonParentSpaceandOrientation/measure.xml +37 -7
- data/lib/measures/RotateBuilding/measure.xml +8 -8
- data/lib/measures/SetExtWallToGroundBoundaryConditionByStory/measure.xml +13 -7
- data/lib/measures/SetInteriorWallsAndFloorsToAdiabatic/measure.rb +1 -1
- data/lib/measures/SetInteriorWallsAndFloorsToAdiabatic/measure.xml +10 -10
- data/lib/measures/SetInteriorWallsToSelectedConstruction/measure.rb +1 -1
- data/lib/measures/SetInteriorWallsToSelectedConstruction/measure.xml +10 -10
- data/lib/measures/SetWindowToWallRatioByFacade/README.md +11 -0
- data/lib/measures/SetWindowToWallRatioByFacade/measure.rb +84 -143
- data/lib/measures/SetWindowToWallRatioByFacade/measure.xml +32 -17
- data/lib/measures/SetWindowToWallRatioByFacade/resources/functions.rb +176 -0
- data/lib/measures/SimplifyGeometryToSlicedBar/measure.rb +8 -4
- data/lib/measures/SimplifyGeometryToSlicedBar/measure.xml +31 -13
- data/lib/measures/SimplifyGeometryToSlicedBar/resources/os_lib_cofee.rb +6 -4
- data/lib/measures/SimplifyGeometryToSlicedBar/resources/os_lib_geometry.rb +13 -8
- data/lib/measures/SimplifyGeometryToSlicedBar/resources/os_lib_helper_methods.rb +2 -4
- data/lib/measures/SpaceTypeAndConstructionSetWizard/measure.rb +1 -1
- data/lib/measures/SpaceTypeAndConstructionSetWizard/measure.xml +4 -4
- data/lib/measures/SurfaceMatching/measure.rb +1 -0
- data/lib/measures/SurfaceMatching/measure.xml +10 -10
- data/lib/measures/blended_space_type_from_floor_area_ratios/measure.rb +4 -3
- data/lib/measures/blended_space_type_from_floor_area_ratios/measure.xml +4 -4
- data/lib/measures/blended_space_type_from_model/{resources → docs}/replace_occupied_spaces_with_blended_space_type_design_doc.txt +0 -0
- data/lib/measures/blended_space_type_from_model/measure.rb +15 -3
- data/lib/measures/blended_space_type_from_model/measure.xml +15 -21
- data/lib/measures/clone_building_from_external_model/measure.xml +3 -3
- data/lib/measures/create_DOE_prototype_building/measure.rb +2 -2
- data/lib/measures/create_DOE_prototype_building/measure.xml +442 -438
- data/lib/measures/create_and_assign_thermal_zones_for_unassigned_spaces/measure.xml +3 -3
- data/lib/measures/create_bar_from_building_type_ratios/measure.rb +3 -3
- data/lib/measures/create_bar_from_building_type_ratios/measure.xml +14 -14
- data/lib/measures/create_bar_from_deer_building_type_ratios/measure.rb +3 -3
- data/lib/measures/create_bar_from_deer_building_type_ratios/measure.xml +16 -16
- data/lib/measures/create_bar_from_doe_building_type_ratios/measure.rb +3 -3
- data/lib/measures/create_bar_from_doe_building_type_ratios/measure.xml +14 -14
- data/lib/measures/create_bar_from_model/measure.rb +10 -6
- data/lib/measures/create_bar_from_model/measure.xml +4 -4
- data/lib/measures/create_bar_from_space_type_ratios/measure.rb +3 -3
- data/lib/measures/create_bar_from_space_type_ratios/measure.xml +16 -16
- data/lib/measures/create_baseline_building/measure.rb +3 -2
- data/lib/measures/create_baseline_building/measure.xml +4 -4
- data/lib/measures/create_deer_prototype_building/measure.xml +3 -3
- data/lib/measures/create_parametric_schedules/measure.rb +15 -10
- data/lib/measures/create_parametric_schedules/measure.xml +4 -4
- data/lib/measures/create_typical_building_from_model/measure.rb +1 -1
- data/lib/measures/create_typical_building_from_model/measure.xml +21 -21
- data/lib/measures/create_typical_deer_building_from_model/measure.rb +1 -1
- data/lib/measures/create_typical_deer_building_from_model/measure.xml +21 -21
- data/lib/measures/create_typical_doe_building_from_model/measure.rb +1 -1
- data/lib/measures/create_typical_doe_building_from_model/measure.xml +21 -21
- data/lib/measures/deer_space_type_and_construction_set_wizard/measure.rb +1 -1
- data/lib/measures/deer_space_type_and_construction_set_wizard/measure.xml +4 -4
- data/lib/measures/find_and_replace_in_all_thermal_zone_names/measure.xml +3 -3
- data/lib/measures/make_shading_surfaces_based_on_zone_multipliers/measure.rb +2 -0
- data/lib/measures/make_shading_surfaces_based_on_zone_multipliers/measure.xml +4 -4
- data/lib/measures/merge_floorspace_js_with_model/measure.rb +4 -1
- data/lib/measures/merge_floorspace_js_with_model/measure.xml +4 -4
- data/lib/measures/merge_spaces_from_external_file/measure.xml +3 -3
- data/lib/measures/radiance_measure/measure.rb +62 -56
- data/lib/measures/radiance_measure/measure.xml +4 -4
- data/lib/measures/radiant_slab_with_doas/measure.rb +4 -1
- data/lib/measures/radiant_slab_with_doas/measure.xml +4 -4
- data/lib/measures/replace_geometry_by_story/measure.rb +4 -0
- data/lib/measures/replace_geometry_by_story/measure.xml +4 -4
- data/lib/measures/scale_geometry/measure.xml +3 -3
- data/lib/openstudio/model_articulation/version.rb +1 -1
- data/openstudio-model-articulation.gemspec +1 -1
- metadata +7 -7
- 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
|
-
|
365
|
+
case use_cores
|
366
|
+
when 'Max'
|
364
367
|
sim_cores = coreCount
|
365
|
-
|
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(
|
426
|
-
ENV['PATH'] = path
|
427
|
-
ENV['RAYPATH'] = path
|
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
|
430
|
-
ENV['RAYPATH'] = path
|
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
|
-
|
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
|
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
|
-
|
782
|
+
case wg
|
783
|
+
when 'WG0'
|
783
784
|
haveWG0 = 'True'
|
784
|
-
|
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
|
-
|
976
|
+
case wg
|
977
|
+
when 'WG0'
|
974
978
|
haveWG0 = 'True'
|
975
|
-
|
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
|
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
|
-
|
1096
|
+
case shadeControlType
|
1097
|
+
when 'AlwaysOn'
|
1091
1098
|
shadeControlSetpoint = -1000
|
1092
|
-
|
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" } #
|
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
|
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]
|
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(
|
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 = '
|
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(' ', ',')
|
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
|
-
|
1501
|
-
|
1502
|
-
glareSensorValues.
|
1503
|
-
|
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
|
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
|
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
|
-
|
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
|
1977
|
+
da = num_da.to_f / num
|
1972
1978
|
|
1973
|
-
|
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
|
2004
|
-
cda = num_cda.to_f / num
|
2005
|
-
udi = num_udi.to_f / num
|
2006
|
-
sda = num_sda.to_f / num
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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>
|
7
|
-
<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>
|
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>
|
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>
|
7
|
-
<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>
|
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>
|
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>
|
7
|
-
<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>
|
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>
|
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>
|
7
|
-
<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>
|
119
|
+
<checksum>5A612286</checksum>
|
120
120
|
</file>
|
121
121
|
</files>
|
122
122
|
</measure>
|
@@ -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.
|
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.
|
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:
|
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.
|
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.
|
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.
|
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:
|