openstudio-standards 0.6.3 → 0.7.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (118) hide show
  1. checksums.yaml +4 -4
  2. data/data/standards/OpenStudio_Standards-ashrae_90_1.xlsx +0 -0
  3. data/data/standards/manage_OpenStudio_Standards.rb +2 -49
  4. data/data/standards/openstudio_standards_duplicates_log.csv +1 -7962
  5. data/data/standards/test_performance_expected_dd_results.csv +2005 -97
  6. data/lib/openstudio-standards/create_typical/space_type_ratios.rb +47 -57
  7. data/lib/openstudio-standards/geometry/create.rb +1 -1
  8. data/lib/openstudio-standards/geometry/create_bar.rb +6 -3
  9. data/lib/openstudio-standards/geometry/create_shape.rb +1 -1
  10. data/lib/openstudio-standards/geometry/group.rb +1 -1
  11. data/lib/openstudio-standards/geometry/information.rb +1 -1
  12. data/lib/openstudio-standards/geometry/modify.rb +53 -1
  13. data/lib/openstudio-standards/infiltration/nist_infiltration.rb +1 -1
  14. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.rb +11 -11
  15. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.rb +11 -11
  16. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.hvac_systems.rb +2 -2
  17. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SuperTallBuilding.rb +44 -47
  18. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.TallBuilding.rb +43 -48
  19. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CentralAirSourceHeatPump.rb +1 -1
  20. data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +44 -24
  21. data/lib/openstudio-standards/prototypes/common/objects/Prototype.refrigeration.rb +24 -24
  22. data/lib/openstudio-standards/schedules/parametric.rb +1 -1
  23. data/lib/openstudio-standards/service_water_heating/create_piping_losses.rb +152 -0
  24. data/lib/openstudio-standards/service_water_heating/create_water_heater.rb +544 -0
  25. data/lib/openstudio-standards/service_water_heating/create_water_heating_loop.rb +303 -0
  26. data/lib/openstudio-standards/service_water_heating/create_water_use.rb +95 -0
  27. data/lib/openstudio-standards/space/space.rb +1 -1
  28. data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +65 -70
  29. data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +12 -14
  30. data/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +16 -5
  31. data/lib/openstudio-standards/standards/Standards.Model.rb +2 -2
  32. data/lib/openstudio-standards/standards/Standards.PlanarSurface.rb +10 -2
  33. data/lib/openstudio-standards/{prototypes/common/objects/Prototype.Model.swh.rb → standards/Standards.ServiceWaterHeating.rb} +209 -139
  34. data/lib/openstudio-standards/standards/Standards.Surface.rb +1 -1
  35. data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +4 -8
  36. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.Model.rb +2 -2
  37. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_properties.json +22251 -12963
  38. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_sets.json +91 -91
  39. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_properties.json +8981 -5228
  40. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_properties.json +8935 -5182
  41. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_properties.json +7281 -5391
  42. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_sets.json +91 -91
  43. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.construction_properties.json +9005 -15215
  44. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.construction_sets.json +136 -136
  45. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +1 -1
  46. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.construction_properties.json +8717 -17168
  47. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.construction_sets.json +136 -136
  48. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.constructions.json +1941 -651
  49. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.construction_properties.json +135 -135
  50. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.construction_properties.json +135 -135
  51. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.construction_properties.json +36 -36
  52. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.construction_properties.json +36 -36
  53. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.PlantLoop.rb +377 -99
  54. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.SpaceType.rb +2 -2
  55. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019.Model.rb +3 -3
  56. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.construction_properties.json +6889 -4044
  57. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_constructions.json +108 -108
  58. data/lib/openstudio-standards/standards/cbes/cbes_pre_1978/data/cbes_pre_1978.construction_properties.json +16 -16
  59. data/lib/openstudio-standards/standards/cbes/cbes_t24_1978/data/cbes_t24_1978.construction_properties.json +16 -16
  60. data/lib/openstudio-standards/standards/cbes/cbes_t24_1992/data/cbes_t24_1992.construction_properties.json +16 -16
  61. data/lib/openstudio-standards/standards/cbes/cbes_t24_2001/data/cbes_t24_2001.construction_properties.json +16 -16
  62. data/lib/openstudio-standards/standards/cbes/cbes_t24_2005/data/cbes_t24_2005.construction_properties.json +16 -16
  63. data/lib/openstudio-standards/standards/cbes/cbes_t24_2008/data/cbes_t24_2008.construction_properties.json +16 -16
  64. data/lib/openstudio-standards/standards/cbes/data/cbes.constructions.json +142 -142
  65. data/lib/openstudio-standards/standards/deer/data/deer.constructions.json +5 -1551
  66. data/lib/openstudio-standards/standards/deer/data/deer.materials.json +40 -0
  67. data/lib/openstudio-standards/standards/deer/deer_1985/data/deer_1985.motors.json +88 -8
  68. data/lib/openstudio-standards/standards/deer/deer_1996/data/deer_1996.motors.json +88 -8
  69. data/lib/openstudio-standards/standards/deer/deer_2003/data/deer_2003.motors.json +88 -8
  70. data/lib/openstudio-standards/standards/deer/deer_2007/data/deer_2007.motors.json +88 -8
  71. data/lib/openstudio-standards/standards/deer/deer_2011/data/deer_2011.motors.json +88 -8
  72. data/lib/openstudio-standards/standards/deer/deer_2014/data/deer_2014.motors.json +88 -8
  73. data/lib/openstudio-standards/standards/deer/deer_2015/data/deer_2015.motors.json +88 -8
  74. data/lib/openstudio-standards/standards/deer/deer_2017/data/deer_2017.motors.json +88 -8
  75. data/lib/openstudio-standards/standards/deer/deer_2020/data/deer_2020.motors.json +88 -8
  76. data/lib/openstudio-standards/standards/deer/deer_2025/data/deer_2025.motors.json +88 -8
  77. data/lib/openstudio-standards/standards/deer/deer_2030/data/deer_2030.motors.json +88 -8
  78. data/lib/openstudio-standards/standards/deer/deer_2035/data/deer_2035.motors.json +88 -8
  79. data/lib/openstudio-standards/standards/deer/deer_2040/data/deer_2040.motors.json +88 -8
  80. data/lib/openstudio-standards/standards/deer/deer_2045/data/deer_2045.motors.json +88 -8
  81. data/lib/openstudio-standards/standards/deer/deer_2050/data/deer_2050.motors.json +88 -8
  82. data/lib/openstudio-standards/standards/deer/deer_2055/data/deer_2055.motors.json +88 -8
  83. data/lib/openstudio-standards/standards/deer/deer_2060/data/deer_2060.motors.json +88 -8
  84. data/lib/openstudio-standards/standards/deer/deer_2065/data/deer_2065.motors.json +88 -8
  85. data/lib/openstudio-standards/standards/deer/deer_2070/data/deer_2070.motors.json +88 -8
  86. data/lib/openstudio-standards/standards/deer/deer_2075/data/deer_2075.motors.json +88 -8
  87. data/lib/openstudio-standards/standards/deer/deer_pre_1975/data/deer_pre_1975.motors.json +88 -8
  88. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/btap_pre1980.rb +17 -0
  89. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_systems.rb +2 -1
  90. data/lib/openstudio-standards/standards/necb/ECMS/ecms.rb +4 -4
  91. data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +61 -88
  92. data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +3 -2
  93. data/lib/openstudio-standards/standards/necb/NECB2011/data/boiler_fuel_type_sets.json +54 -0
  94. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LEEPMidriseApartment.osm +1 -1
  95. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LEEPMultiTower.osm +1 -1
  96. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LEEPPointTower.osm +1 -1
  97. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LEEPTownHouse.osm +1 -1
  98. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/NorthernEducation.osm +4 -4
  99. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/NorthernHealthCare.osm +4 -4
  100. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +32 -24
  101. data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +89 -15
  102. data/lib/openstudio-standards/standards/necb/NECB2011/qaqc/necb_qaqc.rb +5 -1
  103. data/lib/openstudio-standards/standards/necb/NECB2011/service_water_heating.rb +22 -65
  104. data/lib/openstudio-standards/standards/necb/NECB2011/system_fuels.rb +19 -0
  105. data/lib/openstudio-standards/standards/necb/common/btap_data.rb +56 -2
  106. data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +3 -1
  107. data/lib/openstudio-standards/standards/necb/common/construction_defaults.osm +2 -2
  108. data/lib/openstudio-standards/standards/necb/docs/air_system_names_method.md +127 -0
  109. data/lib/openstudio-standards/thermal_zone/thermal_zone.rb +1 -1
  110. data/lib/openstudio-standards/utilities/template_measure/resources/BTAPMeasureHelper.rb +1 -1
  111. data/lib/openstudio-standards/version.rb +1 -1
  112. data/lib/openstudio-standards/weather/information.rb +61 -5
  113. data/lib/openstudio-standards/weather/modify.rb +1 -1
  114. data/lib/openstudio-standards.rb +5 -3
  115. metadata +12 -63
  116. data/data/standards/OpenStudio_Standards-deer.xlsx +0 -0
  117. data/lib/openstudio-standards/prototypes/common/objects/Prototype.ServiceWaterHeating.rb +0 -1100
  118. data/lib/openstudio-standards/service_water_heating/component.rb +0 -189
