openstudio-standards 0.2.17.rc2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/data/standards/OpenStudio_Standards-ashrae_90_1.xlsx +0 -0
 - data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.exterior_lights.rb +7 -7
 - data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +5 -1
 - data/lib/openstudio-standards/prototypes/common/objects/Prototype.ServiceWaterHeating.rb +8 -0
 - data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +3 -1
 - data/lib/openstudio-standards/standards/Standards.ThermalZone.rb +1 -1
 - data/lib/openstudio-standards/standards/Standards.WaterHeaterMixed.rb +5 -5
 - data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.entryways.json +13 -2
 - data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.parking.json +11 -2
 - data/lib/openstudio-standards/standards/necb/NECB2011/service_water_heating.rb +1 -1
 - data/lib/openstudio-standards/standards/necb/NECB2020/service_water_heating.rb +1 -1
 - data/lib/openstudio-standards/version.rb +1 -1
 - data/lib/openstudio-standards/weather/Weather.Model.rb +5 -0
 - metadata +2 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 869188124d2251a59ea1f453f897450d7b25017970f0a507322ec8c569135ae9
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: d4107600d066939c8ee60b95df4d1dd7a18fd35039a575649b68866d27f95653
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: c271293b7547a006dbd6594747f74a55278407633376060d51604320660ee86839c6bcefafaa8cf24d635fab0272236b85c496aee982aaea6f57a1b23771b987
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 808dc8cc49bb9d67c8496e57eb8a504650c8417b6539be87a314c8b0165a6beef2bc93b10d48f67d2842651b33cbd42f4727307d802aca9fb468788b59c8a120
         
     | 
| 
         Binary file 
     | 
| 
         @@ -59,7 +59,7 @@ class Standard 
     | 
|
| 
       59 
59 
     | 
    
         
             
                end
         
     | 
| 
       60 
60 
     | 
    
         | 
| 
       61 
61 
     | 
    
         
             
                # add exterior lights for parking area
         
     | 
| 
       62 
     | 
    
         
            -
                if area_length_count_hash[:parking_area_and_drives_area] > 0
         
     | 
| 
      
 62 
     | 
    
         
            +
                if !area_length_count_hash[:parking_area_and_drives_area].nil? && area_length_count_hash[:parking_area_and_drives_area] > 0
         
     | 
| 
       63 
63 
     | 
    
         | 
| 
       64 
64 
     | 
    
         
             
                  # lighting values
         
     | 
| 
       65 
65 
     | 
    
         
             
                  multiplier = area_length_count_hash[:parking_area_and_drives_area] * onsite_parking_fraction
         
     | 
| 
         @@ -86,7 +86,7 @@ class Standard 
     | 
|
| 
       86 
86 
     | 
    
         
             
                end
         
     | 
| 
       87 
87 
     | 
    
         | 
| 
       88 
88 
     | 
    
         
             
                # add exterior lights for facades
         
     | 
| 
       89 
     | 
    
         
            -
                if area_length_count_hash[:building_facades] > 0
         
     | 
| 
      
 89 
     | 
    
         
            +
                if !area_length_count_hash[:building_facades].nil? && area_length_count_hash[:building_facades] > 0
         
     | 
| 
       90 
90 
     | 
    
         | 
| 
       91 
91 
     | 
    
         
             
                  # lighting values
         
     | 
| 
       92 
92 
     | 
    
         
             
                  multiplier = area_length_count_hash[:building_facades]
         
     | 
| 
         @@ -113,7 +113,7 @@ class Standard 
     | 
|
| 
       113 
113 
     | 
    
         
             
                end
         
     | 
| 
       114 
114 
     | 
    
         | 
| 
       115 
115 
     | 
    
         
             
                # add exterior lights for main entries
         
     | 
| 
       116 
     | 
    
         
            -
                if area_length_count_hash[:main_entries] > 0
         
     | 
| 
      
 116 
     | 
    
         
            +
                if !area_length_count_hash[:main_entries].nil? && area_length_count_hash[:main_entries] > 0
         
     | 
| 
       117 
117 
     | 
    
         | 
| 
       118 
118 
     | 
    
         
             
                  # lighting values
         
     | 
