openstudio-standards 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (120) hide show
  1. checksums.yaml +4 -4
  2. data/data/standards/OpenStudio_Standards.xlsx +0 -0
  3. data/data/standards/OpenStudio_Standards_boilers.json +62 -4
  4. data/data/standards/OpenStudio_Standards_chillers.json +778 -68
  5. data/data/standards/OpenStudio_Standards_construction_sets.json +52 -93
  6. data/data/standards/OpenStudio_Standards_curve_biquadratics.json +36 -36
  7. data/data/standards/OpenStudio_Standards_curve_quadratics.json +3 -3
  8. data/data/standards/OpenStudio_Standards_heat_pumps.json +840 -0
  9. data/data/standards/OpenStudio_Standards_heat_pumps_heating.json +352 -0
  10. data/data/standards/OpenStudio_Standards_heat_rejection.json +48 -0
  11. data/data/standards/OpenStudio_Standards_motors.json +270 -0
  12. data/data/standards/OpenStudio_Standards_space_types.json +10390 -2824
  13. data/data/standards/OpenStudio_Standards_unitary_acs.json +794 -18
  14. data/data/weather/USA_CO_Boulder-Broomfield-Jefferson.County.AP.724699_TMY3.ddy +538 -0
  15. data/data/weather/USA_CO_Boulder-Broomfield-Jefferson.County.AP.724699_TMY3.epw +8768 -0
  16. data/data/weather/USA_CO_Boulder-Broomfield-Jefferson.County.AP.724699_TMY3.stat +493 -0
  17. data/data/weather/USA_CO_Denver.Intl.AP.725650_TMY3.ddy +536 -0
  18. data/data/weather/USA_CO_Denver.Intl.AP.725650_TMY3.epw +8768 -0
  19. data/data/weather/USA_CO_Denver.Intl.AP.725650_TMY3.stat +554 -0
  20. data/data/weather/USA_CO_Fort.Collins.AWOS.724769_TMY3.ddy +536 -0
  21. data/data/weather/USA_CO_Fort.Collins.AWOS.724769_TMY3.epw +8768 -0
  22. data/data/weather/USA_CO_Fort.Collins.AWOS.724769_TMY3.stat +554 -0
  23. data/data/weather/envelope_info.csv +6 -0
  24. data/lib/openstudio-standards.rb +10 -11
  25. data/lib/openstudio-standards/btap/compliance.rb +251 -969
  26. data/lib/openstudio-standards/btap/envelope.rb +1 -1
  27. data/lib/openstudio-standards/btap/fileio.rb +37 -5
  28. data/lib/openstudio-standards/btap/geometry.rb +27 -17
  29. data/lib/openstudio-standards/btap/hvac.rb +80 -27
  30. data/lib/openstudio-standards/hvac_sizing/{HVACSizing.CoilHeatingDXMultiSpeed.rb → Siz.CoilHeatingDXMultiSpeed.rb} +0 -0
  31. data/lib/openstudio-standards/hvac_sizing/Siz.ControllerOutdoorAir.rb +30 -4
  32. data/lib/openstudio-standards/hvac_sizing/Siz.CoolingTowerTwoSpeed.rb +61 -5
  33. data/lib/openstudio-standards/hvac_sizing/Siz.CoolingTowerVariableSpeed.rb +37 -7
  34. data/lib/openstudio-standards/hvac_sizing/Siz.DistrictCooling.rb +27 -0
  35. data/lib/openstudio-standards/hvac_sizing/Siz.DistrictHeating.rb +27 -0
  36. data/lib/openstudio-standards/hvac_sizing/Siz.HeaderedPumpsConstantSpeed.rb +55 -0
  37. data/lib/openstudio-standards/hvac_sizing/Siz.HeaderedPumpsVariableSpeed.rb +55 -0
  38. data/lib/openstudio-standards/hvac_sizing/Siz.HeatingCoolingFuels.rb +51 -9
  39. data/lib/openstudio-standards/hvac_sizing/Siz.Model.rb +99 -17
  40. data/lib/openstudio-standards/hvac_sizing/Siz.PumpConstantSpeed.rb +1 -1
  41. data/lib/openstudio-standards/hvac_sizing/Siz.ThermalZone.rb +29 -6
  42. data/lib/openstudio-standards/hvac_sizing/Siz.WaterHeaterMixed.rb +16 -0
  43. data/lib/openstudio-standards/prototypes/Prototype.AirTerminalSingleDuctVAVReheat.rb +43 -48
  44. data/lib/openstudio-standards/prototypes/Prototype.ControllerWaterCoil.rb +5 -9
  45. data/lib/openstudio-standards/prototypes/Prototype.Fan.rb +68 -0
  46. data/lib/openstudio-standards/prototypes/Prototype.FanConstantVolume.rb +39 -43
  47. data/lib/openstudio-standards/prototypes/Prototype.FanOnOff.rb +49 -51
  48. data/lib/openstudio-standards/prototypes/Prototype.FanVariableVolume.rb +55 -61
  49. data/lib/openstudio-standards/prototypes/Prototype.FanZoneExhaust.rb +8 -10
  50. data/lib/openstudio-standards/prototypes/Prototype.HeatExchangerAirToAirSensibleAndLatent.rb +15 -20
  51. data/lib/openstudio-standards/prototypes/Prototype.Model.hvac.rb +330 -322
  52. data/lib/openstudio-standards/prototypes/Prototype.Model.rb +501 -446
  53. data/lib/openstudio-standards/prototypes/Prototype.Model.swh.rb +221 -230
  54. data/lib/openstudio-standards/prototypes/Prototype.add_objects.rb +0 -2
  55. data/lib/openstudio-standards/prototypes/Prototype.full_service_restaurant.rb +130 -137
  56. data/lib/openstudio-standards/prototypes/Prototype.high_rise_apartment.rb +374 -291
  57. data/lib/openstudio-standards/prototypes/Prototype.hospital.rb +146 -193
  58. data/lib/openstudio-standards/prototypes/Prototype.hvac_systems.rb +1315 -1113
  59. data/lib/openstudio-standards/prototypes/Prototype.large_hotel.rb +65 -88
  60. data/lib/openstudio-standards/prototypes/Prototype.large_office.rb +101 -156
  61. data/lib/openstudio-standards/prototypes/Prototype.medium_office.rb +46 -96
  62. data/lib/openstudio-standards/prototypes/Prototype.mid_rise_apartment.rb +113 -123
  63. data/lib/openstudio-standards/prototypes/Prototype.outpatient.rb +356 -345
  64. data/lib/openstudio-standards/prototypes/Prototype.primary_school.rb +48 -103
  65. data/lib/openstudio-standards/prototypes/Prototype.quick_service_restaurant.rb +115 -123
  66. data/lib/openstudio-standards/prototypes/Prototype.retail_standalone.rb +30 -39
  67. data/lib/openstudio-standards/prototypes/Prototype.retail_stripmall.rb +32 -45
  68. data/lib/openstudio-standards/prototypes/Prototype.secondary_school.rb +98 -258
  69. data/lib/openstudio-standards/prototypes/Prototype.small_hotel.rb +429 -474
  70. data/lib/openstudio-standards/prototypes/Prototype.small_office.rb +28 -36
  71. data/lib/openstudio-standards/prototypes/Prototype.strip_model.rb +7 -7
  72. data/lib/openstudio-standards/prototypes/Prototype.utilities.rb +172 -146
  73. data/lib/openstudio-standards/prototypes/Prototype.warehouse.rb +46 -53
  74. data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +885 -707
  75. data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctParallelPIUReheat.rb +48 -57
  76. data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctVAVReheat.rb +24 -31
  77. data/lib/openstudio-standards/standards/Standards.BoilerHotWater.rb +80 -93
  78. data/lib/openstudio-standards/standards/Standards.BuildingStory.rb +69 -0
  79. data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +60 -72
  80. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb +104 -108
  81. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +190 -198
  82. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +134 -146
  83. data/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb +56 -60
  84. data/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +151 -161
  85. data/lib/openstudio-standards/standards/Standards.CoilHeatingGasMultiStage.rb +30 -34
  86. data/lib/openstudio-standards/standards/Standards.Construction.rb +116 -132
  87. data/lib/openstudio-standards/standards/Standards.CoolingTower.rb +138 -0
  88. data/lib/openstudio-standards/standards/Standards.CoolingTowerSingleSpeed.rb +11 -0
  89. data/lib/openstudio-standards/standards/Standards.CoolingTowerTwoSpeed.rb +11 -0
  90. data/lib/openstudio-standards/standards/Standards.CoolingTowerVariableSpeed.rb +16 -0
  91. data/lib/openstudio-standards/standards/Standards.Fan.rb +190 -236
  92. data/lib/openstudio-standards/standards/Standards.FanConstantVolume.rb +0 -2
  93. data/lib/openstudio-standards/standards/Standards.FanOnOff.rb +0 -2
  94. data/lib/openstudio-standards/standards/Standards.FanVariableVolume.rb +168 -14
  95. data/lib/openstudio-standards/standards/Standards.FanZoneExhaust.rb +0 -2
  96. data/lib/openstudio-standards/standards/Standards.HeaderedPumpsConstantSpeed.rb +33 -0
  97. data/lib/openstudio-standards/standards/Standards.HeaderedPumpsVariableSpeed.rb +83 -0
  98. data/lib/openstudio-standards/standards/Standards.HeatExchangerSensLat.rb +22 -0
  99. data/lib/openstudio-standards/standards/Standards.Model.rb +2385 -1622
  100. data/lib/openstudio-standards/standards/Standards.PlanarSurface.rb +83 -35
  101. data/lib/openstudio-standards/standards/Standards.PlantLoop.rb +805 -395
  102. data/lib/openstudio-standards/standards/Standards.Pump.rb +139 -119
  103. data/lib/openstudio-standards/standards/Standards.PumpConstantSpeed.rb +0 -2
  104. data/lib/openstudio-standards/standards/Standards.PumpVariableSpeed.rb +16 -15
  105. data/lib/openstudio-standards/standards/Standards.ScheduleCompact.rb +35 -0
  106. data/lib/openstudio-standards/standards/Standards.ScheduleConstant.rb +7 -13
  107. data/lib/openstudio-standards/standards/Standards.ScheduleRuleset.rb +144 -59
  108. data/lib/openstudio-standards/standards/Standards.Space.rb +1509 -1326
  109. data/lib/openstudio-standards/standards/Standards.SpaceType.rb +254 -262
  110. data/lib/openstudio-standards/standards/Standards.SubSurface.rb +105 -105
  111. data/lib/openstudio-standards/standards/Standards.Surface.rb +27 -31
  112. data/lib/openstudio-standards/standards/Standards.ThermalZone.rb +882 -157
  113. data/lib/openstudio-standards/standards/Standards.WaterHeaterMixed.rb +179 -69
  114. data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +75 -0
  115. data/lib/openstudio-standards/utilities/logging.rb +31 -38
  116. data/lib/openstudio-standards/utilities/simulation.rb +118 -82
  117. data/lib/openstudio-standards/version.rb +1 -1
  118. data/lib/openstudio-standards/weather/Weather.Model.rb +382 -390
  119. data/lib/openstudio-standards/weather/Weather.stat_file.rb +159 -78
  120. metadata +59 -6