@@ -81,37 +81,31 @@ module OpenstudioStandards
81
81
  if whole_building
82
82
  hash['WholeBuilding - Sm Office'] = { ratio: 1.0, space_type_gen: true, default: true }
83
83
  else
84
- hash['SmallOffice - Breakroom'] = { ratio: 0.99, space_type_gen: true, default: false }
85
- hash['SmallOffice - ClosedOffice'] = { ratio: 0.99, space_type_gen: true, default: false }
86
- hash['SmallOffice - Conference'] = { ratio: 0.99, space_type_gen: true, default: false }
87
- hash['SmallOffice - Corridor'] = { ratio: 0.99, space_type_gen: true, default: false, circ: true }
88
- hash['SmallOffice - Elec/MechRoom'] = { ratio: 0.99, space_type_gen: true, default: false }
89
- hash['SmallOffice - Lobby'] = { ratio: 0.99, space_type_gen: true, default: false }
90
- hash['SmallOffice - OpenOffice'] = { ratio: 0.99, space_type_gen: true, default: true }
91
- hash['SmallOffice - Restroom'] = { ratio: 0.99, space_type_gen: true, default: false }
92
- hash['SmallOffice - Stair'] = { ratio: 0.99, space_type_gen: true, default: false }
93
- hash['SmallOffice - Storage'] = { ratio: 0.99, space_type_gen: true, default: false }
94
- hash['SmallOffice - Classroom'] = { ratio: 0.99, space_type_gen: true, default: false }
95
- hash['SmallOffice - Dining'] = { ratio: 0.99, space_type_gen: true, default: false }
96
- hash['WholeBuilding - Sm Office'] = { ratio: 0.0, space_type_gen: true, default: false }
84
+ hash['SmallOffice - ClosedOffice'] = { ratio: 0.3325, space_type_gen: true, default: false }
85
+ hash['SmallOffice - Conference'] = { ratio: 0.0818, space_type_gen: true, default: false }
86
+ hash['SmallOffice - Corridor'] = { ratio: 0.1213, space_type_gen: true, default: false, circ: true }
87
+ hash['SmallOffice - Elec/MechRoom'] = { ratio: 0.0201, space_type_gen: true, default: false }
88
+ hash['SmallOffice - Lobby'] = { ratio: 0.0818, space_type_gen: true, default: false }
89
+ hash['SmallOffice - OpenOffice'] = { ratio: 0.1659, space_type_gen: true, default: true }
90
+ hash['SmallOffice - Restroom'] = { ratio: 0.0402, space_type_gen: true, default: false }
91
+ hash['SmallOffice - Stair'] = { ratio: 0.0201, space_type_gen: true, default: false }
92
+ hash['SmallOffice - Storage'] = { ratio: 0.1363, space_type_gen: true, default: false }
97
93
  end