| 
       119 
119 
     | 
    
         
             
                  multiplier = area_length_count_hash[:main_entries]
         
     | 
| 
         @@ -140,7 +140,7 @@ class Standard 
     | 
|
| 
       140 
140 
     | 
    
         
             
                end
         
     | 
| 
       141 
141 
     | 
    
         | 
| 
       142 
142 
     | 
    
         
             
                # add exterior lights for other doors
         
     | 
| 
       143 
     | 
    
         
            -
                if area_length_count_hash[:other_doors] > 0
         
     | 
| 
      
 143 
     | 
    
         
            +
                if !area_length_count_hash[:other_doors].nil? && area_length_count_hash[:other_doors] > 0
         
     | 
| 
       144 
144 
     | 
    
         | 
| 
       145 
145 
     | 
    
         
             
                  # lighting values
         
     | 
| 
       146 
146 
     | 
    
         
             
                  multiplier = area_length_count_hash[:other_doors]
         
     | 
| 
         @@ -167,7 +167,7 @@ class Standard 
     | 
|
| 
       167 
167 
     | 
    
         
             
                end
         
     | 
| 
       168 
168 
     | 
    
         | 
| 
       169 
169 
     | 
    
         
             
                # add exterior lights for entry canopies
         
     | 
| 
       170 
     | 
    
         
            -
                if area_length_count_hash[:canopy_entry_area] > 0
         
     | 
| 
      
 170 
     | 
    
         
            +
                if !area_length_count_hash[:canopy_entry_area].nil? && area_length_count_hash[:canopy_entry_area] > 0
         
     | 
| 
       171 
171 
     | 
    
         | 
| 
       172 
172 
     | 
    
         
             
                  # lighting values
         
     | 
| 
       173 
173 
     | 
    
         
             
                  multiplier = area_length_count_hash[:canopy_entry_area]
         
     | 
| 
         @@ -194,7 +194,7 @@ class Standard 
     | 
|
| 
       194 
194 
     | 
    
         
             
                end
         
     | 
| 
       195 
195 
     | 
    
         | 
| 
       196 
196 
     | 
    
         
             
                # add exterior lights for emergency canopies
         
     | 
| 
       197 
     | 
    
         
            -
                if area_length_count_hash[:canopy_emergency_area] > 0
         
     | 
| 
      
 197 
     | 
    
         
            +
                if !area_length_count_hash[:canopy_emergency_area].nil? && area_length_count_hash[:canopy_emergency_area] > 0
         
     | 
| 
       198 
198 
     | 
    
         | 
| 
       199 
199 
     | 
    
         
             
                  # lighting values
         
     | 
| 
       200 
200 
     | 
    
         
             
                  multiplier = area_length_count_hash[:canopy_emergency_area]
         
     | 
| 
         @@ -221,7 +221,7 @@ class Standard 
     | 
|
| 
       221 
221 
     | 
    
         
             
                end
         
     | 
| 
       222 
222 
     | 
    
         | 
| 
       223 
223 
     | 
    
         
             
                # add exterior lights for drive through windows
         
     | 
| 
       224 
     | 
    
         
            -
                if area_length_count_hash[:drive_through_windows] > 0
         
     | 
| 
      
 224 
     | 
    
         
            +
                if !area_length_count_hash[:drive_through_windows].nil? && area_length_count_hash[:drive_through_windows] > 0
         
     | 
| 
       225 
225 
     | 
    
         | 
| 
       226 
226 
     | 
    
         
             
                  # lighting values
         
     | 
| 
       227 
227 
     | 
    
         
             
                  multiplier = area_length_count_hash[:drive_through_windows]
         
     | 
| 
         @@ -2721,7 +2721,11 @@ Standard.class_eval do 
     | 
|
| 
       2721 
2721 
     | 
    
         
             
                    end
         
     | 
| 
       2722 
2722 
     | 
    
         
             
                  end
         
     | 
| 
       2723 
2723 
     | 
    
         
             
                end
         
     | 
| 
       2724 
     | 
    
         
            -
             
     | 
| 
      
 2724 
     | 
    
         
            +
             
     | 
| 
      
 2725 
     | 
    
         
            +
                # check wall area is non-zero
         
     | 