@@ -195,7 +195,7 @@ module BTAP
195
195
  thickness = 0.1 ,
196
196
  conductivity = 0.1 ,
197
197
  density = 0.1,
198
- specific_heat = 0.1,
198
+ specific_heat = 100,
199
199
  roughness = "Smooth",
200
200
  thermal_absorptance = 0.9,
201
201
  solar_absorptance = 0.7,
@@ -21,7 +21,7 @@
21
21
  require "#{File.dirname(__FILE__)}/btap"
22
22
  require 'fileutils'
23
23
  require 'csv'
24
- require 'rubygems'
24
+ #require 'rubygems'
25
25
 
26
26
 
27
27
  module BTAP
@@ -160,6 +160,8 @@ module BTAP
160
160
  end
161
161
 
162
162
 
163
+
164
+
163
165
 
164
166
  # This method loads an Openstudio file into the model.
165
167
  # @author Phylroy A. Lopez
@@ -229,10 +231,40 @@ module BTAP
229
231
  # @return [OpenStudio::Model::Model] a copy of the OpenStudio model object.
230
232
  def self.deep_copy(model,bool = true)
231
233
  return model.clone(bool).to_Model
232
- # model.save(OpenStudio::Path.new("deep_copy.osm"))
233
- # model_copy = self.load_osm("deep_copy.osm")
234
- # File.delete("deep_copy.osm")
235
- # return model_copy
234
+
235
+ # pull original weather file object over
236
+ weather_file = new_model.getOptionalWeatherFile
237
+ if not weather_file.empty?
238
+ weather_file.get.remove
239
+ BTAP::runner_register("Info", "Removed alternate model's weather file object.",runner)
240
+ end
241
+ original_weather_file = model.getOptionalWeatherFile
242
+ if not original_weather_file.empty?
243
+ original_weather_file.get.clone(new_model)
244
+ end
245
+
246
+ # pull original design days over
247
+ new_model.getDesignDays.each { |designDay|
248
+ designDay.remove
249
+ }
250
+ model.getDesignDays.each { |designDay|
251
+ designDay.clone(new_model)
252
+ }
253
+
254
+ # swap underlying data in model with underlying data in new_model
255
+ # remove existing objects from model
256
+ handles = OpenStudio::UUIDVector.new
257
+ model.objects.each do |obj|
258
+ handles << obj.handle
259
+ end
260
+ model.removeObjects(handles)
261
+ # add new file to empty model
262
+ model.addObjects( new_model.toIdfFile.objects )
263
+ BTAP::runner_register("Info", "Model name is now #{model.building.get.name}.", runner)
264
+
265
+
266
+
267
+
236
268
  end