98
94
  when 'MediumOffice'
99
95
  if whole_building
100
96
  hash['WholeBuilding - Md Office'] = { ratio: 1.0, space_type_gen: true, default: true }
101
97
  else
102
- hash['MediumOffice - Breakroom'] = { ratio: 0.99, space_type_gen: true, default: false }
103
- hash['MediumOffice - ClosedOffice'] = { ratio: 0.99, space_type_gen: true, default: false }
104
- hash['MediumOffice - Conference'] = { ratio: 0.99, space_type_gen: true, default: false }
105
- hash['MediumOffice - Corridor'] = { ratio: 0.99, space_type_gen: true, default: false, circ: true }
106
- hash['MediumOffice - Elec/MechRoom'] = { ratio: 0.99, space_type_gen: true, default: false }
107
- hash['MediumOffice - Lobby'] = { ratio: 0.99, space_type_gen: true, default: false }
108
- hash['MediumOffice - OpenOffice'] = { ratio: 0.99, space_type_gen: true, default: true }
109
- hash['MediumOffice - Restroom'] = { ratio: 0.99, space_type_gen: true, default: false }
110
- hash['MediumOffice - Stair'] = { ratio: 0.99, space_type_gen: true, default: false }
111
- hash['MediumOffice - Storage'] = { ratio: 0.99, space_type_gen: true, default: false }
112
- hash['MediumOffice - Classroom'] = { ratio: 0.99, space_type_gen: true, default: false }
113
- hash['MediumOffice - Dining'] = { ratio: 0.99, space_type_gen: true, default: false }
114
- hash['WholeBuilding - Md Office'] = { ratio: 0.0, space_type_gen: true, default: false }
98
+ hash['MediumOffice - Classroom'] = { ratio: 0.0060, space_type_gen: true, default: false }
99
+ hash['MediumOffice - ClosedOffice'] = { ratio: 0.1866, space_type_gen: true, default: false }
100
+ hash['MediumOffice - Conference'] = { ratio: 0.0519, space_type_gen: true, default: false }
101
+ hash['MediumOffice - Corridor'] = { ratio: 0.0896, space_type_gen: true, default: false, circ: true }
102
+ hash['MediumOffice - Dining'] = { ratio: 0.0138, space_type_gen: true, default: false }
103
+ hash['MediumOffice - Elec/MechRoom'] = { ratio: 0.0300, space_type_gen: true, default: false }
104
+ hash['MediumOffice - Lobby'] = { ratio: 0.0550, space_type_gen: true, default: false }
105
+ hash['MediumOffice - OpenOffice'] = { ratio: 0.4255, space_type_gen: true, default: true }
106
+ hash['MediumOffice - Restroom'] = { ratio: 0.0360, space_type_gen: true, default: false }
107
+ hash['MediumOffice - Stair'] = { ratio: 0.0370, space_type_gen: true, default: false }
108
+ hash['MediumOffice - Storage'] = { ratio: 0.0686, space_type_gen: true, default: false }
115
109
  end
116
110
  when 'LargeOffice'
117
111
  case building_subtype
@@ -123,25 +117,23 @@ module OpenstudioStandards
123
117
  hash['OfficeLarge Data Center'] = { ratio: 1.0, space_type_gen: true, default: false }
124
118
  when 'largeoffice_nodatacenter'
125
119
  hash['WholeBuilding - Lg Office'] = { ratio: 1.0, space_type_gen: true, default: true }
126
- when 'largeoffice_default'
120
+ else # 'largeoffice_default'
127
121
  if ['DOE Ref Pre-1980', 'DOE Ref 1980-2004', 'ComStock DOE Ref Pre-1980', 'ComStock DOE Ref 1980-2004'].include?(template)
128
122
  if whole_building
129
123
  hash['WholeBuilding - Lg Office'] = { ratio: 1.0, space_type_gen: true, default: true }
130
124
  else
131
- hash['BreakRoom'] = { ratio: 0.99, space_type_gen: true, default: false }
132
- hash['ClosedOffice'] = { ratio: 0.99, space_type_gen: true, default: false }
133
- hash['Conference'] = { ratio: 0.99, space_type_gen: true, default: false }
134
- hash['Corridor'] = { ratio: 0.99, space_type_gen: true, default: false, circ: true }
135
- hash['Elec/MechRoom'] = { ratio: 0.99, space_type_gen: true, default: false }
136
- hash['IT_Room'] = { ratio: 0.99, space_type_gen: true, default: false }
137
- hash['Lobby'] = { ratio: 0.99, space_type_gen: true, default: false }
138
- hash['OpenOffice'] = { ratio: 0.99, space_type_gen: true, default: true }
139
- hash['PrintRoom'] = { ratio: 0.99, space_type_gen: true, default: false }
140
- hash['Restroom'] = { ratio: 0.99, space_type_gen: true, default: false }
141
- hash['Stair'] = { ratio: 0.99, space_type_gen: true, default: false }
142
- hash['Storage'] = { ratio: 0.99, space_type_gen: true, default: false }
143
- hash['Vending'] = { ratio: 0.99, space_type_gen: true, default: false }
144
- hash['WholeBuilding - Lg Office'] = { ratio: 0.0, space_type_gen: true, default: false }
125
+ hash['BreakRoom'] = { ratio: 0.0178, space_type_gen: true, default: false }
126
+ hash['Classroom'] = { ratio: 0.0040, space_type_gen: true, default: false }
127
+ hash['ClosedOffice'] = { ratio: 0.16, space_type_gen: true, default: false }
128
+ hash['Conference'] = { ratio: 0.0153, space_type_gen: true, default: false }
129
+ hash['Corridor'] = { ratio: 0.0460, space_type_gen: true, default: false, circ: true }
130
+ hash['Dining'] = { ratio: 0.0161, space_type_gen: true, default: false }
131
+ hash['Elec/MechRoom'] = { ratio: 0.0944, space_type_gen: true, default: false }
132
+ hash['Lobby'] = { ratio: 0.0554, space_type_gen: true, default: false }
133
+ hash['OpenOffice'] = { ratio: 0.5230, space_type_gen: true, default: true }
134
+ hash['Restroom'] = { ratio: 0.0310, space_type_gen: true, default: false }
135
+ hash['Stair'] = { ratio: 0.0180, space_type_gen: true, default: false }
136
+ hash['Storage'] = { ratio: 0.0190, space_type_gen: true, default: false }
145
137
  end
