openstudio-standards 0.2.15 → 0.2.16

Sign up to get free protection for your applications and to get access to all the features.
Files changed (105) hide show
  1. checksums.yaml +4 -4
  2. data/data/geometry/ASHRAECollege.osm +117 -117
  3. data/data/geometry/ASHRAEHighriseApartment.osm +0 -27
  4. data/data/standards/OpenStudio_Standards-ashrae_90_1.xlsx +0 -0
  5. data/data/standards/OpenStudio_Standards-ashrae_90_1_28Jan2022.xlsx +0 -0
  6. data/data/standards/OpenStudio_Standards-ashrae_90_1_28_Jan2022_2.xlsx +0 -0
  7. data/data/standards/export_OpenStudio_libraries.rb +2 -0
  8. data/data/standards/test_performance_expected_dd_results.csv +892 -892
  9. data/lib/openstudio-standards/btap/btap_result.rb +2 -2
  10. data/lib/openstudio-standards/btap/reporting.rb +2 -2
  11. data/lib/openstudio-standards/btap/simmanager.rb +2 -2
  12. data/lib/openstudio-standards/hvac_sizing/Siz.ControllerOutdoorAir.rb +0 -54
  13. data/lib/openstudio-standards/hvac_sizing/Siz.HeatingCoolingFuels.rb +11 -1
  14. data/lib/openstudio-standards/hvac_sizing/Siz.Model.rb +1 -1
  15. data/lib/openstudio-standards/hvac_sizing/Siz.ThermalZone.rb +2 -2
  16. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.College.rb +26 -5
  17. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Laboratory.rb +14 -6
  18. data/lib/openstudio-standards/prototypes/common/do_not_edit_metaclasses.rb +63 -63
  19. data/lib/openstudio-standards/prototypes/common/objects/Prototype.BoilerHotWater.rb +12 -9
  20. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWaterToAirHeatPumpEquationFit.rb +35 -16
  21. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWaterToAirHeatPumpEquationFit.rb +23 -10
  22. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +36 -0
  23. data/lib/openstudio-standards/prototypes/common/objects/Prototype.ServiceWaterHeating.rb +6 -6
  24. data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +25 -15
  25. data/lib/openstudio-standards/prototypes/common/prototype_metaprogramming.rb +1 -1
  26. data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +2 -2
  27. data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +9 -3
  28. data/lib/openstudio-standards/standards/Standards.CoilHeatingGas.rb +2 -0
  29. data/lib/openstudio-standards/standards/Standards.Construction.rb +12 -6
  30. data/lib/openstudio-standards/standards/Standards.Model.rb +43 -8
  31. data/lib/openstudio-standards/standards/Standards.PlanarSurface.rb +15 -0
  32. data/lib/openstudio-standards/standards/Standards.Space.rb +1 -1
  33. data/lib/openstudio-standards/standards/Standards.SpaceType.rb +7 -0
  34. data/lib/openstudio-standards/standards/Standards.ThermalZone.rb +5 -2
  35. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.Model.rb +32 -11
  36. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_properties.json +22 -742
  37. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_sets.json +2 -2
  38. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.prototype_inputs.json +3 -3
  39. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +25 -25
  40. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_properties.json +19 -559
  41. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_sets.json +2 -2
  42. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.prototype_inputs.json +3 -3
  43. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +11 -11
  44. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_properties.json +19 -559
  45. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_sets.json +2 -2
  46. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.prototype_inputs.json +5 -5
  47. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +10 -10
  48. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_properties.json +19 -559
  49. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_sets.json +2 -2
  50. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.prototype_inputs.json +5 -5
  51. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +13 -13
  52. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.construction_properties.json +370 -910
  53. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.construction_sets.json +2 -2
  54. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.prototype_inputs.json +6 -6
  55. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.refrigeration_system.json +0 -8
  56. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.spc_typ.json +18 -18
  57. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +19 -6
  58. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.construction_properties.json +2380 -1300
  59. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.construction_sets.json +2 -2
  60. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.prototype_inputs.json +6 -6
  61. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.refrigeration_system.json +0 -8
  62. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.spc_typ.json +18 -18
  63. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.constructions.json +140 -0
  64. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.schedules.json +1176 -312
  65. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.construction_properties.json +172 -1132
  66. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.construction_sets.json +14 -14
  67. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.prototype_inputs.json +2 -2
  68. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.spc_typ.json +9 -9
  69. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.construction_properties.json +180 -1140
  70. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.construction_sets.json +14 -14
  71. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.prototype_inputs.json +2 -2
  72. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.spc_typ.json +10 -10
  73. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.construction_properties.json +9 -9
  74. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.construction_properties.json +9 -9
  75. data/lib/openstudio-standards/standards/deer/deer.PlanarSurface.rb +15 -0
  76. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_3_and_8_single_speed.rb +12 -6
  77. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_4.rb +12 -6
  78. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_6.rb +16 -8
  79. data/lib/openstudio-standards/standards/necb/ECMS/ecms.rb +10 -20
  80. data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +209 -37
  81. data/lib/openstudio-standards/standards/necb/ECMS/loads.rb +1 -0
  82. data/lib/openstudio-standards/standards/necb/ECMS/pv_ground.rb +8 -6
  83. data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +16 -9
  84. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/HighriseApartment.osm +1 -1
  85. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LowriseApartment.osm +1 -1
  86. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/MidriseApartment.osm +1 -1
  87. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_multi_speed.rb +9 -5
  88. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_single_speed.rb +10 -6
  89. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_2_and_5.rb +9 -5
  90. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_multi_speed.rb +14 -8
  91. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_single_speed.rb +14 -8
  92. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_4.rb +13 -6
  93. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_6.rb +12 -6
  94. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +4 -2
  95. data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +38 -19
  96. data/lib/openstudio-standards/standards/necb/NECB2011/qaqc/necb_qaqc.rb +2 -2
  97. data/lib/openstudio-standards/standards/necb/NECB2011/service_water_heating.rb +15 -4
  98. data/lib/openstudio-standards/standards/necb/NECB2020/building_envelope.rb +10 -651
  99. data/lib/openstudio-standards/standards/necb/NECB2020/necb_2020.rb +8 -38
  100. data/lib/openstudio-standards/standards/necb/NECB2020/service_water_heating.rb +159 -0
  101. data/lib/openstudio-standards/standards/necb/common/btap_data.rb +41 -43
  102. data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +7 -4
  103. data/lib/openstudio-standards/version.rb +1 -1
  104. data/lib/openstudio-standards.rb +1 -0
  105. metadata +5 -2