237
269
 
238
270
  # This method will save the model to an osm file.
@@ -1206,12 +1206,16 @@ module BTAP
1206
1206
  def self.create_shape_rectangle(model,
1207
1207
  length = 100.0,
1208
1208
  width = 100.0,
1209
- num_floors = 3,
1209
+ above_ground_storys = 3,
1210
+ under_ground_storys = 1,
1210
1211
  floor_to_floor_height = 3.8,
1211
1212
  plenum_height = 1,
1212
- perimeter_zone_depth = 4.57
1213
+ perimeter_zone_depth = 4.57,
1214
+ initial_height = 0.0
1213
1215
  )
1214
-
1216
+
1217
+
1218
+
1215
1219
  if length <= 1e-4
1216
1220
  raise("Length must be greater than 0.")
1217
1221
  return false
@@ -1222,7 +1226,7 @@ module BTAP
1222
1226
  return false
1223
1227
  end
1224
1228
 
1225
- if num_floors <= 1e-4
1229
+ if (above_ground_storys + under_ground_storys) <= 1e-4
1226
1230
  raise("Number of floors must be greater than 0.")
1227
1231
  return false
1228
1232
  end
@@ -1243,20 +1247,17 @@ module BTAP
1243
1247
  return false
1244
1248
  end
1245
1249
 
1246
- # # Create progress bar
1247
- # runner.createProgressBar("Creating Spaces")
1248
- # num_total = perimeter_zone_depth>0 ? num_floors*5 : num_floors
1249
- # num_complete = 0
1250
-
1250
+ building_stories = Array.new
1251
1251
  #Loop through the number of floors