146
138
  else
147
139
  if whole_building
@@ -149,22 +141,20 @@ module OpenstudioStandards
149
141
  hash['OfficeLarge Data Center'] = { ratio: 0.0094, space_type_gen: true, default: false }
150
142
  hash['OfficeLarge Main Data Center'] = { ratio: 0.0169, space_type_gen: true, default: false }
151
143
  else
152
- hash['BreakRoom'] = { ratio: 0.99, space_type_gen: true, default: false }
153
- hash['ClosedOffice'] = { ratio: 0.99, space_type_gen: true, default: false }
154
- hash['Conference'] = { ratio: 0.99, space_type_gen: true, default: false }
155
- hash['Corridor'] = { ratio: 0.99, space_type_gen: true, default: false, circ: true }
156
- hash['Elec/MechRoom'] = { ratio: 0.99, space_type_gen: true, default: false }
157
- hash['IT_Room'] = { ratio: 0.99, space_type_gen: true, default: false }
158
- hash['Lobby'] = { ratio: 0.99, space_type_gen: true, default: false }
159
- hash['OpenOffice'] = { ratio: 0.99, space_type_gen: true, default: true }
160
- hash['PrintRoom'] = { ratio: 0.99, space_type_gen: true, default: false }
161
- hash['Restroom'] = { ratio: 0.99, space_type_gen: true, default: false }
162
- hash['Stair'] = { ratio: 0.99, space_type_gen: true, default: false }
163
- hash['Storage'] = { ratio: 0.99, space_type_gen: true, default: false }
164
- hash['Vending'] = { ratio: 0.99, space_type_gen: true, default: false }
165
- hash['WholeBuilding - Lg Office'] = { ratio: 0.0, space_type_gen: true, default: false }
166
- hash['OfficeLarge Data Center'] = { ratio: 0.0, space_type_gen: true, default: false }
167
- hash['OfficeLarge Main Data Center'] = { ratio: 0.0, space_type_gen: true, default: false }
144
+ hash['BreakRoom'] = { ratio: 0.0167, space_type_gen: true, default: false }
145
+ hash['Classroom'] = { ratio: 0.0038, space_type_gen: true, default: false }
146
+ hash['ClosedOffice'] = { ratio: 0.1500, space_type_gen: true, default: false }
147
+ hash['Conference'] = { ratio: 0.0144, space_type_gen: true, default: false }
148
+ hash['Corridor'] = { ratio: 0.0431, space_type_gen: true, default: false, circ: true }
149
+ hash['Dining'] = { ratio: 0.0151, space_type_gen: true, default: false }
150
+ hash['Elec/MechRoom'] = { ratio: 0.0885, space_type_gen: true, default: false }
151
+ hash['Lobby'] = { ratio: 0.0520, space_type_gen: true, default: false }
152
+ hash['OfficeLarge Data Center'] = { ratio: 0.0077, space_type_gen: true, default: false }
153
+ hash['OfficeLarge Main Data Center'] = { ratio: 0.0550, space_type_gen: true, default: false }
154
+ hash['OpenOffice'] = { ratio: 0.4900, space_type_gen: true, default: true }
155
+ hash['Restroom'] = { ratio: 0.0290, space_type_gen: true, default: false }
156
+ hash['Stair'] = { ratio: 0.0169, space_type_gen: true, default: false }
157
+ hash['Storage'] = { ratio: 0.0178, space_type_gen: true, default: false }
168
158
  end
169
159
  end
170
160
  end
@@ -1,5 +1,5 @@
1
1
  module OpenstudioStandards
2
- # This Module provides methods to create, modify, and get information about model geometry
2
+ # The Geometry module provides methods to create, modify, and get information about model geometry
3
3
  module Geometry
4
4
  # @!group Create
5
5
  # Methods to create geometry
@@ -1,5 +1,5 @@
1
1
  module OpenstudioStandards
2
- # This Module provides methods to create, modify, and get information about model geometry
2
+ # The Geometry module provides methods to create, modify, and get information about model geometry
3
3
  module Geometry
4
4
  # @!group CreateBar
5
5
  # Methods to create bar geometry
@@ -1044,7 +1044,7 @@ module OpenstudioStandards
1044
1044
  facade_area = typical_width_facade_area
1045
1045
  until (width_area + facade_area >= target_party_wall_area) || (width_counter == (args[:num_stories_above_grade].ceil * 2))
1046
1046
  # update facade area for top story
1047
- if width_counter == args[:num_stories_above_grade].ceil - 1 || ((width_counter == (args[:num_stories_above_grade].ceil * 2)) - 1)
1047
+ if (width_counter == (args[:num_stories_above_grade].ceil - 1)) || (width_counter == ((args[:num_stories_above_grade].ceil * 2) - 1))
1048
1048
  facade_area = top_story_width_facade_area
1049
1049
  else
1050
1050
  facade_area = typical_width_facade_area
@@ -1061,7 +1061,7 @@ module OpenstudioStandards
1061
1061
  facade_area = typical_length_facade_area