@@ -20,8 +20,8 @@ module BTAP
20
20
  " AND ReportForString='Entire Facility' AND TableName='Annual and Peak Values - Electricity' AND RowName='Electricity:Facility'" +
21
21
  " AND ColumnName='Electricity Maximum Value' AND Units='W'")
22
22
  natural_gas_peak = model.sqlFile().get().execAndReturnFirstDouble("SELECT Value FROM tabulardatawithstrings WHERE ReportName='EnergyMeters'" +
23
- " AND ReportForString='Entire Facility' AND TableName='Annual and Peak Values - Gas' AND RowName='Gas:Facility'" +
24
- " AND ColumnName='Gas Maximum Value' AND Units='W'")
23
+ " AND ReportForString='Entire Facility' AND TableName='Annual and Peak Values - Natural Gas' AND RowName='NaturalGas:Facility'" +
24
+ " AND ColumnName='Natural Gas Maximum Value' AND Units='W'")
25
25
 
26
26
  # Create hash to store all the collected data.
27
27
  qaqc = {}
@@ -215,8 +215,8 @@ module BTAP
215
215
  end
216
216
 
217
217
  natural_gas_peak = model.sqlFile().get().execAndReturnFirstDouble("SELECT Value FROM tabulardatawithstrings WHERE ReportName='EnergyMeters'" +
218
- " AND ReportForString='Entire Facility' AND TableName='Annual and Peak Values - Gas' AND RowName='Gas:Facility'" +
219
- " AND ColumnName='Gas Maximum Value' AND Units='W'")
218
+ " AND ReportForString='Entire Facility' AND TableName='Annual and Peak Values - Natural Gas' AND RowName='NaturalGas:Facility'" +
219
+ " AND ColumnName='Natural Gas Maximum Value' AND Units='W'")
220
220
  if natural_gas_peak.empty?
221
221
  natural_gas_peak = 0.0
222
222
  end
@@ -472,8 +472,8 @@ module BTAP
472
472
  end
473
473
 
474
474
  natural_gas_peak = model.sqlFile().get().execAndReturnFirstDouble("SELECT Value FROM tabulardatawithstrings WHERE ReportName='EnergyMeters'" +
475
- " AND ReportForString='Entire Facility' AND TableName='Annual and Peak Values - Gas' AND RowName='Gas:Facility'" +
476
- " AND ColumnName='Gas Maximum Value' AND Units='W'")
475
+ " AND ReportForString='Entire Facility' AND TableName='Annual and Peak Values - Natural Gas' AND RowName='NaturalGas:Facility'" +
476
+ " AND ColumnName='Natural Gas Maximum Value' AND Units='W'")
477
477
  if natural_gas_peak.empty?
478
478
  natural_gas_peak = 0.0
479
479
  end
@@ -54,60 +54,6 @@ class OpenStudio::Model::ControllerOutdoorAir
54
54
  end
55
55
  air_loop = oa_sys.airLoop.get
56
56
 
57
- # Determine if the system is multizone
58
- multizone = false
59
- if air_loop.thermalZones.size > 1
60
- multizone = true
61
- end
62
-
63
- # Determine if the system is variable volume
64
- vav = false
65
- air_loop.supplyComponents.reverse.each do |comp|
66
- if comp.to_FanVariableVolume.is_initialized
67
- vav = true
68
- elsif comp.to_AirLoopHVACUnitaryHeatCoolVAVChangeoverBypass.is_initialized
69
- fan = comp.to_AirLoopHVACUnitaryHeatCoolVAVChangeoverBypass.get.supplyAirFan
70
- if fan.to_FanVariableVolume.is_initialized
71
- vav = true
72
- end
73
- elsif comp.to_AirLoopHVACUnitarySystem.is_initialized
74
- fan = comp.to_AirLoopHVACUnitarySystem.get.supplyFan
75
- if fan.is_initialized
76
- if fan.get.to_FanVariableVolume.is_initialized
77
- vav = true
78
- end
79
- end
80
- end
81
- end
82
-
83
- # If it is a multizone VAV system, get the system multiplier
84
- # to work around the bug in EnergyPlus.
85
- if multizone && vav
86
- if oa.is_initialized
87
- oa_val = oa.get
88
-
89
- # Get the system multiplier
90
- mult = 1
91
-
92
- # Get all the zone multipliers
93
- zn_mults = []
94
- air_loop.thermalZones.each do |zone|
95
- zn_mults << zone.multiplier
96
- end
97
-
98
- # Warn if there are different multipliers
99
- uniq_mults = zn_mults.uniq
100
- if uniq_mults.size > 1
101
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirLoopHVAC', "For #{air_loop.name}: not all zones on the system have an identical zone multiplier. Multipliers are: #{uniq_mults.join(', ')}.")
102
- else
103
- mult = uniq_mults[0]
104
- end
105
-
106
- oa_val = oa_val * mult
107
- oa = OpenStudio::OptionalDouble.new(oa_val)
108
- end
109
- end
110
-
111
57
  return oa