| 
      
 2726 
     | 
    
         
            +
                if wwr && wall_area > 0
         
     | 
| 
      
 2727 
     | 
    
         
            +
                  return window_area / wall_area * 100
         
     | 
| 
      
 2728 
     | 
    
         
            +
                end
         
     | 
| 
       2725 
2729 
     | 
    
         | 
| 
       2726 
2730 
     | 
    
         
             
                # else
         
     | 
| 
       2727 
2731 
     | 
    
         
             
                return window_area
         
     | 
| 
         @@ -546,6 +546,14 @@ class Standard 
     | 
|
| 
       546 
546 
     | 
    
         
             
                  default_water_heater_ambient_temp_sch = model_add_constant_schedule_ruleset(model,
         
     | 
| 
       547 
547 
     | 
    
         
             
                                                                                              OpenStudio.convert(70.0, 'F', 'C').get,
         
     | 
| 
       548 
548 
     | 
    
         
             
                                                                                              name = 'Water Heater Ambient Temp Schedule - 70F')
         
     | 
| 
      
 549 
     | 
    
         
            +
                  if temp_sch_type_limits.nil?
         
     | 
| 
      
 550 
     | 
    
         
            +
                    temp_sch_type_limits = model_add_schedule_type_limits(model,
         
     | 
| 
      
 551 
     | 
    
         
            +
                                                                          name: 'Temperature Schedule Type Limits',
         
     | 
| 
      
 552 
     | 
    
         
            +
                                                                          lower_limit_value: 0.0,
         
     | 
| 
      
 553 
     | 
    
         
            +
                                                                          upper_limit_value: 100.0,
         
     | 
| 
      
 554 
     | 
    
         
            +
                                                                          numeric_type: 'Continuous',
         
     | 
| 
      
 555 
     | 
    
         
            +
                                                                          unit_type: 'Temperature')
         
     | 
| 
      
 556 
     | 
    
         
            +
                  end
         
     | 
| 
       549 
557 
     | 
    
         
             
                  default_water_heater_ambient_temp_sch.setScheduleTypeLimits(temp_sch_type_limits)
         
     | 
| 
       550 
558 
     | 
    
         
             
                  tank.setAmbientTemperatureIndicator('Schedule')
         
     | 
| 
       551 
559 
     | 
    
         
             
                  tank.setAmbientTemperatureSchedule(default_water_heater_ambient_temp_sch)
         
     | 
| 
         @@ -3264,7 +3264,9 @@ class Standard 
     | 
|
| 
       3264 
3264 
     | 
    
         
             
                  # To solve the issue, add economizer here for cold climates
         
     | 
| 
       3265 
3265 
     | 
    
         
             
                  # select the climate zones with winter design temperature lower than -20C (for safer)
         
     | 
| 
       3266 
3266 
     | 
    
         
             
                  cold_climates = ['ASHRAE 169-2006-6A', 'ASHRAE 169-2006-6B', 'ASHRAE 169-2006-7A',
         
     | 
| 
       3267 
     | 
    
         
            -
                                   'ASHRAE 169-2006-7B', 'ASHRAE 169-2006-8A', 'ASHRAE 169-2006-8B' 
     | 
| 
      
 3267 
     | 
    
         
            +
                                   'ASHRAE 169-2006-7B', 'ASHRAE 169-2006-8A', 'ASHRAE 169-2006-8B',
         
     | 
| 
      
 3268 
     | 
    
         
            +
                                   'ASHRAE 169-2013-6A', 'ASHRAE 169-2013-6B', 'ASHRAE 169-2013-7A',
         
     | 
| 
      
 3269 
     | 
    
         
            +
                                   'ASHRAE 169-2013-7B', 'ASHRAE 169-2013-8A', 'ASHRAE 169-2013-8B']
         
     | 
| 
       3268 
3270 
     | 
    
         
             
                  if cold_climates.include? climate_zone
         
     | 
| 
       3269 
3271 
     | 
    
         
             
                    # Determine the economizer type in the prototype buildings, which depends on climate zone.
         
     | 
| 
       3270 
3272 
     | 
    
         
             
                    economizer_type = model_economizer_type(model, climate_zone)
         
     | 