1062
1062
  until (length_area + facade_area >= target_party_wall_area) || (length_counter == args[:num_stories_above_grade].ceil * 2)
1063
1063
  # update facade area for top story
1064
- if length_counter == args[:num_stories_above_grade].ceil - 1 || ((length_counter == args[:num_stories_above_grade].ceil * 2) - 1)
1064
+ if (length_counter == (args[:num_stories_above_grade].ceil - 1)) || (length_counter == ((args[:num_stories_above_grade].ceil * 2) - 1))
1065
1065
  facade_area = top_story_length_facade_area
1066
1066
  else
1067
1067
  facade_area = typical_length_facade_area
@@ -2129,6 +2129,9 @@ module OpenstudioStandards
2129
2129
  args[:primary_building_type] = bldg_type_a
2130
2130
  OpenstudioStandards::Geometry.create_bar_from_args_and_building_type_hash(model, args, building_type_hash)
2131
2131
 
2132
+ # rename all surfaces and subsurfaces
2133
+ OpenstudioStandards::Geometry.model_rename_surfaces_and_subsurfaces(model)
2134
+
2132
2135
  return true
2133
2136
  end
2134
2137
 
@@ -1,5 +1,5 @@
1
1
  module OpenstudioStandards
2
- # This Module provides methods to create, modify, and get information about model geometry
2
+ # The Geometry module provides methods to create, modify, and get information about model geometry
3
3
  module Geometry
4
4
  # Methods to create basic shapes
5
5
 
@@ -1,5 +1,5 @@
1
1
  module OpenstudioStandards
2
- # This Module provides methods to create, modify, and get information about model geometry
2
+ # The Geometry module provides methods to create, modify, and get information about model geometry
3
3
  module Geometry
4
4
  # Methods to group thermal zones
5
5
 
@@ -1,5 +1,5 @@
1
1
  module OpenstudioStandards
2
- # This Module provides methods to create, modify, and get information about model geometry
2
+ # The Geometry module provides methods to create, modify, and get information about model geometry
3
3
  module Geometry
4
4
  # Methods to get information about model geometry
5
5
 
@@ -1,5 +1,5 @@
1
1
  module OpenstudioStandards
2
- # This Module provides methods to create, modify, and get information about model geometry
2
+ # The Geometry module provides methods to create, modify, and get information about model geometry
3
3
  module Geometry
4
4
  # Methods to modify geometry
5
5
 
@@ -87,6 +87,47 @@ module OpenstudioStandards
87
87
 
88
88
  # @!endgroup Modify:SubSurface
89
89
 
90
+ # @!group Modify:Space
91
+
92
+ # Rename space surfaces using the convention 'SpaceName SurfaceType #'.
93
+ # Rename sub surfaces using the convention 'SurfaceName SubSurfaceType #'.
94
+ #
95
+ # @param space [OpenStudio::Model::Space] OpenStudio space object
96
+ # @return [Boolean] returns true if successful, false if not
97
+ def self.space_rename_surfaces_and_subsurfaces(space)
98
+ # reset names
99
+ surf_i = 1
100
+ space.surfaces.each do |surface|
101
+ surface.setName("temp surf #{surf_i}")
102
+ sub_i = 1
103
+ surface.subSurfaces.each do |sub_surface|
104
+ sub_surface.setName("#{surface.name} sub #{sub_i}")
105
+ sub_i += 1
106
+ end
107
+ surf_i += 1
108
+ end
109
+
110
+ # rename surfaces based on space name and surface type
111
+ surface_type_counter = Hash.new(0)
112
+ space.surfaces.sort.each do |surface|
113
+ surface_type = surface.surfaceType
114
+ surface_type_counter[surface_type] += 1
115
+ surface.setName("#{space.name} #{surface_type} #{surface_type_counter[surface_type]}")
116
+
117
+ # rename sub surfaces based on surface name and subsurface type
118
+ sub_surface_type_counter = Hash.new(0)
119
+ surface.subSurfaces.sort.each do |sub_surface|
120
+ sub_surface_type = sub_surface.subSurfaceType
121
+ sub_surface_type_counter[sub_surface_type] += 1
122
+ sub_surface.setName("#{surface.name} #{sub_surface_type} #{sub_surface_type_counter[sub_surface_type]}")
123
+ end
124
+ end
125
+
126
+ return true
127
+ end
128
+
129
+ # @!endgroup Modify:Space
130
+
90
131
  # @!group Modify:Model
91
132
 
92
133
  # Assign each space in the model to a building story based on common z (height) values.
@@ -137,6 +178,17 @@ module OpenstudioStandards
137
178
  return true
138
179
  end
139
180
 
181
+ # Rename all model surfaces using the convention 'SpaceName SurfaceType #'.
182
+ # Rename all model sub surfaces using the convention 'SurfaceName SubSurfaceType #'.
183
+ #
184
+ # @param model [OpenStudio::Model::Model] OpenStudio model object
185
+ # @return [Boolean] returns true if successful, false if not
186
+ def self.model_rename_surfaces_and_subsurfaces(model)
187
+ model.getSpaces.each { |space| OpenstudioStandards::Geometry.space_rename_surfaces_and_subsurfaces(space) }
188
+
189
+ return true
190
+ end
191
+
140
192
  # Set the model's north axis (degrees from true North)
141
193
  #
142
194
  # @param model [OpenStudio::Model::Model] OpenStudio Model object
@@ -231,7 +231,7 @@ module OpenstudioStandards
231
231
  OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Infiltration', "Unable to find file: #{nist_infiltration_correlations_csv}")
232
232
  return false
233
233
  end
234
- coefficients_tbl = CSV.table(nist_infiltration_correlations_csv)
234
+ coefficients_tbl = CSV.table(nist_infiltration_correlations_csv, encoding: "ISO8859-1:utf-8" )
235
235
  coefficients_hsh = coefficients_tbl.map(&:to_hash)