112
58
  end
113
59
  end
@@ -263,6 +263,11 @@ class OpenStudio::Model::Model
263
263
  # Get the object type
264
264
  obj_type = equipment.iddObjectType.valueName.to_s
265
265
  case obj_type
266
+ when 'OS_AirLooHVAC_UnitarySystem'
267
+ equipment = equipment.to_AirLoopHVACUnitarySystem.get
268
+ if equipment.heatingCoil.is_initialized
269
+ fuels += self.coil_heating_fuels(equipment.heatingCoil.get)
270
+ end
266
271
  when 'OS_AirTerminal_SingleDuct_ConstantVolume_FourPipeInduction'
267
272
  equipment = equipment.to_AirTerminalSingleDuctConstantVolumeFourPipeInduction.get
268
273
  fuels += self.coil_heating_fuels(equipment.heatingCoil)
@@ -350,7 +355,12 @@ class OpenStudio::Model::Model
350
355
  zone.equipment.each do |equipment|
351
356
  # Get the object type
352
357
  obj_type = equipment.iddObjectType.valueName.to_s
353
- case obj_type
358
+ case obj_type
359
+ when 'OS_AirLoopHVAC_UnitarySystem'
360
+ equipment = equipment.to_AirLoopHVACUnitarySystem.get
361
+ if equipment.coolingCoil.is_initialized
362
+ fuels += self.coil_cooling_fuels(equipment.coolingCoil.get)
363
+ end
354
364
  when 'OS_AirTerminal_SingleDuct_ConstantVolume_CooledBeam'
355
365
  equipment = equipment.to_AirTerminalSingleDuctConstantVolumeCooledBeam.get
356
366
  fuels += self.coil_cooling_fuels(equipment.coilCoolingCooledBeam)
@@ -281,7 +281,7 @@ class OpenStudio::Model::Model
281
281
 
282
282
  result = OpenStudio::OptionalDouble.new
283
283
 
284
- name = object.name.get.upcase
284
+ name = object.name.get.upcase.strip
285
285
 
286
286
  object_type = object.iddObject.type.valueDescription.gsub('OS:','')
287
287
 
@@ -236,7 +236,7 @@ class OpenStudio::Model::ThermalZone
236
236
  # serving those air loops.
237
237
  #
238
238
  # return [Array<String>] An array. Possible values are
239
- # Electricity, NaturalGas, PropaneGas, FuelOilNo1, FuelOilNo2,
239
+ # Electricity, NaturalGas, Propane, PropaneGas, FuelOilNo1, FuelOilNo2,
240
240
  # Coal, Diesel, Gasoline, DistrictCooling, DistrictHeating,
241
241
  # and SolarEnergy.
242
242
  def heating_fuels
@@ -278,7 +278,7 @@ class OpenStudio::Model::ThermalZone
278
278
  # serving those air loops.
279
279
  #
280
280
  # return [Array<String>] An array. Possible values are
281
- # Electricity, NaturalGas, PropaneGas, FuelOilNo1, FuelOilNo2,
281
+ # Electricity, NaturalGas, Propane, PropaneGas, FuelOilNo1, FuelOilNo2,
282
282
  # Coal, Diesel, Gasoline, DistrictCooling, DistrictHeating,
283
283
  # and SolarEnergy.
284
284
  def cooling_fuels
@@ -9,6 +9,27 @@ module College
9
9
  # @param prototype_input [Hash] hash of prototype inputs
10
10
  # @return [Bool] returns true if successful, false if not
11
11
  def model_custom_hvac_tweaks(model, building_type, climate_zone, prototype_input)
12
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', 'Started building type specific adjustments')
13
+
14
+ model.getSpaces.each do |space|
15
+ if space.name.get.to_s == 'CB_PUBLIC_ELEVATORS_F1'
16
+ model_add_elevator(model,
17
+ space,
18
+ prototype_input['number_of_elevators'],
19
+ prototype_input['elevator_type'],
20
+ prototype_input['elevator_schedule'],
21
+ prototype_input['elevator_fan_schedule'],
22
+ prototype_input['elevator_fan_schedule'],
23
+ building_type)
24
+ end
25
+ end
26
+
27
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', 'Finished building type specific adjustments')
28
+
29
+ # add extra infiltration for entry door
30
+ add_door_infiltration(climate_zone, model)
31
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', 'Added door infiltration')
32
+
12
33
  return true
13
34
  end
14
35
 
@@ -25,7 +46,7 @@ module College
25
46
  infiltration_entrydoor.setName('entry door Infiltration')