1252
- for floor in (0..num_floors-1)
1252
+ for floor in ((under_ground_storys * -1)..above_ground_storys-1)
1253
1253
 
1254
- z = floor_to_floor_height * floor
1254
+ z = floor_to_floor_height * floor + initial_height
1255
1255
 
1256
1256
  #Create a new story within the building
1257
1257
  story = OpenStudio::Model::BuildingStory.new(model)
1258
1258
  story.setNominalFloortoFloorHeight(floor_to_floor_height)
1259
1259
  story.setName("Story #{floor+1}")
1260
+ building_stories << story
1260
1261
 
1261
1262
 
1262
1263
  nw_point = OpenStudio::Point3d.new(0,width,z)
@@ -1386,12 +1387,17 @@ module BTAP
1386
1387
 
1387
1388
  #Set vertical story position
1388
1389
  story.setNominalZCoordinate(z)
1390
+
1391
+ #Ensure that underground stories (when z<0 have Ground set as Boundary conditions.
1392
+ BTAP::Geometry::Surfaces::set_surfaces_boundary_condition(model,BTAP::Geometry::Surfaces::get_surfaces_from_building_stories(model, story), "Ground") if z <= 0
1393
+ BTAP::Geometry::Surfaces::set_surfaces_boundary_condition(model,BTAP::Geometry::Surfaces::get_surfaces_from_building_stories(model, story), "Outdoors") if z > 0
1389
1394
 
1395
+
1390
1396
  end #End of floor loop
1391
1397
 
1392
1398
  # runner.destroyProgressBar
1393
1399
  BTAP::Geometry::match_surfaces(model)
1394
- return model
1400
+ return building_stories
1395
1401
  end
1396
1402
 