| 
         @@ -980,7 +980,7 @@ class Standard 
     | 
|
| 
       980 
980 
     | 
    
         
             
                    end
         
     | 
| 
       981 
981 
     | 
    
         
             
                  elsif equip.to_ZoneHVACLowTemperatureRadiantElectric.is_initialized
         
     | 
| 
       982 
982 
     | 
    
         
             
                    equip = equip.to_ZoneHVACLowTemperatureRadiantElectric.get
         
     | 
| 
       983 
     | 
    
         
            -
                    htg_sch = equip.heatingSetpointTemperatureSchedule 
     | 
| 
      
 983 
     | 
    
         
            +
                    htg_sch = equip.heatingSetpointTemperatureSchedule
         
     | 
| 
       984 
984 
     | 
    
         
             
                  elsif equip.to_ZoneHVACLowTempRadiantConstFlow.is_initialized
         
     | 
| 
       985 
985 
     | 
    
         
             
                    equip = equip.to_ZoneHVACLowTempRadiantConstFlow.get
         
     | 
| 
       986 
986 
     | 
    
         
             
                    htg_coil = equip.heatingCoil
         
     | 
| 
         @@ -169,15 +169,15 @@ class Standard 
     | 
|
| 
       169 
169 
     | 
    
         
             
                end
         
     | 
| 
       170 
170 
     | 
    
         | 
| 
       171 
171 
     | 
    
         
             
                # Convert to SI
         
     | 
| 
       172 
     | 
    
         
            -
                 
     | 
| 
       173 
     | 
    
         
            -
                OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.WaterHeaterMixed', "For #{water_heater_mixed.name}, skin-loss UA = #{ 
     | 
| 
      
 172 
     | 
    
         
            +
                ua_w_per_k = OpenStudio.convert(ua_btu_per_hr_per_f, 'Btu/hr*R', 'W/K').get
         
     | 
| 
      
 173 
     | 
    
         
            +
                OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.WaterHeaterMixed', "For #{water_heater_mixed.name}, skin-loss UA = #{ua_w_per_k} W/K.")
         
     | 
| 
       174 
174 
     | 
    
         | 
| 
       175 
175 
     | 
    
         
             
                # Set the water heater properties
         
     | 
| 
       176 
176 
     | 
    
         
             
                # Efficiency
         
     | 
| 
       177 
177 
     | 
    
         
             
                water_heater_mixed.setHeaterThermalEfficiency(water_heater_eff)
         
     | 
| 
       178 
178 
     | 
    
         
             
                # Skin loss
         
     | 