26
47
  infiltration_per_zone_entrydoor = 0
27
48
  if template == '90.1-2004'
28
- infiltration_per_zone_entrydoor = 7.678585
49
+ infiltration_per_zone_entrydoor = 4.566024
29
50
  infiltration_entrydoor.setSchedule(model_add_schedule(model, 'College INFIL_Door_Opening_SCH'))
30
51
  elsif template == '90.1-2007'
31
52
  case climate_zone
@@ -35,10 +56,10 @@ module College
35
56
  'ASHRAE 169-2006-4A',
36
57
  'ASHRAE 169-2006-4B',
37
58
  'ASHRAE 169-2006-4C'
38
- infiltration_per_zone_entrydoor = 5.600600
59
+ infiltration_per_zone_entrydoor = 3.204085
39
60
  infiltration_entrydoor.setSchedule(model_add_schedule(model, 'College INFIL_Door_Opening_SCH'))
40
61
  else
41
- infiltration_per_zone_entrydoor = 7.678585
62
+ infiltration_per_zone_entrydoor = 4.566024
42
63
  infiltration_entrydoor.setSchedule(model_add_schedule(model, 'College INFIL_Door_Opening_SCH'))
43
64
  end
44
65
  elsif template == '90.1-2010' || template == '90.1-2013'
@@ -46,10 +67,10 @@ module College
46
67
  when 'ASHRAE 169-2006-3A',
47
68
  'ASHRAE 169-2006-3B',
48
69
  'ASHRAE 169-2006-3C'
49
- infiltration_per_zone_entrydoor = 5.600600
70
+ infiltration_per_zone_entrydoor = 3.204085
50
71
  infiltration_entrydoor.setSchedule(model_add_schedule(model, 'College INFIL_Door_Opening_SCH'))
51
72
  else
52
- infiltration_per_zone_entrydoor = 7.678585
73
+ infiltration_per_zone_entrydoor = 4.566024
53
74
  infiltration_entrydoor.setSchedule(model_add_schedule(model, 'College INFIL_Door_Opening_SCH'))
54
75
  end
55
76
  end
@@ -11,6 +11,15 @@ module Laboratory
11
11
  def model_custom_hvac_tweaks(model, building_type, climate_zone, prototype_input)
12
12
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', 'Started building type specific adjustments')
13
13
 
14
+ # get the fume hood space type and exhaust ACH
15
+ fume_hood_exhaust_ach = nil
16
+ model.getSpaceTypes.each do |spc_type|
17
+ next unless spc_type.name.get.to_s.downcase.include? 'fume hood'
18
+
19
+ spc_type_properties = space_type_get_standards_data(spc_type)
20
+ fume_hood_exhaust_ach = spc_type_properties['ventilation_air_changes'].to_f
21
+ end
22
+
14
23
  # For fume hood, the OA rate varies with the fume hood schedule
15
24
  # So add "Proportional Control Minimum Outdoor Air Flow Rate Schedule"
16
25
  # at the mean time, modify "Outdoor Air Method" to "ProportionalControlBasedOnDesignOARate" in Controller:MechanicalVentilation of the DOAS
@@ -19,6 +28,11 @@ module Laboratory
19
28
 
20
29
  ventilation = space.designSpecificationOutdoorAir.get
21
30
  ventilation.setOutdoorAirFlowRateFractionSchedule(model_add_schedule(model, 'Lab_FumeHood_Sch'))
31
+
32
+ # add exhaust fan to fume hood zone
33
+ fume_hood_zone_volume = space.volume
34
+ flow_rate_fume_hood = fume_hood_zone_volume * fume_hood_exhaust_ach / 3600.0
35
+ model_add_exhaust_fan(model, [space.thermalZone.get], flow_rate: flow_rate_fume_hood, flow_fraction_schedule_name: 'Lab_FumeHood_Sch')
22
36
  end
23
37
 
24
38
  # adjust doas sizing
@@ -38,12 +52,6 @@ module Laboratory
38
52
  end
39
53
  end
40
54
 
41
- # @todo add exhaust fan to fume hood zone
42
- # search_criteria = ...
43
- # fume_hood_space = model_find_object(standards_data['Space Types'], search_criteria)
44
- # fume_hood_zone_volume = fume_hood_space.getVolume...
45
- # flow_rate_fume_hood = fume_hood_zone_volume * fume_hood_space['Ventilation_Air_Changes...']
46
- # model_add_exhaust_fan(model, thermal_zones, flow_rate=flow_rate_fume_hood, flow_fraction_schedule_name='Lab_FumeHood_Sch')
47
55
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', 'Finished building type specific adjustments')
48
56
  return true
49
57
  end
@@ -2970,9 +2970,9 @@ end
2970
2970
  end
2971
2971
  end
2972
2972
 
2973
- # This class represents a prototypical ASHRAE9012004 CourtHouse.
2974
- class ASHRAE9012004CourtHouse < ASHRAE9012004
2975
- @@building_type = "CourtHouse"
2973
+ # This class represents a prototypical ASHRAE9012004 Courthouse.
2974
+ class ASHRAE9012004Courthouse < ASHRAE9012004
2975
+ @@building_type = "Courthouse"
2976
2976
  register_standard ("90.1-2004_#{@@building_type}")
2977
2977
  attr_accessor :prototype_database
2978
2978
  attr_accessor :prototype_input