236
236
 
237
237
  # select down to building type and climate zone
@@ -300,8 +300,8 @@ class ASHRAE9012016 < ASHRAE901
300
300
  key_name = space.name.to_s
301
301
  end
302
302
  light_sensor.setKeyName(key_name)
303
- light_sensor.setName("#{key_name}_LSr".gsub(/[\s-]/, ''))
304
- light_sensor_name = light_sensor.name.to_s
303
+ light_sensor_name_ems = "#{ems_friendly_name(key_name)}_LSr"
304
+ light_sensor.setName(light_sensor_name_ems)
305
305
 
306
306
  # get the space floor area for calculations
307
307
  space_floor_area = space.floorArea
@@ -328,28 +328,28 @@ class ASHRAE9012016 < ASHRAE901
328
328
  else
329
329
  light_x_actuator = OpenStudio::Model::EnergyManagementSystemActuator.new(light_x, 'Lights', 'Electricity Rate')
330
330
  end
331
- light_x_actuator.setName("#{key_name}_Light#{light_id}_Actuator".gsub(/[\s-]/, ''))
332
- light_x_actuator_name = light_x_actuator.name.to_s
333
- add_lights_prog_null += "\n SET #{light_x_actuator_name} = NULL,"
331
+ light_x_actuator_name_ems = "#{ems_friendly_name(key_name)}_Light#{light_id}_Actuator"
332
+ light_x_actuator.setName(light_x_actuator_name_ems)
333
+ add_lights_prog_null += "\n SET #{light_x_actuator_name_ems} = NULL,"
334
334
  if light_x == big_light
335
- add_lights_prog_0 += "\n SET #{light_x_actuator_name} = 0.02*#{space_floor_area}/0.09290304,"
335
+ add_lights_prog_0 += "\n SET #{light_x_actuator_name_ems} = 0.02*#{space_floor_area}/0.09290304,"
336
336
  next
337
337
  end
338
- add_lights_prog_0 += "\n SET #{light_x_actuator_name} = 0,"
338
+ add_lights_prog_0 += "\n SET #{light_x_actuator_name_ems} = 0,"
339
339
  end
340
340
 
341
341
  light_ems_prog = OpenStudio::Model::EnergyManagementSystemProgram.new(model)
342
- light_ems_prog.setName("SET_#{key_name}_Light_EMS_Program".gsub(/[\s-]/, ''))
342
+ light_ems_prog.setName("SET_#{ems_friendly_name(key_name)}_Light_EMS_Program")
343
343
  light_ems_prog_body = <<-EMS