| 
       179 
     | 
    
         
            -
                water_heater_mixed.setOffCycleLossCoefficienttoAmbientTemperature( 
     | 
| 
       180 
     | 
    
         
            -
                water_heater_mixed.setOnCycleLossCoefficienttoAmbientTemperature( 
     | 
| 
      
 179 
     | 
    
         
            +
                water_heater_mixed.setOffCycleLossCoefficienttoAmbientTemperature(ua_w_per_k)
         
     | 
| 
      
 180 
     | 
    
         
            +
                water_heater_mixed.setOnCycleLossCoefficienttoAmbientTemperature(ua_w_per_k)
         
     | 
| 
       181 
181 
     | 
    
         
             
                # @todo Parasitic loss (pilot light)
         
     | 
| 
       182 
182 
     | 
    
         
             
                # PNNL document says pilot lights were removed, but IDFs
         
     | 
| 
       183 
183 
     | 
    
         
             
                # still have the on/off cycle parasitic fuel consumptions filled in
         
     | 
| 
         @@ -190,7 +190,7 @@ class Standard 
     | 
|
| 
       190 
190 
     | 
    
         | 
| 
       191 
191 
     | 
    
         
             
                # Append the name with standards information
         
     | 
| 
       192 
192 
     | 
    
         
             
                water_heater_mixed.setName("#{water_heater_mixed.name} #{water_heater_eff.round(3)} Therm Eff")
         
     | 
| 
       193 
     | 
    
         
            -
                OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.WaterHeaterMixed', "For #{template}: #{water_heater_mixed.name}; thermal efficiency = #{water_heater_eff.round(3)}, skin-loss UA = #{ua_btu_per_hr_per_f.round}Btu/hr")
         
     | 
| 
      
 193 
     | 
    
         
            +
                OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.WaterHeaterMixed', "For #{template}: #{water_heater_mixed.name}; thermal efficiency = #{water_heater_eff.round(3)}, skin-loss UA = #{ua_btu_per_hr_per_f.round}Btu/hr-R")
         
     | 
| 
       194 
194 
     | 
    
         | 
| 
       195 
195 
     | 
    
         
             
                return true
         
     | 
| 
       196 
196 
     | 
    
         
             
              end
         
     | 
| 
         @@ -9,7 +9,7 @@ 
     | 
|
| 
       9 
9 
     | 
    
         
             
                  "emergency_canopies": null,
         
     | 
| 
       10 
10 
     | 
    
         
             
                  "canopy_size": null,
         
     | 
| 
       11 
11 
     | 
    
         
             
                  "floor_area_per_drive_through_window": null,
         
     | 
| 
       12 
     | 
    
         
            -
                  "notes": "match  
     | 
| 
      
 12 
     | 
    
         
            +
                  "notes": "match SecondarySchool"
         
     | 
| 
       13 
13 
     | 
    
         
             
                },
         
     | 
| 
       14 
14 
     | 
    
         
             
                {
         
     | 
| 
       15 
15 
     | 
    
         
             
                  "building_type": "Courthouse",
         
     | 
| 
         @@ -20,7 +20,7 @@ 
     | 
|
| 
       20 
20 
     | 
    
         
             
                  "emergency_canopies": null,
         
     | 
| 
       21 
21 
     | 
    
         
             
                  "canopy_size": null,
         
     | 
| 
       22 
22 
     | 
    
         
             
                  "floor_area_per_drive_through_window": null,
         
     | 
| 
       23 
     | 
    
         
            -
                  "notes": "match  
     | 
| 
      
 23 
     | 
    
         
            +
                  "notes": "match MediumOffice"
         
     | 
| 
       24 
24 
     | 
    
         
             
                },
         
     | 
| 
       25 
25 
     | 
    
         
             
                {
         
     | 
| 
       26 
26 
     | 
    
         
             
                  "building_type": "FullServiceRestaurant",
         
     | 
| 
         @@ -55,6 +55,17 @@ 
     | 
|
| 
       55 
55 
     | 
    
         
             
                  "floor_area_per_drive_through_window": null,
         
     | 
| 
       56 
56 
     | 
    
         
             
                  "notes": "No source for canopy size, Table 5.41. Exterior Lighting Savings Summary for Addendum 90.1-07i  doesn't indicate canopy lighting. Section 5.4.2 Exterior Lights in U.S. Department of Energy Commercial Reference Building Models of the National Building Stock shows their use."
         
     | 
| 
       57 
57 
     | 
    
         
             
                },
         
     | 
| 
      
 58 
     | 
    
         
            +
                {
         
     | 
| 
      
 59 
     | 
    
         
            +
                  "building_type": "Laboratory",
         
     | 
| 
      
 60 
     | 
    
         
            +
                  "rollup_doors_per_10,000": 0.0,
         
     | 
| 
      
 61 
     | 
    
         
            +
                  "entrance_doors_per_10,000": 2.0,
         
     | 
| 
      
 62 
     | 
    
         
            +
                  "others_doors_per_10,000": 2.45,
         
     | 
| 
      
 63 
     | 
    
         
            +
                  "entrance_canopies": null,
         
     | 
| 
      
 64 
     | 
    
         
            +
                  "emergency_canopies": null,
         
     | 
| 
      
 65 
     | 
    
         
            +
                  "canopy_size": null,
         
     | 
| 
      
 66 
     | 
    
         
            +
                  "floor_area_per_drive_through_window": null,
         
     | 
| 
      
 67 
     | 
    
         
            +
                  "notes": "match SecondarySchool"
         
     | 
| 
      
 68 
     | 
    
         
            +
                },
         
     | 
| 
       58 
69 
     | 
    
         
             
                {
         
     | 
| 
       59 
70 
     | 
    
         
             
                  "building_type": "LargeDataCenterHighITE",
         
     | 
| 
       60 
71 
     | 
    
         
             
                  "rollup_doors_per_10,000": null,
         
     | 
| 
         @@ -7,7 +7,7 @@ 
     | 
|
| 
       7 
7 
     | 
    
         
             
                  "students_per_spot": null,
         
     | 
| 
       8 
8 
     | 
    
         
             
                  "beds_per_spot": null,
         
     | 
| 
       9 
9 
     | 
    
         
             
                  "parking_area_per_spot": 405.0,
         
     | 
| 
       10 
     | 
    
         
            -
                  "notes": " 
     | 
| 
      
 10 
     | 
    
         
            +
                  "notes": "match MediumOffice"
         
     | 
| 
       11 
11 
     | 
    
         
             
                },
         
     | 
| 
       12 
12 
     | 
    
         
             
                {
         
     | 
| 
       13 
13 
     | 
    
         
             
                  "building_type": "Courthouse",
         
     | 
| 
         @@ -16,7 +16,7 @@ 
     | 
|
| 
       16 
16 
     | 
    
         
             
                  "students_per_spot": null,
         
     | 
| 
       17 
17 
     | 
    
         
             
                  "beds_per_spot": null,
         
     | 
| 
       18 
18 
     | 
    
         
             
                  "parking_area_per_spot": 405.0,
         
     | 
| 
       19 
     | 
    
         
            -
                  "notes": " 
     | 
| 
      
 19 
     | 
    
         
            +
                  "notes": "match MediumOffice"
         
     | 
| 
       20 
20 
     | 
    
         
             
                },
         
     | 
| 
       21 
21 
     | 
    
         
             
                {
         
     | 
| 
       22 
22 
     | 
    
         
             
                  "building_type": "FullServiceRestaurant",
         
     | 
| 
         @@ -45,6 +45,15 @@ 
     | 
|
| 
       45 
45 
     | 
    
         
             
                  "parking_area_per_spot": 405.0,
         
     | 
| 
       46 
46 
     | 
    
         
             
                  "notes": "Based on Table 4.17 Illuminated Parking Area from Achieving the 30% Goal: Energy and Cost Savings Analysis of ASHRAE Standard 90.1-2010"
         
     | 
| 
       47 
47 
     | 
    
         
             
                },
         
     | 
| 
      
 48 
     | 
    
         
            +
                {
         
     | 
| 
      
 49 
     | 
    
         
            +
                  "building_type": "Laboratory",
         
     | 
| 
      
 50 
     | 
    
         
            +
                  "building_area_per_spot": 250.0,
         
     | 
| 
      
 51 
     | 
    
         
            +
                  "units_per_spot": null,
         
     | 
| 
      
 52 
     | 
    
         
            +
                  "students_per_spot": null,
         
     | 
| 
      
 53 
     | 
    
         
            +
                  "beds_per_spot": null,
         
     | 
| 
      
 54 
     | 
    
         
            +
                  "parking_area_per_spot": 405.0,
         
     | 
| 
      
 55 
     | 
    
         
            +
                  "notes": "match MediumOffice"
         
     | 
| 
      
 56 
     | 
    
         
            +
                },
         
     | 
| 
       48 
57 
     | 
    
         
             
                {
         
     | 
| 
       49 
58 
     | 
    
         
             
                  "building_type": "LargeDataCenterHighITE",
         
     | 
| 
       50 
59 
     | 
    
         
             
                  "building_area_per_spot": 0.0,
         
     | 
| 
         @@ -222,7 +222,7 @@ class NECB2011 
     | 
|
| 
       222 
222 
     | 
    
         | 
| 
       223 
223 
     | 
    
         
             
                # Append the name with standards information
         
     | 
| 
       224 
224 
     | 
    
         
             
                water_heater_mixed.setName("#{water_heater_mixed.name} #{water_heater_eff.round(3)} Therm Eff")
         
     | 
| 
       225 
     | 
    
         
            -
                OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.WaterHeaterMixed', "For #{template}: #{water_heater_mixed.name}; thermal efficiency = #{water_heater_eff.round(3)}, skin-loss UA = #{ua_btu_per_hr_per_f.round}Btu/hr")
         
     | 
| 
      
 225 
     | 
    
         
            +
                OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.WaterHeaterMixed', "For #{template}: #{water_heater_mixed.name}; thermal efficiency = #{water_heater_eff.round(3)}, skin-loss UA = #{ua_btu_per_hr_per_f.round}Btu/hr-R")
         
     | 
| 
       226 
226 
     | 
    
         
             
                return true
         
     | 
| 
       227 
227 
     | 
    
         
             
              end
         
     | 
| 
       228 
228 
     | 
    
         | 
| 
         @@ -153,7 +153,7 @@ class NECB2020 
     | 
|
| 
       153 
153 
     | 
    
         | 
| 
       154 
154 
     | 
    
         
             
                # Append the name with standards information
         
     | 
| 
       155 
155 
     | 
    
         
             
                water_heater_mixed.setName("#{water_heater_mixed.name} #{water_heater_eff.round(3)} Therm Eff")
         
     | 
| 
       156 
     | 
    
         
            -
                OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.WaterHeaterMixed', "For #{template}: #{water_heater_mixed.name}; thermal efficiency = #{water_heater_eff.round(3)}, skin-loss UA = #{ua_btu_per_hr_per_f.round}Btu/hr")
         
     | 
| 
      
 156 
     | 
    
         
            +
                OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.WaterHeaterMixed', "For #{template}: #{water_heater_mixed.name}; thermal efficiency = #{water_heater_eff.round(3)}, skin-loss UA = #{ua_btu_per_hr_per_f.round}Btu/hr-R")
         
     | 
| 
       157 
157 
     | 
    
         
             
                return true
         
     | 
| 
       158 
158 
     | 
    
         
             
              end
         
     | 
| 
       159 
159 
     | 
    
         
             
            end
         
     | 
| 
         @@ -98,6 +98,11 @@ class Standard 
     | 
|
| 
       98 
98 
     | 
    
         
             
                  weather_dir = File.expand_path(File.join(Dir.pwd, 'extracted_files/weather/'))
         
     | 
| 
       99 
99 
     | 
    
         
             
                  OpenStudio.logFree(OpenStudio::Info, 'openstudio.weather.Model', "Extracting weather files from OpenStudio CLI to #{weather_dir}")
         
     | 
| 
       100 
100 
     | 
    
         
             
                  FileUtils.mkdir_p(weather_dir)
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
                  path_length = "#{weather_dir}/#{weather_file_name}".length
         
     | 
| 
      
 103 
     | 
    
         
            +
                  if path_length > 260
         
     | 
| 
      
 104 
     | 
    
         
            +
                    OpenStudio.logFree(OpenStudio::Warn, 'openstudio.weather.Model', "Weather file path length #{path_length} is >260 characters and may cause issues in Windows environments.")
         
     | 
| 
      
 105 
     | 
    
         
            +
                  end
         
     | 
| 
       101 
106 
     | 
    
         
             
                  File.open("#{weather_dir}/#{weather_file_name}", 'wb') { |f| f << epw_string; f.flush }
         
     | 
| 
       102 
107 
     | 
    
         
             
                  File.open("#{weather_dir}/#{weather_file_name.gsub('.epw', '.ddy')}", 'wb') { |f| f << ddy_string; f.flush }
         
     | 
| 
       103 
108 
     | 
    
         
             
                  File.open("#{weather_dir}/#{weather_file_name.gsub('.epw', '.stat')}", 'wb') { |f| f << stat_string; f.flush }
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: openstudio-standards
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.3.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Andrew Parker
         
     | 
| 
         @@ -28,7 +28,7 @@ authors: 
     | 
|
| 
       28 
28 
     | 
    
         
             
            autorequire:
         
     | 
| 
       29 
29 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       30 
30 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       31 
     | 
    
         
            -
            date: 2022- 
     | 
| 
      
 31 
     | 
    
         
            +
            date: 2022-11-03 00:00:00.000000000 Z
         
     | 
| 
       32 
32 
     | 
    
         
             
            dependencies:
         
     | 
| 
       33 
33 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       34 
34 
     | 
    
         
             
              name: minitest-reporters
         
     |