@@ -2987,7 +2987,7 @@ end
2987
2987
  @prototype_input = self.standards_lookup_table_first(table_name: 'prototype_inputs',search_criteria: {'template' => @template,'building_type' => @@building_type })
2988
2988
  if @prototype_input.nil?
2989
2989
  OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.")
2990
- raise("Could not find prototype inputs for ASHRAE9012004CourtHouse, cannot create model.")
2990
+ raise("Could not find prototype inputs for ASHRAE9012004Courthouse, cannot create model.")
2991
2991
  return false
2992
2992
  end
2993
2993
  @lookup_building_type = self.model_get_lookup_name(@@building_type)
@@ -3004,7 +3004,7 @@ end
3004
3004
  def set_variables()
3005
3005
  # Will be overwritten in class reopen file.
3006
3006
  # add all building methods for now.
3007
- self.extend(CourtHouse) unless @template == 'NECB 2011'
3007
+ self.extend(Courthouse) unless @template == 'NECB 2011'
3008
3008
  end
3009
3009
  # Returns the mapping between the names of the spaces
3010
3010
  # in the geometry .osm file and the space types
@@ -6283,9 +6283,9 @@ end
6283
6283
  end
6284
6284
  end
6285
6285
 
6286
- # This class represents a prototypical ASHRAE9012007 CourtHouse.
6287
- class ASHRAE9012007CourtHouse < ASHRAE9012007
6288
- @@building_type = "CourtHouse"
6286
+ # This class represents a prototypical ASHRAE9012007 Courthouse.
6287
+ class ASHRAE9012007Courthouse < ASHRAE9012007
6288
+ @@building_type = "Courthouse"
6289
6289
  register_standard ("90.1-2007_#{@@building_type}")
6290
6290
  attr_accessor :prototype_database
6291
6291
  attr_accessor :prototype_input
@@ -6300,7 +6300,7 @@ end
6300
6300
  @prototype_input = self.standards_lookup_table_first(table_name: 'prototype_inputs',search_criteria: {'template' => @template,'building_type' => @@building_type })
6301
6301
  if @prototype_input.nil?
6302
6302
  OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.")
6303
- raise("Could not find prototype inputs for ASHRAE9012007CourtHouse, cannot create model.")
6303
+ raise("Could not find prototype inputs for ASHRAE9012007Courthouse, cannot create model.")
6304
6304
  return false
6305
6305
  end
6306
6306
  @lookup_building_type = self.model_get_lookup_name(@@building_type)
@@ -6317,7 +6317,7 @@ end
6317
6317
  def set_variables()
6318
6318
  # Will be overwritten in class reopen file.
6319
6319
  # add all building methods for now.
6320
- self.extend(CourtHouse) unless @template == 'NECB 2011'
6320
+ self.extend(Courthouse) unless @template == 'NECB 2011'
6321
6321
  end
6322
6322
  # Returns the mapping between the names of the spaces
6323
6323
  # in the geometry .osm file and the space types
@@ -9596,9 +9596,9 @@ end
9596
9596
  end
9597
9597
  end
9598
9598
 
9599
- # This class represents a prototypical ASHRAE9012010 CourtHouse.
9600
- class ASHRAE9012010CourtHouse < ASHRAE9012010
9601
- @@building_type = "CourtHouse"
9599
+ # This class represents a prototypical ASHRAE9012010 Courthouse.
9600
+ class ASHRAE9012010Courthouse < ASHRAE9012010
9601
+ @@building_type = "Courthouse"
9602
9602
  register_standard ("90.1-2010_#{@@building_type}")
9603
9603
  attr_accessor :prototype_database
9604
9604
  attr_accessor :prototype_input
@@ -9613,7 +9613,7 @@ end
9613
9613
  @prototype_input = self.standards_lookup_table_first(table_name: 'prototype_inputs',search_criteria: {'template' => @template,'building_type' => @@building_type })
9614
9614
  if @prototype_input.nil?
9615
9615
  OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.")
9616
- raise("Could not find prototype inputs for ASHRAE9012010CourtHouse, cannot create model.")
9616
+ raise("Could not find prototype inputs for ASHRAE9012010Courthouse, cannot create model.")
9617
9617
  return false
9618
9618
  end
9619
9619
  @lookup_building_type = self.model_get_lookup_name(@@building_type)
@@ -9630,7 +9630,7 @@ end
9630
9630
  def set_variables()
9631
9631
  # Will be overwritten in class reopen file.
9632
9632
  # add all building methods for now.
9633
- self.extend(CourtHouse) unless @template == 'NECB 2011'
9633
+ self.extend(Courthouse) unless @template == 'NECB 2011'
9634
9634
  end
9635
9635
  # Returns the mapping between the names of the spaces
9636
9636
  # in the geometry .osm file and the space types
@@ -12909,9 +12909,9 @@ end
12909
12909
  end
12910
12910
  end
12911
12911
 
12912
- # This class represents a prototypical ASHRAE9012013 CourtHouse.
12913
- class ASHRAE9012013CourtHouse < ASHRAE9012013
12914
- @@building_type = "CourtHouse"
12912
+ # This class represents a prototypical ASHRAE9012013 Courthouse.
12913
+ class ASHRAE9012013Courthouse < ASHRAE9012013
12914
+ @@building_type = "Courthouse"
12915
12915
  register_standard ("90.1-2013_#{@@building_type}")