344
- SET #{light_sensor_name}_IP=0.093*#{light_sensor_name}/#{space_floor_area},
345
- IF (#{business_sensor_name} <= 0) && (#{light_sensor_name}_IP >= 0.02),#{add_lights_prog_0}
344
+ SET #{light_sensor_name_ems}_IP=0.093*#{light_sensor_name_ems}/#{space_floor_area},
345
+ IF (#{business_sensor_name} <= 0) && (#{light_sensor_name_ems}_IP >= 0.02),#{add_lights_prog_0}
346
346
  ELSE,#{add_lights_prog_null}
347
347
  ENDIF
348
348
  EMS
349
349
  light_ems_prog.setBody(light_ems_prog_body)
350
350
 
351
351
  light_ems_prog_manager = OpenStudio::Model::EnergyManagementSystemProgramCallingManager.new(model)
352
- light_ems_prog_manager.setName("SET_#{key_name}_Light_EMS_Program_Manager")
352
+ light_ems_prog_manager.setName("SET_#{ems_friendly_name(key_name)}_Light_EMS_Program_Manager")
353
353
  light_ems_prog_manager.setCallingPoint('AfterPredictorAfterHVACManagers')
354
354
  light_ems_prog_manager.addProgram(light_ems_prog)
355
355
  end
@@ -300,8 +300,8 @@ class ASHRAE9012019 < ASHRAE901
300
300
  key_name = space.name.to_s
301
301
  end
302
302
  light_sensor.setKeyName(key_name)
303
- light_sensor.setName("#{key_name}_LSr".gsub(/[\s-]/, ''))
304
- light_sensor_name = light_sensor.name.to_s
303
+ light_sensor_name_ems = "#{ems_friendly_name(key_name)}_LSr"
304
+ light_sensor.setName(light_sensor_name_ems)
305
305
 
306
306
  # get the space floor area for calculations
307
307
  space_floor_area = space.floorArea
@@ -328,28 +328,28 @@ class ASHRAE9012019 < ASHRAE901
328
328
  else
329
329
  light_x_actuator = OpenStudio::Model::EnergyManagementSystemActuator.new(light_x, 'Lights', 'Electricity Rate')
330
330
  end
331
- light_x_actuator.setName("#{key_name}_Light#{light_id}_Actuator".gsub(/[\s-]/, ''))
332
- light_x_actuator_name = light_x_actuator.name.to_s
333
- add_lights_prog_null += "\n SET #{light_x_actuator_name} = NULL,"
331
+ light_x_actuator_name_ems = "#{ems_friendly_name(key_name)}_Light#{light_id}_Actuator"
332
+ light_x_actuator.setName(light_x_actuator_name_ems)
333
+ add_lights_prog_null += "\n SET #{light_x_actuator_name_ems} = NULL,"
334
334
  if light_x == big_light
335
- add_lights_prog_0 += "\n SET #{light_x_actuator_name} = 0.02*#{space_floor_area}/0.09290304,"
335
+ add_lights_prog_0 += "\n SET #{light_x_actuator_name_ems} = 0.02*#{space_floor_area}/0.09290304,"
336
336
  next
337
337
  end
338
- add_lights_prog_0 += "\n SET #{light_x_actuator_name} = 0,"
338
+ add_lights_prog_0 += "\n SET #{light_x_actuator_name_ems} = 0,"
339
339
  end
340
340
 
341
341
  light_ems_prog = OpenStudio::Model::EnergyManagementSystemProgram.new(model)
342
- light_ems_prog.setName("SET_#{key_name}_Light_EMS_Program".gsub(/[\s-]/, ''))
342
+ light_ems_prog.setName("SET_#{ems_friendly_name(key_name)}_Light_EMS_Program")
343
343
  light_ems_prog_body = <<-EMS
344
- SET #{light_sensor_name}_IP=0.093*#{light_sensor_name}/#{space_floor_area},
345
- IF (#{business_sensor_name} <= 0) && (#{light_sensor_name}_IP >= 0.02),#{add_lights_prog_0}
344
+ SET #{light_sensor_name_ems}_IP=0.093*#{light_sensor_name_ems}/#{space_floor_area},
345
+ IF (#{business_sensor_name} <= 0) && (#{light_sensor_name_ems}_IP >= 0.02),#{add_lights_prog_0}
346
346
  ELSE,#{add_lights_prog_null}
347
347
  ENDIF
348
348
  EMS
349
349
  light_ems_prog.setBody(light_ems_prog_body)
350
350
 
351
351
  light_ems_prog_manager = OpenStudio::Model::EnergyManagementSystemProgramCallingManager.new(model)
352
- light_ems_prog_manager.setName("SET_#{key_name}_Light_EMS_Program_Manager")
352
+ light_ems_prog_manager.setName("SET_#{ems_friendly_name(key_name)}_Light_EMS_Program_Manager")
353
353
  light_ems_prog_manager.setCallingPoint('AfterPredictorAfterHVACManagers')
354
354
  light_ems_prog_manager.addProgram(light_ems_prog)
355
355
  end
@@ -20,10 +20,10 @@ class ASHRAE9012019 < ASHRAE901
20
20
  #
21
21
  # @return [OpenStudio::Model::ScheduleRuleset] Generated maximum outdoor air fraction schedule for later use
22
22
  def set_maximum_fraction_outdoor_air_schedule(air_loop_hvac, oa_control, snc)
23
- max_oa_sch_name = "#{snc}maxOASch"
23
+ max_oa_sch_name = "#{snc}_maxOASch"
24
24
  max_oa_sch = OpenStudio::Model::ScheduleRuleset.new(air_loop_hvac.model)
25
25
  max_oa_sch.setName(max_oa_sch_name)
26
- max_oa_sch.defaultDaySchedule.setName("#{max_oa_sch_name}Default")
26
+ max_oa_sch.defaultDaySchedule.setName("#{max_oa_sch_name}_Default")
27
27
  max_oa_sch.defaultDaySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), 0.75)
28
28
  oa_control.setMaximumFractionofOutdoorAirSchedule(max_oa_sch)
29
29
  max_oa_sch
@@ -185,16 +185,16 @@ module SuperTallBuilding
185
185
  OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Model', 'No story info in the SWH loop.')
186
186
  return false
187
187
  end
188
- main_swh_loop = model_add_swh_loop(model,
189
- swh_loop_name,
190
- nil,
191
- OpenStudio.convert(prototype_input['main_service_water_temperature'], 'F', 'C').get,
192
- prototype_input['main_service_water_pump_head'].to_f,
193
- prototype_input['main_service_water_pump_motor_efficiency'],
194
- OpenStudio.convert(prototype_input['main_water_heater_capacity'], 'Btu/hr', 'W').get,
195
- OpenStudio.convert(prototype_input['main_water_heater_volume'], 'gal', 'm^3').get,
196
- swh_fueltype,
197
- OpenStudio.convert(prototype_input['main_service_water_parasitic_fuel_consumption_rate'], 'Btu/hr', 'W').get)
188
+ main_swh_loop = OpenstudioStandards::ServiceWaterHeating.create_service_water_heating_loop(model,
189
+ system_name: swh_loop_name,
190
+ service_water_temperature: OpenStudio.convert(prototype_input['main_service_water_temperature'], 'F', 'C').get,
191
+ service_water_pump_head: prototype_input['main_service_water_pump_head'].to_f,
192
+ service_water_pump_motor_efficiency: prototype_input['main_service_water_pump_motor_efficiency'],
193
+ water_heater_capacity: OpenStudio.convert(prototype_input['main_water_heater_capacity'], 'Btu/hr', 'W').get,
194
+ water_heater_volume: OpenStudio.convert(prototype_input['main_water_heater_volume'], 'gal', 'm^3').get,
195
+ water_heater_fuel: swh_fueltype,
196
+ on_cycle_parasitic_fuel_consumption_rate: OpenStudio.convert(prototype_input['main_service_water_parasitic_fuel_consumption_rate'], 'Btu/hr', 'W').get,
197
+ off_cycle_parasitic_fuel_consumption_rate: OpenStudio.convert(prototype_input['main_service_water_parasitic_fuel_consumption_rate'], 'Btu/hr', 'W').get)
198
198
 
199
199
  # Attach the end uses based on floor function type
200
200
  # Office and retail: add to mechanical room only
@@ -225,11 +225,9 @@ module SuperTallBuilding
225
225
  next if data['service_water_heating_peak_flow_rate'].to_f < 0.00001 && data['service_water_heating_peak_flow_per_area'].to_f < 0.00001
226
226
 
227
227
  # Add a service water use for each space
228
- space_multiplier = space.multiplier
229
228
  water_fixture = model_add_swh_end_uses_by_space(model,
230
229
  main_swh_loop,
231
- space,
232
- space_multiplier)
230
+ space)
233
231
  unless water_fixture.nil?
234
232
  water_fixtures << water_fixture
235
233
  end
@@ -246,47 +244,46 @@ module SuperTallBuilding
246
244
 
247
245
  # Add the booster water loop if there is any hotel floor
248
246
  if additional_params[:num_of_floor_hotel].to_i > 0
249
- swh_booster_loop = model_add_swh_booster(model,
250
- hotel_swh_loop,
251
- OpenStudio.convert(prototype_input['booster_water_heater_capacity'], 'Btu/hr', 'W').get,
252
- OpenStudio.convert(prototype_input['booster_water_heater_volume'], 'gal', 'm^3').get,
253
- prototype_input['booster_water_heater_fuel'],
254
- OpenStudio.convert(prototype_input['booster_water_temperature'], 'F', 'C').get,
255
- 0,
256
- nil)
257
-
258
- # Attach the end uses
259
- model_add_booster_swh_end_uses(model,
260
- swh_booster_loop,
261
- OpenStudio.convert(prototype_input['booster_service_water_peak_flowrate'], 'gal/min', 'm^3/s').get,
262
- prototype_input['booster_service_water_flowrate_schedule'],
263
- OpenStudio.convert(prototype_input['booster_water_use_temperature'], 'F', 'C').get)
247
+ swh_booster_loop = OpenstudioStandards::ServiceWaterHeating.create_booster_water_heating_loop(model,
248
+ water_heater_capacity: OpenStudio.convert(prototype_input['booster_water_heater_capacity'], 'Btu/hr', 'W').get,
249
+ water_heater_volume: OpenStudio.convert(prototype_input['booster_water_heater_volume'], 'gal', 'm^3').get,
250
+ water_heater_fuel: prototype_input['booster_water_heater_fuel'],
251
+ service_water_temperature: OpenStudio.convert(prototype_input['booster_water_temperature'], 'F', 'C').get,
252
+ service_water_loop: hotel_swh_loop)
253
+
254
+ # add booster water use
255
+ OpenstudioStandards::ServiceWaterHeating.create_water_use(model,
256
+ name: 'Booster',
257
+ flow_rate: OpenStudio.convert(prototype_input['booster_service_water_peak_flowrate'], 'gal/min', 'm^3/s').get,
258
+ flow_rate_fraction_schedule: model_add_schedule(model, prototype_input['booster_service_water_flowrate_schedule']),
259
+ water_use_temperature: OpenStudio.convert(prototype_input['booster_water_use_temperature'], 'F', 'C').get,
260
+ service_water_loop: swh_booster_loop)
264
261
  end
265
262
 
266
263
  # for tall and super tall buildings, there is laundry only if hotel has more than 1 floors
267
264
  # hotel_bot has laundry, if only one floor, doesn't have hotel_bot
268
265
  if additional_params[:num_of_floor_hotel].to_i > 1
269
266
  # Add the laundry service water heating loop
270
- laundry_swh_loop = model_add_swh_loop(model,
271
- 'Laundry Service Water Loop',
272
- nil,
273
- OpenStudio.convert(prototype_input['laundry_service_water_temperature'], 'F', 'C').get,
274
- prototype_input['laundry_service_water_pump_head'].to_f,
275
- prototype_input['laundry_service_water_pump_motor_efficiency'],
276
- OpenStudio.convert(prototype_input['laundry_water_heater_capacity'], 'Btu/hr', 'W').get,
277
- OpenStudio.convert(prototype_input['laundry_water_heater_volume'], 'gal', 'm^3').get,
278
- prototype_input['laundry_water_heater_fuel'],
279
- OpenStudio.convert(prototype_input['laundry_service_water_parasitic_fuel_consumption_rate'], 'Btu/hr', 'W').get)
280
-
281
- # Attach the end uses if specified in prototype inputs
282
- model_add_swh_end_uses(model,
283
- 'Laundry',
284
- laundry_swh_loop,
285
- OpenStudio.convert(prototype_input['laundry_service_water_peak_flowrate'], 'gal/min', 'm^3/s').get,
286
- prototype_input['laundry_service_water_flowrate_schedule'],
287
- OpenStudio.convert(prototype_input['laundry_water_use_temperature'], 'F', 'C').get,
288
- nil)
267
+ laundry_swh_loop = OpenstudioStandards::ServiceWaterHeating.create_service_water_heating_loop(model,
268
+ system_name: 'Laundry Service Water Loop',
269
+ service_water_temperature: OpenStudio.convert(prototype_input['laundry_service_water_temperature'], 'F', 'C').get,
270
+ service_water_pump_head: prototype_input['laundry_service_water_pump_head'].to_f,
271
+ service_water_pump_motor_efficiency: prototype_input['laundry_service_water_pump_motor_efficiency'],
272
+ water_heater_capacity: OpenStudio.convert(prototype_input['laundry_water_heater_capacity'], 'Btu/hr', 'W').get,
273
+ water_heater_volume: OpenStudio.convert(prototype_input['laundry_water_heater_volume'], 'gal', 'm^3').get,
274
+ water_heater_fuel: prototype_input['laundry_water_heater_fuel'],
275
+ on_cycle_parasitic_fuel_consumption_rate: OpenStudio.convert(prototype_input['laundry_service_water_parasitic_fuel_consumption_rate'], 'Btu/hr', 'W').get,
276
+ off_cycle_parasitic_fuel_consumption_rate: OpenStudio.convert(prototype_input['laundry_service_water_parasitic_fuel_consumption_rate'], 'Btu/hr', 'W').get)
277
+
278
+ # add water use
279
+ OpenstudioStandards::ServiceWaterHeating.create_water_use(model,
280
+ name: 'Laundry',
281
+ flow_rate: OpenStudio.convert(prototype_input['laundry_service_water_peak_flowrate'], 'gal/min', 'm^3/s').get,
282
+ flow_rate_fraction_schedule: model_add_schedule(model, prototype_input['laundry_service_water_flowrate_schedule']),
283
+ water_use_temperature: OpenStudio.convert(prototype_input['laundry_water_use_temperature'], 'F', 'C').get,
284
+ service_water_loop: laundry_swh_loop)
289
285
  end
286
+
290
287
  return true
291
288
  end
292
289