1397
1403
  def self.create_shape_t(model,
@@ -2246,7 +2252,7 @@ module BTAP
2246
2252
  if space_obj.buildingStory.empty?
2247
2253
 
2248
2254
  story = getStoryForNominalZCoordinate(model, space_minz)
2249
- puts("Setting story of Space " + space_obj.name.get + " to " + story.name.get + ".")
2255
+ #puts("Setting story of Space " + space_obj.name.get + " to " + story.name.get + ".")
2250
2256
  space_obj.setBuildingStory(story)
2251
2257
  end
2252
2258
  end
@@ -2378,7 +2384,9 @@ module BTAP
2378
2384
 
2379
2385
 
2380
2386
  def self.is_perimeter_space?(model,space)
2381
- return Array.new(BTAP::Common::validate_array(model,space,"Space").first.surfaces).filterByBoundaryConditions(["Outdoors","Ground",
2387
+ exterior_surfaces = BTAP::Geometry::Surfaces::filter_by_boundary_condition(space.surfaces,
2388
+ ["Outdoors",
2389
+ "Ground",
2382
2390
  "GroundFCfactorMethod",
2383
2391
  "GroundSlabPreprocessorAverage",
2384
2392
  "GroundSlabPreprocessorCore",
@@ -2386,7 +2394,9 @@ module BTAP
2386
2394
  "GroundBasementPreprocessorAverageWall",
2387
2395
  "GroundBasementPreprocessorAverageFloor",
2388
2396
  "GroundBasementPreprocessorUpperWall",
2389
- "GroundBasementPreprocessorLowerWall"]).size > 0
2397
+ "GroundBasementPreprocessorLowerWall"])
2398
+
2399
+ return BTAP::Geometry::Surfaces::filter_by_surface_types(exterior_surfaces,["Wall"]).size > 0
2390
2400
 
2391
2401
  end
2392
2402
  def self.show(model,space)
@@ -2621,9 +2631,9 @@ module BTAP
2621
2631
  return surfaces
2622
2632
  end
2623
2633
 
2624
- def self.get_surfaces_from_building_stories(story_array)
2634
+ def self.get_surfaces_from_building_stories(model, story_array)
2625
2635
  surfaces = Array.new()
2626
- get_spaces_from_storeys(story_array).each do |space|
2636
+ BTAP::Geometry::Spaces::get_spaces_from_storeys(model, story_array).each do |space|
2627
2637
  surfaces.concat(space.surfaces())
2628
2638
  end
2629
2639
  return surfaces
@@ -2356,7 +2356,7 @@ module BTAP
2356
2356
  # boiler_fueltype choices match OS choices for Boiler component fuel type, i.e.
2357
2357
  # "NaturalGas","Electricity","PropaneGas","FuelOil#1","FuelOil#2","Coal","Diesel","Gasoline","OtherFuel1"
2358
2358
 
2359
- # Some system parameters are set after system is set up; by applying method 'applyHVACEfficiencyStandard'
2359
+ # Some system parameters are set after system is set up; by applying method 'apply_hvac_efficiency_standard'
2360
2360
 
2361
2361
 
2362
2362
  always_on = model.alwaysOnDiscreteSchedule
@@ -2395,10 +2395,10 @@ module BTAP
2395
2395
  air_loop_sizing.setMinimumSystemAirFlowRatio(1.0)
2396
2396
  air_loop_sizing.setPreheatDesignTemperature(7.0)
2397
2397
  air_loop_sizing.setPreheatDesignHumidityRatio(0.008)
2398
- air_loop_sizing.setPrecoolDesignTemperature(12.8)
2398
+ air_loop_sizing.setPrecoolDesignTemperature(13.0)
2399
2399
  air_loop_sizing.setPrecoolDesignHumidityRatio(0.008)
2400
- air_loop_sizing.setCentralCoolingDesignSupplyAirTemperature(12.8)
2401
- air_loop_sizing.setCentralHeatingDesignSupplyAirTemperature(40.0)
2400
+ air_loop_sizing.setCentralCoolingDesignSupplyAirTemperature(13.0)
2401
+ air_loop_sizing.setCentralHeatingDesignSupplyAirTemperature(43.0)
2402
2402
  air_loop_sizing.setSizingOption("NonCoincident")
2403
2403
  air_loop_sizing.setAllOutdoorAirinCooling(false)
2404
2404
  air_loop_sizing.setAllOutdoorAirinHeating(false)
@@ -2473,6 +2473,13 @@ module BTAP
2473
2473
 
2474
2474
  zones.each do |zone|
2475
2475
 
2476
+ # Zone sizing temperature
2477
+ sizing_zone = zone.sizingZone
2478
+ sizing_zone.setZoneCoolingDesignSupplyAirTemperature(13.0)
2479
+ sizing_zone.setZoneHeatingDesignSupplyAirTemperature(43.0)
2480
+ sizing_zone.setZoneCoolingSizingFactor(1.1)
2481
+ sizing_zone.setZoneHeatingSizingFactor(1.3)
2482
+
2476
2483
  # Set up PTAC heating coil; apply always off schedule
2477
2484
 
2478
2485
  # htg_coil_elec = OpenStudio::Model::CoilHeatingElectric.new(model,always_on)
@@ -2552,7 +2559,7 @@ module BTAP
2552
2559
  # boiler_fueltype choices match OS choices for Boiler component fuel type, i.e.
2553
2560
  # "NaturalGas","Electricity","PropaneGas","FuelOil#1","FuelOil#2","Coal","Diesel","Gasoline","OtherFuel1"
2554
2561
 
2555
- # Some system parameters are set after system is set up; by applying method 'applyHVACEfficiencyStandard'
2562
+ # Some system parameters are set after system is set up; by applying method 'apply_hvac_efficiency_standard'
2556
2563
 
2557
2564
 
2558
2565
  always_on = model.alwaysOnDiscreteSchedule
@@ -2614,8 +2621,8 @@ module BTAP
2614
2621
  air_loop_sizing.setPreheatDesignHumidityRatio(0.008)
2615
2622
  air_loop_sizing.setPrecoolDesignTemperature(12.8)
2616
2623
  air_loop_sizing.setPrecoolDesignHumidityRatio(0.008)
2617
- air_loop_sizing.setCentralCoolingDesignSupplyAirTemperature(12.8)
2618
- air_loop_sizing.setCentralHeatingDesignSupplyAirTemperature(40.0)
2624
+ air_loop_sizing.setCentralCoolingDesignSupplyAirTemperature(13.0)
2625
+ air_loop_sizing.setCentralHeatingDesignSupplyAirTemperature(43.0)
2619
2626
  air_loop_sizing.setSizingOption("NonCoincident")
2620
2627
  air_loop_sizing.setAllOutdoorAirinCooling(false)
2621
2628
  air_loop_sizing.setAllOutdoorAirinHeating(false)
@@ -2714,6 +2721,13 @@ module BTAP
2714
2721
 
2715
2722
  zones.each do |zone|
2716
2723
 
2724
+ # Zone sizing temperature
2725
+ sizing_zone = zone.sizingZone
2726
+ sizing_zone.setZoneCoolingDesignSupplyAirTemperature(13.0)
2727
+ sizing_zone.setZoneHeatingDesignSupplyAirTemperature(43.0)
2728
+ sizing_zone.setZoneCoolingSizingFactor(1.1)
2729
+ sizing_zone.setZoneHeatingSizingFactor(1.3)
2730
+
2717
2731
  # Set up PTAC heating coil; apply always off schedule
2718
2732
 
2719
2733
  # htg_coil_elec = OpenStudio::Model::CoilHeatingElectric.new(model,always_on)
@@ -2877,10 +2891,10 @@ module BTAP
2877
2891
  air_loop_sizing.setMinimumSystemAirFlowRatio(1.0)
2878
2892
  air_loop_sizing.setPreheatDesignTemperature(7.0)
2879
2893
  air_loop_sizing.setPreheatDesignHumidityRatio(0.008)
2880
- air_loop_sizing.setPrecoolDesignTemperature(12.8)
2894
+ air_loop_sizing.setPrecoolDesignTemperature(13.0)
2881
2895
  air_loop_sizing.setPrecoolDesignHumidityRatio(0.008)
2882
2896
  air_loop_sizing.setCentralCoolingDesignSupplyAirTemperature(13.0)
2883
- air_loop_sizing.setCentralHeatingDesignSupplyAirTemperature(12.8)
2897
+ air_loop_sizing.setCentralHeatingDesignSupplyAirTemperature(13.1)
2884
2898
  air_loop_sizing.setSizingOption("NonCoincident")
2885
2899
  air_loop_sizing.setAllOutdoorAirinCooling(false)
2886
2900
  air_loop_sizing.setAllOutdoorAirinHeating(false)
@@ -2926,14 +2940,21 @@ module BTAP
2926
2940
  # TO DO: need to have method to pick appropriate control zone?
2927
2941
 
2928
2942
  setpoint_mgr_single_zone_reheat = OpenStudio::Model::SetpointManagerSingleZoneReheat.new(model)
2929
- setpoint_mgr_single_zone_reheat.setMinimumSupplyAirTemperature(12.8)
2930
- setpoint_mgr_single_zone_reheat.setMaximumSupplyAirTemperature(13.0)
2943
+ setpoint_mgr_single_zone_reheat.setMinimumSupplyAirTemperature(13.0)
2944
+ setpoint_mgr_single_zone_reheat.setMaximumSupplyAirTemperature(13.1)
2931
2945
  setpoint_mgr_single_zone_reheat.addToNode(air_loop.supplyOutletNode)
2932
2946
 
2933
2947
  # Set up FC (ZoneHVAC,cooling coil, heating coil, fan) in each zone
2934
2948
 
2935
2949
  zones.each do |zone|
2936
2950
 
2951
+ # Zone sizing temperature
2952
+ sizing_zone = zone.sizingZone
2953
+ sizing_zone.setZoneCoolingDesignSupplyAirTemperature(13.0)
2954
+ sizing_zone.setZoneHeatingDesignSupplyAirTemperature(43.0)
2955
+ sizing_zone.setZoneCoolingSizingFactor(1.1)
2956
+ sizing_zone.setZoneHeatingSizingFactor(1.3)
2957
+
2937
2958
  # fc supply fan
2938
2959
  fc_fan = OpenStudio::Model::FanConstantVolume.new(model, always_on)
2939
2960
 
@@ -3007,10 +3028,10 @@ module BTAP
3007
3028
  air_loop_sizing.setMinimumSystemAirFlowRatio(1.0)
3008
3029
  air_loop_sizing.setPreheatDesignTemperature(7.0)
3009
3030
  air_loop_sizing.setPreheatDesignHumidityRatio(0.008)
3010
- air_loop_sizing.setPrecoolDesignTemperature(12.8)
3031
+ air_loop_sizing.setPrecoolDesignTemperature(13.0)
3011
3032
  air_loop_sizing.setPrecoolDesignHumidityRatio(0.008)
3012
- air_loop_sizing.setCentralCoolingDesignSupplyAirTemperature(12.8)
3013
- air_loop_sizing.setCentralHeatingDesignSupplyAirTemperature(40)
3033
+ air_loop_sizing.setCentralCoolingDesignSupplyAirTemperature(13.0)
3034
+ air_loop_sizing.setCentralHeatingDesignSupplyAirTemperature(43)
3014
3035
  air_loop_sizing.setSizingOption("NonCoincident")
3015
3036
  air_loop_sizing.setAllOutdoorAirinCooling(false)
3016
3037
  air_loop_sizing.setAllOutdoorAirinHeating(false)
@@ -3022,6 +3043,13 @@ module BTAP
3022
3043
  air_loop_sizing.setHeatingDesignAirFlowRate(0.0)
3023
3044
  air_loop_sizing.setSystemOutdoorAirMethod("ZoneSum")
3024
3045
 
3046
+ # Zone sizing temperature
3047
+ sizing_zone = zone.sizingZone
3048
+ sizing_zone.setZoneCoolingDesignSupplyAirTemperature(13.0)
3049
+ sizing_zone.setZoneHeatingDesignSupplyAirTemperature(43.0)
3050
+ sizing_zone.setZoneCoolingSizingFactor(1.1)
3051
+ sizing_zone.setZoneHeatingSizingFactor(1.3)
3052
+
3025
3053
  fan = OpenStudio::Model::FanConstantVolume.new(model, always_on)
3026
3054
 
3027
3055
  case heating_coil_type
@@ -3035,7 +3063,9 @@ module BTAP
3035
3063
  htg_coil = OpenStudio::Model::CoilHeatingDXSingleSpeed.new(model)
3036
3064
  supplemental_htg_coil = OpenStudio::Model::CoilHeatingElectric.new(model,always_on)
3037
3065
  htg_coil.setMinimumOutdoorDryBulbTemperatureforCompressorOperation(-10.0)
3038
-
3066
+ sizing_zone.setZoneHeatingSizingFactor(1.3)
3067
+ sizing_zone.setZoneCoolingSizingFactor(1.0)
3068
+ puts 'test1111'
3039
3069
  else
3040
3070
  raise("#{heating_coil_type} is not a valid heating coil type.)")
3041
3071
  end
@@ -3165,10 +3195,10 @@ module BTAP
3165
3195
  air_loop_sizing.setMinimumSystemAirFlowRatio(1.0)
3166
3196
  air_loop_sizing.setPreheatDesignTemperature(7.0)
3167
3197
  air_loop_sizing.setPreheatDesignHumidityRatio(0.008)
3168
- air_loop_sizing.setPrecoolDesignTemperature(12.8)
3198
+ air_loop_sizing.setPrecoolDesignTemperature(13.0)
3169
3199
  air_loop_sizing.setPrecoolDesignHumidityRatio(0.008)
3170
- air_loop_sizing.setCentralCoolingDesignSupplyAirTemperature(12.8)
3171
- air_loop_sizing.setCentralHeatingDesignSupplyAirTemperature(40.0)
3200
+ air_loop_sizing.setCentralCoolingDesignSupplyAirTemperature(13.0)
3201
+ air_loop_sizing.setCentralHeatingDesignSupplyAirTemperature(43.0)
3172
3202
  air_loop_sizing.setSizingOption("NonCoincident")
3173
3203
  air_loop_sizing.setAllOutdoorAirinCooling(false)
3174
3204
  air_loop_sizing.setAllOutdoorAirinHeating(false)
@@ -3180,6 +3210,13 @@ module BTAP
3180
3210
  air_loop_sizing.setHeatingDesignAirFlowRate(0.0)
3181
3211
  air_loop_sizing.setSystemOutdoorAirMethod("ZoneSum")
3182
3212
 
3213
+ # Zone sizing temperature
3214
+ sizing_zone = zone.sizingZone
3215
+ sizing_zone.setZoneCoolingDesignSupplyAirTemperature(13.0)
3216
+ sizing_zone.setZoneHeatingDesignSupplyAirTemperature(43.0)
3217
+ sizing_zone.setZoneCoolingSizingFactor(1.1)
3218
+ sizing_zone.setZoneHeatingSizingFactor(1.3)
3219
+
3183
3220
  fan = OpenStudio::Model::FanConstantVolume.new(model, always_on)
3184
3221
 
3185
3222
  staged_thermostat = OpenStudio::Model::ZoneControlThermostatStagedDualSetpoint.new(model)
@@ -3214,7 +3251,8 @@ module BTAP
3214
3251
  htg_stage_3 = OpenStudio::Model::CoilHeatingDXMultiSpeedStageData.new(model)
3215
3252
  htg_stage_4 = OpenStudio::Model::CoilHeatingDXMultiSpeedStageData.new(model)
3216
3253
  supplemental_htg_coil = OpenStudio::Model::CoilHeatingElectric.new(model,always_on)
3217
-
3254
+ sizing_zone.setZoneHeatingSizingFactor(1.3)
3255
+ sizing_zone.setZoneCoolingSizingFactor(1.0)
3218
3256
  else
3219
3257
  raise("#{heating_coil_type} is not a valid heating coil type.)")
3220
3258
  end
@@ -3342,10 +3380,10 @@ module BTAP
3342
3380
  air_loop_sizing.setMinimumSystemAirFlowRatio(1.0)
3343
3381
  air_loop_sizing.setPreheatDesignTemperature(7.0)
3344
3382
  air_loop_sizing.setPreheatDesignHumidityRatio(0.008)
3345
- air_loop_sizing.setPrecoolDesignTemperature(12.8)
3383
+ air_loop_sizing.setPrecoolDesignTemperature(13.0)
3346
3384
  air_loop_sizing.setPrecoolDesignHumidityRatio(0.008)
3347
- air_loop_sizing.setCentralCoolingDesignSupplyAirTemperature(12.8)
3348
- air_loop_sizing.setCentralHeatingDesignSupplyAirTemperature(40.0)
3385
+ air_loop_sizing.setCentralCoolingDesignSupplyAirTemperature(13.0)
3386
+ air_loop_sizing.setCentralHeatingDesignSupplyAirTemperature(43.0)
3349
3387
  air_loop_sizing.setSizingOption("NonCoincident")
3350
3388
  air_loop_sizing.setAllOutdoorAirinCooling(false)
3351
3389
  air_loop_sizing.setAllOutdoorAirinHeating(false)
@@ -3357,6 +3395,13 @@ module BTAP
3357
3395
  air_loop_sizing.setHeatingDesignAirFlowRate(0.0)
3358
3396
  air_loop_sizing.setSystemOutdoorAirMethod("ZoneSum")
3359
3397
 
3398
+ # Zone sizing temperature
3399
+ sizing_zone = zone.sizingZone
3400
+ sizing_zone.setZoneCoolingDesignSupplyAirTemperature(13.0)
3401
+ sizing_zone.setZoneHeatingDesignSupplyAirTemperature(43.0)
3402
+ sizing_zone.setZoneCoolingSizingFactor(1.1)
3403
+ sizing_zone.setZoneHeatingSizingFactor(1.3)
3404
+
3360
3405
  fan = OpenStudio::Model::FanConstantVolume.new(model, always_on)
3361
3406
 
3362
3407
 
@@ -3491,13 +3536,13 @@ module BTAP
3491
3536
  air_loop = OpenStudio::Model::AirLoopHVAC.new(model)
3492
3537
  air_loop.setName("VAV with Reheat")
3493
3538
  sizingSystem = air_loop.sizingSystem
3494
- sizingSystem.setCentralCoolingDesignSupplyAirTemperature(14.0)
3495
- sizingSystem.setCentralHeatingDesignSupplyAirTemperature(14.0)
3539
+ sizingSystem.setCentralCoolingDesignSupplyAirTemperature(13.0)
3540
+ sizingSystem.setCentralHeatingDesignSupplyAirTemperature(13.1)
3496
3541
  sizingSystem.autosizeDesignOutdoorAirFlowRate
3497
3542
  sizingSystem.setMinimumSystemAirFlowRatio(0.3)
3498
3543
  sizingSystem.setPreheatDesignTemperature(7.0)
3499
3544
  sizingSystem.setPreheatDesignHumidityRatio(0.008)
3500
- sizingSystem.setPrecoolDesignTemperature(14.0)
3545
+ sizingSystem.setPrecoolDesignTemperature(13.0)
3501
3546
  sizingSystem.setPrecoolDesignHumidityRatio(0.008)
3502
3547
  sizingSystem.setSizingOption("NonCoincident")
3503
3548
  sizingSystem.setAllOutdoorAirinCooling(false)
@@ -3543,7 +3588,7 @@ module BTAP
3543
3588
 
3544
3589
  # Add a setpoint manager to control the
3545
3590
  # supply air to a constant temperature
3546
- sat_c = 14.0
3591
+ sat_c = 13.0
3547
3592
  sat_sch = OpenStudio::Model::ScheduleRuleset.new(model)
3548
3593
  sat_sch.setName("Supply Air Temp")
3549
3594
  sat_sch.defaultDaySchedule().setName("Supply Air Temp Default")
@@ -3556,6 +3601,14 @@ module BTAP
3556
3601
  # Make a VAV terminal with HW reheat for each zone on this story that is in intersection with the zones array.
3557
3602
  # and hook the reheat coil to the HW loop
3558
3603
  ( BTAP::Geometry::BuildingStoreys::get_zones_from_storey(story) & zones).each do |zone|
3604
+
3605
+ # Zone sizing parameters
3606
+ sizing_zone = zone.sizingZone
3607
+ sizing_zone.setZoneCoolingDesignSupplyAirTemperature(13.0)
3608
+ sizing_zone.setZoneHeatingDesignSupplyAirTemperature(43.0)
3609
+ sizing_zone.setZoneCoolingSizingFactor(1.1)
3610
+ sizing_zone.setZoneHeatingSizingFactor(1.3)
3611
+
3559
3612
  if(heating_coil_type == "Hot Water")
3560
3613
  reheat_coil = OpenStudio::Model::CoilHeatingWater.new(model,always_on)
3561
3614
  hw_loop.addDemandBranchForComponent(reheat_coil)
@@ -3570,7 +3623,7 @@ module BTAP
3570
3623
  #TODO: schedule based on whether the zone is occupied or not as stipulated in 8.4.4.22 of NECB2011
3571
3624
  min_flow_rate = 0.002*zone.floorArea
3572
3625
  vav_terminal.setFixedMinimumAirFlowRate(min_flow_rate)
3573
- vav_terminal.setMaximumReheatAirTemperature(40)
3626
+ vav_terminal.setMaximumReheatAirTemperature(43)
3574
3627
 
3575
3628
  #Set zone baseboards
3576
3629
  if ( baseboard_type == "Electric") then
@@ -33,11 +33,37 @@ class OpenStudio::Model::ControllerOutdoorAir
33
33
  end
34
34
 
35
35
  # returns the autosized minimum outdoor air flow rate as an optional double
36
+ # EnergyPlus has a "bug" where if the system is a multizone system,
37
+ # the Minimum Outdoor Air Flow Rate reported in the Component Sizing
38
+ # summary does not include zone multipliers.
39
+ # @todo determine what to do when the airloop has multiple zones
40
+ # with different multipliers
36
41
  def autosizedMinimumOutdoorAirFlowRate
37
42
 
38
- return self.model.getAutosizedValue(self, 'Minimum Outdoor Air Flow Rate', 'm3/s')
39
-
43
+ oa = self.model.getAutosizedValue(self, 'Minimum Outdoor Air Flow Rate', 'm3/s')
44
+
45
+ # Get the airloop connected to this controller
46
+ if airLoopHVACOutdoorAirSystem.empty?
47
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.Siz.ControllerOutdoorAir', "#{name} is not connected to an airLoopHVACOutdoorAirSystem, cannot determine autosizedMinimumOutdoorAirFlowRate accuractely.")
48
+ return oa
49
+ end
50
+ oa_sys = airLoopHVACOutdoorAirSystem.get
51
+ if oa_sys.airLoop.empty?
52
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.Siz.ControllerOutdoorAir', "#{name}'s airLoopHVACOutdoorAirSystem is not assigned to an AirLoop, cannot determine autosizedMinimumOutdoorAirFlowRate accuractely.")
53
+ return oa
54
+ end
55
+ air_loop = oa_sys.airLoop.get
56
+
57
+ # If it is a multizone system, get the system multiplier
58
+ # to work around the bug in EnergyPlus.
59
+ if air_loop.multizone_vav_system?
60
+ if oa.is_initialized
61
+ oa_val = oa.get
62
+ oa_val *= air_loop.system_multiplier
63
+ oa = OpenStudio::OptionalDouble.new(oa_val)
64
+ end
65
+ end
66
+
67
+ return oa
40
68
  end
41
-
42
-
43
69
  end