12916
12916
  attr_accessor :prototype_database
12917
12917
  attr_accessor :prototype_input
@@ -12926,7 +12926,7 @@ end
12926
12926
  @prototype_input = self.standards_lookup_table_first(table_name: 'prototype_inputs',search_criteria: {'template' => @template,'building_type' => @@building_type })
12927
12927
  if @prototype_input.nil?
12928
12928
  OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.")
12929
- raise("Could not find prototype inputs for ASHRAE9012013CourtHouse, cannot create model.")
12929
+ raise("Could not find prototype inputs for ASHRAE9012013Courthouse, cannot create model.")
12930
12930
  return false
12931
12931
  end
12932
12932
  @lookup_building_type = self.model_get_lookup_name(@@building_type)
@@ -12943,7 +12943,7 @@ end
12943
12943
  def set_variables()
12944
12944
  # Will be overwritten in class reopen file.
12945
12945
  # add all building methods for now.
12946
- self.extend(CourtHouse) unless @template == 'NECB 2011'
12946
+ self.extend(Courthouse) unless @template == 'NECB 2011'
12947
12947
  end
12948
12948
  # Returns the mapping between the names of the spaces
12949
12949
  # in the geometry .osm file and the space types
@@ -16222,9 +16222,9 @@ end
16222
16222
  end
16223
16223
  end
16224
16224
 
16225
- # This class represents a prototypical ASHRAE9012016 CourtHouse.
16226
- class ASHRAE9012016CourtHouse < ASHRAE9012016
16227
- @@building_type = "CourtHouse"
16225
+ # This class represents a prototypical ASHRAE9012016 Courthouse.
16226
+ class ASHRAE9012016Courthouse < ASHRAE9012016
16227
+ @@building_type = "Courthouse"
16228
16228
  register_standard ("90.1-2016_#{@@building_type}")
16229
16229
  attr_accessor :prototype_database
16230
16230
  attr_accessor :prototype_input
@@ -16239,7 +16239,7 @@ end
16239
16239
  @prototype_input = self.standards_lookup_table_first(table_name: 'prototype_inputs',search_criteria: {'template' => @template,'building_type' => @@building_type })
16240
16240
  if @prototype_input.nil?
16241
16241
  OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.")
16242
- raise("Could not find prototype inputs for ASHRAE9012016CourtHouse, cannot create model.")
16242
+ raise("Could not find prototype inputs for ASHRAE9012016Courthouse, cannot create model.")
16243
16243
  return false
16244
16244
  end
16245
16245
  @lookup_building_type = self.model_get_lookup_name(@@building_type)
@@ -16256,7 +16256,7 @@ end
16256
16256
  def set_variables()
16257
16257
  # Will be overwritten in class reopen file.
16258
16258
  # add all building methods for now.
16259
- self.extend(CourtHouse) unless @template == 'NECB 2011'
16259
+ self.extend(Courthouse) unless @template == 'NECB 2011'
16260
16260
  end
16261
16261
  # Returns the mapping between the names of the spaces
16262
16262
  # in the geometry .osm file and the space types
@@ -19535,9 +19535,9 @@ end
19535
19535
  end
19536
19536
  end
19537
19537
 
19538
- # This class represents a prototypical ASHRAE9012019 CourtHouse.
19539
- class ASHRAE9012019CourtHouse < ASHRAE9012019
19540
- @@building_type = "CourtHouse"
19538
+ # This class represents a prototypical ASHRAE9012019 Courthouse.
19539
+ class ASHRAE9012019Courthouse < ASHRAE9012019
19540
+ @@building_type = "Courthouse"
19541
19541
  register_standard ("90.1-2019_#{@@building_type}")
19542
19542
  attr_accessor :prototype_database
19543
19543
  attr_accessor :prototype_input
@@ -19552,7 +19552,7 @@ end
19552
19552
  @prototype_input = self.standards_lookup_table_first(table_name: 'prototype_inputs',search_criteria: {'template' => @template,'building_type' => @@building_type })
19553
19553
  if @prototype_input.nil?
19554
19554
  OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.")
19555
- raise("Could not find prototype inputs for ASHRAE9012019CourtHouse, cannot create model.")
19555
+ raise("Could not find prototype inputs for ASHRAE9012019Courthouse, cannot create model.")
19556
19556
  return false
19557
19557
  end
19558
19558
  @lookup_building_type = self.model_get_lookup_name(@@building_type)
@@ -19569,7 +19569,7 @@ end
19569
19569
  def set_variables()
19570
19570
  # Will be overwritten in class reopen file.
19571
19571
  # add all building methods for now.
19572
- self.extend(CourtHouse) unless @template == 'NECB 2011'
19572
+ self.extend(Courthouse) unless @template == 'NECB 2011'
19573
19573
  end
19574
19574
  # Returns the mapping between the names of the spaces
19575
19575
  # in the geometry .osm file and the space types
@@ -22848,9 +22848,9 @@ end
22848
22848
  end
22849
22849
  end
22850
22850
 
22851
- # This class represents a prototypical DOERef1980to2004 CourtHouse.
22852
- class DOERef1980to2004CourtHouse < DOERef1980to2004
22853
- @@building_type = "CourtHouse"
22851
+ # This class represents a prototypical DOERef1980to2004 Courthouse.
22852
+ class DOERef1980to2004Courthouse < DOERef1980to2004
22853
+ @@building_type = "Courthouse"
22854
22854
  register_standard ("DOE Ref 1980-2004_#{@@building_type}")
