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.
- checksums.yaml +4 -4
- data/data/standards/OpenStudio_Standards.xlsx +0 -0
- data/data/standards/OpenStudio_Standards_boilers.json +62 -4
- data/data/standards/OpenStudio_Standards_chillers.json +778 -68
- data/data/standards/OpenStudio_Standards_construction_sets.json +52 -93
- data/data/standards/OpenStudio_Standards_curve_biquadratics.json +36 -36
- data/data/standards/OpenStudio_Standards_curve_quadratics.json +3 -3
- data/data/standards/OpenStudio_Standards_heat_pumps.json +840 -0
- data/data/standards/OpenStudio_Standards_heat_pumps_heating.json +352 -0
- data/data/standards/OpenStudio_Standards_heat_rejection.json +48 -0
- data/data/standards/OpenStudio_Standards_motors.json +270 -0
- data/data/standards/OpenStudio_Standards_space_types.json +10390 -2824
- data/data/standards/OpenStudio_Standards_unitary_acs.json +794 -18
- data/data/weather/USA_CO_Boulder-Broomfield-Jefferson.County.AP.724699_TMY3.ddy +538 -0
- data/data/weather/USA_CO_Boulder-Broomfield-Jefferson.County.AP.724699_TMY3.epw +8768 -0
- data/data/weather/USA_CO_Boulder-Broomfield-Jefferson.County.AP.724699_TMY3.stat +493 -0
- data/data/weather/USA_CO_Denver.Intl.AP.725650_TMY3.ddy +536 -0
- data/data/weather/USA_CO_Denver.Intl.AP.725650_TMY3.epw +8768 -0
- data/data/weather/USA_CO_Denver.Intl.AP.725650_TMY3.stat +554 -0
- data/data/weather/USA_CO_Fort.Collins.AWOS.724769_TMY3.ddy +536 -0
- data/data/weather/USA_CO_Fort.Collins.AWOS.724769_TMY3.epw +8768 -0
- data/data/weather/USA_CO_Fort.Collins.AWOS.724769_TMY3.stat +554 -0
- data/data/weather/envelope_info.csv +6 -0
- data/lib/openstudio-standards.rb +10 -11
- data/lib/openstudio-standards/btap/compliance.rb +251 -969
- data/lib/openstudio-standards/btap/envelope.rb +1 -1
- data/lib/openstudio-standards/btap/fileio.rb +37 -5
- data/lib/openstudio-standards/btap/geometry.rb +27 -17
- data/lib/openstudio-standards/btap/hvac.rb +80 -27
- data/lib/openstudio-standards/hvac_sizing/{HVACSizing.CoilHeatingDXMultiSpeed.rb → Siz.CoilHeatingDXMultiSpeed.rb} +0 -0
- data/lib/openstudio-standards/hvac_sizing/Siz.ControllerOutdoorAir.rb +30 -4
- data/lib/openstudio-standards/hvac_sizing/Siz.CoolingTowerTwoSpeed.rb +61 -5
- data/lib/openstudio-standards/hvac_sizing/Siz.CoolingTowerVariableSpeed.rb +37 -7
- data/lib/openstudio-standards/hvac_sizing/Siz.DistrictCooling.rb +27 -0
- data/lib/openstudio-standards/hvac_sizing/Siz.DistrictHeating.rb +27 -0
- data/lib/openstudio-standards/hvac_sizing/Siz.HeaderedPumpsConstantSpeed.rb +55 -0
- data/lib/openstudio-standards/hvac_sizing/Siz.HeaderedPumpsVariableSpeed.rb +55 -0
- data/lib/openstudio-standards/hvac_sizing/Siz.HeatingCoolingFuels.rb +51 -9
- data/lib/openstudio-standards/hvac_sizing/Siz.Model.rb +99 -17
- data/lib/openstudio-standards/hvac_sizing/Siz.PumpConstantSpeed.rb +1 -1
- data/lib/openstudio-standards/hvac_sizing/Siz.ThermalZone.rb +29 -6
- data/lib/openstudio-standards/hvac_sizing/Siz.WaterHeaterMixed.rb +16 -0
- data/lib/openstudio-standards/prototypes/Prototype.AirTerminalSingleDuctVAVReheat.rb +43 -48
- data/lib/openstudio-standards/prototypes/Prototype.ControllerWaterCoil.rb +5 -9
- data/lib/openstudio-standards/prototypes/Prototype.Fan.rb +68 -0
- data/lib/openstudio-standards/prototypes/Prototype.FanConstantVolume.rb +39 -43
- data/lib/openstudio-standards/prototypes/Prototype.FanOnOff.rb +49 -51
- data/lib/openstudio-standards/prototypes/Prototype.FanVariableVolume.rb +55 -61
- data/lib/openstudio-standards/prototypes/Prototype.FanZoneExhaust.rb +8 -10
- data/lib/openstudio-standards/prototypes/Prototype.HeatExchangerAirToAirSensibleAndLatent.rb +15 -20
- data/lib/openstudio-standards/prototypes/Prototype.Model.hvac.rb +330 -322
- data/lib/openstudio-standards/prototypes/Prototype.Model.rb +501 -446
- data/lib/openstudio-standards/prototypes/Prototype.Model.swh.rb +221 -230
- data/lib/openstudio-standards/prototypes/Prototype.add_objects.rb +0 -2
- data/lib/openstudio-standards/prototypes/Prototype.full_service_restaurant.rb +130 -137
- data/lib/openstudio-standards/prototypes/Prototype.high_rise_apartment.rb +374 -291
- data/lib/openstudio-standards/prototypes/Prototype.hospital.rb +146 -193
- data/lib/openstudio-standards/prototypes/Prototype.hvac_systems.rb +1315 -1113
- data/lib/openstudio-standards/prototypes/Prototype.large_hotel.rb +65 -88
- data/lib/openstudio-standards/prototypes/Prototype.large_office.rb +101 -156
- data/lib/openstudio-standards/prototypes/Prototype.medium_office.rb +46 -96
- data/lib/openstudio-standards/prototypes/Prototype.mid_rise_apartment.rb +113 -123
- data/lib/openstudio-standards/prototypes/Prototype.outpatient.rb +356 -345
- data/lib/openstudio-standards/prototypes/Prototype.primary_school.rb +48 -103
- data/lib/openstudio-standards/prototypes/Prototype.quick_service_restaurant.rb +115 -123
- data/lib/openstudio-standards/prototypes/Prototype.retail_standalone.rb +30 -39
- data/lib/openstudio-standards/prototypes/Prototype.retail_stripmall.rb +32 -45
- data/lib/openstudio-standards/prototypes/Prototype.secondary_school.rb +98 -258
- data/lib/openstudio-standards/prototypes/Prototype.small_hotel.rb +429 -474
- data/lib/openstudio-standards/prototypes/Prototype.small_office.rb +28 -36
- data/lib/openstudio-standards/prototypes/Prototype.strip_model.rb +7 -7
- data/lib/openstudio-standards/prototypes/Prototype.utilities.rb +172 -146
- data/lib/openstudio-standards/prototypes/Prototype.warehouse.rb +46 -53
- data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +885 -707
- data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctParallelPIUReheat.rb +48 -57
- data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctVAVReheat.rb +24 -31
- data/lib/openstudio-standards/standards/Standards.BoilerHotWater.rb +80 -93
- data/lib/openstudio-standards/standards/Standards.BuildingStory.rb +69 -0
- data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +60 -72
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb +104 -108
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +190 -198
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +134 -146
- data/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb +56 -60
- data/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +151 -161
- data/lib/openstudio-standards/standards/Standards.CoilHeatingGasMultiStage.rb +30 -34
- data/lib/openstudio-standards/standards/Standards.Construction.rb +116 -132
- data/lib/openstudio-standards/standards/Standards.CoolingTower.rb +138 -0
- data/lib/openstudio-standards/standards/Standards.CoolingTowerSingleSpeed.rb +11 -0
- data/lib/openstudio-standards/standards/Standards.CoolingTowerTwoSpeed.rb +11 -0
- data/lib/openstudio-standards/standards/Standards.CoolingTowerVariableSpeed.rb +16 -0
- data/lib/openstudio-standards/standards/Standards.Fan.rb +190 -236
- data/lib/openstudio-standards/standards/Standards.FanConstantVolume.rb +0 -2
- data/lib/openstudio-standards/standards/Standards.FanOnOff.rb +0 -2
- data/lib/openstudio-standards/standards/Standards.FanVariableVolume.rb +168 -14
- data/lib/openstudio-standards/standards/Standards.FanZoneExhaust.rb +0 -2
- data/lib/openstudio-standards/standards/Standards.HeaderedPumpsConstantSpeed.rb +33 -0
- data/lib/openstudio-standards/standards/Standards.HeaderedPumpsVariableSpeed.rb +83 -0
- data/lib/openstudio-standards/standards/Standards.HeatExchangerSensLat.rb +22 -0
- data/lib/openstudio-standards/standards/Standards.Model.rb +2385 -1622
- data/lib/openstudio-standards/standards/Standards.PlanarSurface.rb +83 -35
- data/lib/openstudio-standards/standards/Standards.PlantLoop.rb +805 -395
- data/lib/openstudio-standards/standards/Standards.Pump.rb +139 -119
- data/lib/openstudio-standards/standards/Standards.PumpConstantSpeed.rb +0 -2
- data/lib/openstudio-standards/standards/Standards.PumpVariableSpeed.rb +16 -15
- data/lib/openstudio-standards/standards/Standards.ScheduleCompact.rb +35 -0
- data/lib/openstudio-standards/standards/Standards.ScheduleConstant.rb +7 -13
- data/lib/openstudio-standards/standards/Standards.ScheduleRuleset.rb +144 -59
- data/lib/openstudio-standards/standards/Standards.Space.rb +1509 -1326
- data/lib/openstudio-standards/standards/Standards.SpaceType.rb +254 -262
- data/lib/openstudio-standards/standards/Standards.SubSurface.rb +105 -105
- data/lib/openstudio-standards/standards/Standards.Surface.rb +27 -31
- data/lib/openstudio-standards/standards/Standards.ThermalZone.rb +882 -157
- data/lib/openstudio-standards/standards/Standards.WaterHeaterMixed.rb +179 -69
- data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +75 -0
- data/lib/openstudio-standards/utilities/logging.rb +31 -38
- data/lib/openstudio-standards/utilities/simulation.rb +118 -82
- data/lib/openstudio-standards/version.rb +1 -1
- data/lib/openstudio-standards/weather/Weather.Model.rb +382 -390
- data/lib/openstudio-standards/weather/Weather.stat_file.rb +159 -78
- metadata +59 -6
@@ -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
|
-
|
233
|
-
#
|
234
|
-
|
235
|
-
|
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
|
-
|
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
|
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
|
-
|
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 (
|
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
|
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
|
-
|
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"])
|
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 '
|
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(
|
2398
|
+
air_loop_sizing.setPrecoolDesignTemperature(13.0)
|
2399
2399
|
air_loop_sizing.setPrecoolDesignHumidityRatio(0.008)
|
2400
|
-
air_loop_sizing.setCentralCoolingDesignSupplyAirTemperature(
|
2401
|
-
air_loop_sizing.setCentralHeatingDesignSupplyAirTemperature(
|
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 '
|
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(
|
2618
|
-
air_loop_sizing.setCentralHeatingDesignSupplyAirTemperature(
|
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(
|
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(
|
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(
|
2930
|
-
setpoint_mgr_single_zone_reheat.setMaximumSupplyAirTemperature(13.
|
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(
|
3031
|
+
air_loop_sizing.setPrecoolDesignTemperature(13.0)
|
3011
3032
|
air_loop_sizing.setPrecoolDesignHumidityRatio(0.008)
|
3012
|
-
air_loop_sizing.setCentralCoolingDesignSupplyAirTemperature(
|
3013
|
-
air_loop_sizing.setCentralHeatingDesignSupplyAirTemperature(
|
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(
|
3198
|
+
air_loop_sizing.setPrecoolDesignTemperature(13.0)
|
3169
3199
|
air_loop_sizing.setPrecoolDesignHumidityRatio(0.008)
|
3170
|
-
air_loop_sizing.setCentralCoolingDesignSupplyAirTemperature(
|
3171
|
-
air_loop_sizing.setCentralHeatingDesignSupplyAirTemperature(
|
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(
|
3383
|
+
air_loop_sizing.setPrecoolDesignTemperature(13.0)
|
3346
3384
|
air_loop_sizing.setPrecoolDesignHumidityRatio(0.008)
|
3347
|
-
air_loop_sizing.setCentralCoolingDesignSupplyAirTemperature(
|
3348
|
-
air_loop_sizing.setCentralHeatingDesignSupplyAirTemperature(
|
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(
|
3495
|
-
sizingSystem.setCentralHeatingDesignSupplyAirTemperature(
|
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(
|
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 =
|
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(
|
3626
|
+
vav_terminal.setMaximumReheatAirTemperature(43)
|
3574
3627
|
|
3575
3628
|
#Set zone baseboards
|
3576
3629
|
if ( baseboard_type == "Electric") then
|
File without changes
|
@@ -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
|
-
|
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
|