22855
22855
  attr_accessor :prototype_database
22856
22856
  attr_accessor :prototype_input
@@ -22865,7 +22865,7 @@ end
22865
22865
  @prototype_input = self.standards_lookup_table_first(table_name: 'prototype_inputs',search_criteria: {'template' => @template,'building_type' => @@building_type })
22866
22866
  if @prototype_input.nil?
22867
22867
  OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.")
22868
- raise("Could not find prototype inputs for DOERef1980to2004CourtHouse, cannot create model.")
22868
+ raise("Could not find prototype inputs for DOERef1980to2004Courthouse, cannot create model.")
22869
22869
  return false
22870
22870
  end
22871
22871
  @lookup_building_type = self.model_get_lookup_name(@@building_type)
@@ -22882,7 +22882,7 @@ end
22882
22882
  def set_variables()
22883
22883
  # Will be overwritten in class reopen file.
22884
22884
  # add all building methods for now.
22885
- self.extend(CourtHouse) unless @template == 'NECB 2011'
22885
+ self.extend(Courthouse) unless @template == 'NECB 2011'
22886
22886
  end
22887
22887
  # Returns the mapping between the names of the spaces
22888
22888
  # in the geometry .osm file and the space types
@@ -26161,9 +26161,9 @@ end
26161
26161
  end
26162
26162
  end
26163
26163
 
26164
- # This class represents a prototypical DOERefPre1980 CourtHouse.
26165
- class DOERefPre1980CourtHouse < DOERefPre1980
26166
- @@building_type = "CourtHouse"
26164
+ # This class represents a prototypical DOERefPre1980 Courthouse.
26165
+ class DOERefPre1980Courthouse < DOERefPre1980
26166
+ @@building_type = "Courthouse"
26167
26167
  register_standard ("DOE Ref Pre-1980_#{@@building_type}")
26168
26168
  attr_accessor :prototype_database
26169
26169
  attr_accessor :prototype_input
@@ -26178,7 +26178,7 @@ end
26178
26178
  @prototype_input = self.standards_lookup_table_first(table_name: 'prototype_inputs',search_criteria: {'template' => @template,'building_type' => @@building_type })
26179
26179
  if @prototype_input.nil?
26180
26180
  OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.")
26181
- raise("Could not find prototype inputs for DOERefPre1980CourtHouse, cannot create model.")
26181
+ raise("Could not find prototype inputs for DOERefPre1980Courthouse, cannot create model.")
26182
26182
  return false
26183
26183
  end
26184
26184
  @lookup_building_type = self.model_get_lookup_name(@@building_type)
@@ -26195,7 +26195,7 @@ end
26195
26195
  def set_variables()
26196
26196
  # Will be overwritten in class reopen file.
26197
26197
  # add all building methods for now.
26198
- self.extend(CourtHouse) unless @template == 'NECB 2011'
26198
+ self.extend(Courthouse) unless @template == 'NECB 2011'
26199
26199
  end
26200
26200
  # Returns the mapping between the names of the spaces
26201
26201
  # in the geometry .osm file and the space types
@@ -29474,9 +29474,9 @@ end
29474
29474
  end
29475
29475
  end
29476
29476
 
29477
- # This class represents a prototypical NRELZNEReady2017 CourtHouse.
29478
- class NRELZNEReady2017CourtHouse < NRELZNEReady2017
29479
- @@building_type = "CourtHouse"
29477
+ # This class represents a prototypical NRELZNEReady2017 Courthouse.
29478
+ class NRELZNEReady2017Courthouse < NRELZNEReady2017
29479
+ @@building_type = "Courthouse"
29480
29480
  register_standard ("NREL ZNE Ready 2017_#{@@building_type}")
29481
29481
  attr_accessor :prototype_database
29482
29482
  attr_accessor :prototype_input
@@ -29491,7 +29491,7 @@ end
29491
29491
  @prototype_input = self.standards_lookup_table_first(table_name: 'prototype_inputs',search_criteria: {'template' => @template,'building_type' => @@building_type })
29492
29492
  if @prototype_input.nil?
29493
29493
  OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => @template,'building_type' => @@building_type }}, cannot create model.")
29494
- raise("Could not find prototype inputs for NRELZNEReady2017CourtHouse, cannot create model.")
29494
+ raise("Could not find prototype inputs for NRELZNEReady2017Courthouse, cannot create model.")
29495
29495
  return false
29496
29496
  end
29497
29497
  @lookup_building_type = self.model_get_lookup_name(@@building_type)
@@ -29508,7 +29508,7 @@ end
29508
29508
  def set_variables()
29509
29509
  # Will be overwritten in class reopen file.
29510
29510
  # add all building methods for now.
29511
- self.extend(CourtHouse) unless @template == 'NECB 2011'
29511
+ self.extend(Courthouse) unless @template == 'NECB 2011'
29512
29512
  end
29513
29513
  # Returns the mapping between the names of the spaces
29514
29514
  # in the geometry .osm file and the space types
@@ -31981,9 +31981,9 @@ end
31981
31981
 
31982
31982
  end
31983
31983
 
31984
- # This class represents a prototypical NECB2011 CourtHouse.
31985
- class NECB2011CourtHouse < NECB2011
31986
- BUILDING_TYPE = "CourtHouse"
31984
+ # This class represents a prototypical NECB2011 Courthouse.
31985
+ class NECB2011Courthouse < NECB2011
31986
+ BUILDING_TYPE = "Courthouse"
31987
31987
  TEMPLATE = "NECB2011"
31988
31988
  register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}")
31989
31989
  attr_accessor :prototype_database
@@ -31999,11 +31999,11 @@ end
31999
31999
  @building_type = BUILDING_TYPE
32000
32000
  @template = TEMPLATE
32001
32001
  @instvarbuilding_type = @building_type
32002
- @prototype_input = self.standards_lookup_table_first(table_name: 'prototype_inputs', search_criteria: {'template' => "NECB2011",'building_type' => "CourtHouse" })
32002
+ @prototype_input = self.standards_lookup_table_first(table_name: 'prototype_inputs', search_criteria: {'template' => "NECB2011",'building_type' => "Courthouse" })
32003
32003
  if @prototype_input.nil?
32004
- OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2011",'building_type' => "CourtHouse" }}, cannot create model.")
32004
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2011",'building_type' => "Courthouse" }}, cannot create model.")
32005
32005
  #puts JSON.pretty_generate(standards_data['prototype_inputs'])
32006
- raise("Could not find prototype inputs for NECB2011 CourtHouse, cannot create model.")
32006
+ raise("Could not find prototype inputs for NECB2011 Courthouse, cannot create model.")
32007
32007
  return false
32008
32008
  end
32009
32009
  @lookup_building_type = self.model_get_lookup_name(@building_type)
@@ -34395,9 +34395,9 @@ end
34395
34395
 
34396
34396
  end
34397
34397
 
34398
- # This class represents a prototypical NECB2015 CourtHouse.
34399
- class NECB2015CourtHouse < NECB2015
34400
- BUILDING_TYPE = "CourtHouse"
34398
+ # This class represents a prototypical NECB2015 Courthouse.
34399
+ class NECB2015Courthouse < NECB2015
34400
+ BUILDING_TYPE = "Courthouse"
34401
34401
  TEMPLATE = "NECB2015"
34402
34402
  register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}")
34403
34403
  attr_accessor :prototype_database
@@ -34413,11 +34413,11 @@ end
34413
34413
  @building_type = BUILDING_TYPE
34414
34414
  @template = TEMPLATE
34415
34415
  @instvarbuilding_type = @building_type
34416
- @prototype_input = self.standards_lookup_table_first(table_name: 'prototype_inputs', search_criteria: {'template' => "NECB2015",'building_type' => "CourtHouse" })
34416
+ @prototype_input = self.standards_lookup_table_first(table_name: 'prototype_inputs', search_criteria: {'template' => "NECB2015",'building_type' => "Courthouse" })
34417
34417
  if @prototype_input.nil?
34418
- OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2015",'building_type' => "CourtHouse" }}, cannot create model.")
34418
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2015",'building_type' => "Courthouse" }}, cannot create model.")
34419
34419
  #puts JSON.pretty_generate(standards_data['prototype_inputs'])
34420
- raise("Could not find prototype inputs for NECB2015 CourtHouse, cannot create model.")
34420
+ raise("Could not find prototype inputs for NECB2015 Courthouse, cannot create model.")
34421
34421
  return false
34422
34422
  end
34423
34423
  @lookup_building_type = self.model_get_lookup_name(@building_type)
@@ -36809,9 +36809,9 @@ end
36809
36809
 
36810
36810
  end
36811
36811
 
36812
- # This class represents a prototypical NECB2017 CourtHouse.
36813
- class NECB2017CourtHouse < NECB2017
36814
- BUILDING_TYPE = "CourtHouse"
36812
+ # This class represents a prototypical NECB2017 Courthouse.
36813
+ class NECB2017Courthouse < NECB2017
36814
+ BUILDING_TYPE = "Courthouse"
36815
36815
  TEMPLATE = "NECB2017"
36816
36816
  register_standard ("#{TEMPLATE}_#{BUILDING_TYPE}")
36817
36817
  attr_accessor :prototype_database
@@ -36827,11 +36827,11 @@ end
36827
36827
  @building_type = BUILDING_TYPE
36828
36828
  @template = TEMPLATE
36829
36829
  @instvarbuilding_type = @building_type
36830
- @prototype_input = self.standards_lookup_table_first(table_name: 'prototype_inputs', search_criteria: {'template' => "NECB2017",'building_type' => "CourtHouse" })
36830
+ @prototype_input = self.standards_lookup_table_first(table_name: 'prototype_inputs', search_criteria: {'template' => "NECB2017",'building_type' => "Courthouse" })
36831
36831
  if @prototype_input.nil?
36832
- OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2017",'building_type' => "CourtHouse" }}, cannot create model.")
36832
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find prototype inputs for #{{'template' => "NECB2017",'building_type' => "Courthouse" }}, cannot create model.")
36833
36833
  #puts JSON.pretty_generate(standards_data['prototype_inputs'])
36834
- raise("Could not find prototype inputs for NECB2017 CourtHouse, cannot create model.")
36834
+ raise("Could not find prototype inputs for NECB2017 Courthouse, cannot create model.")
36835
36835
  return false
36836
36836
  end
36837
36837
  @lookup_building_type = self.model_get_lookup_name(@building_type)