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
@@ -0,0 +1,6 @@
1
+ WeatherFile,HDD,FDWR,SRR,outdoor_walls_average_conductance,outdoor_roofs_average_conductance,outdoor_floors_average_conductance,ground_walls_average_conductances, ground_roofs_average_conductances, ground_floors_average_conductances,windows_average_conductance,skylights_average_conductance,doors_average_conductance,overhead_doors_average_conductance
2
+ CAN_BC_Vancouver.718920_CWEC.epw,2932,0.4,0.0499,0.315 ,0.227 , 0.227,0.568,0.568,0.757,2.4,2.4,2.4,2.4
3
+ CAN_ON_Toronto.716240_CWEC.epw,3956,0.4,0.0499,0.278 ,0.183 , 0.183,0.379,0.379,0.757,2.2,2.2,2.2,2.2
4
+ CAN_PQ_Sherbrooke.716100_CWEC.epw,5058,0.329,0.0499,0.21 ,0.162 , 0.162,0.284,0.284,0.757,2.2,2.2,2.2,2.2
5
+ CAN_YT_Whitehorse.719640_CWEC.epw,6803,0.213,0.0499,0.21 ,0.162 , 0.162,0.284,0.284,0.757,2.2,2.2,2.2,2.2
6
+ CAN_NU_Resolute.719240_CWEC.epw,12471,0.2,0.0499,0.183 ,0.142 , 0.142,0.21,0.21,0.379,1.6,1.6,1.6,1.6
@@ -1,27 +1,27 @@
1
- require "openstudio-standards/version"
1
+ require 'openstudio-standards/version'
2
2
 
3
3
  module OpenstudioStandards
4
-
4
+
5
5
  require 'json' # Used to load standards JSON files
6
-
6
+
7
7
  # HVAC sizing
8
- require 'openstudio-standards/hvac_sizing/Siz.Model'
8
+ require_relative 'openstudio-standards/hvac_sizing/Siz.Model'
9
9
 
10
10
  # Prototype Inputs
11
11
  require_relative 'openstudio-standards/prototypes/Prototype.Model'
12
12
  require_relative 'openstudio-standards/prototypes/Prototype.utilities'
13
13
  require_relative 'openstudio-standards/prototypes/Prototype.add_objects'
14
14
  require_relative 'openstudio-standards/prototypes/Prototype.hvac_systems'
15
-
15
+
16
16
  # Weather data
17
17
  require_relative 'openstudio-standards/weather/Weather.Model'
18
-
18
+
19
19
  # HVAC standards
20
20
  require_relative 'openstudio-standards/standards/Standards.Model'
21
-
21
+
22
22
  # BTAP (Natural Resources Canada)
23
23
  require_relative 'openstudio-standards/btap/btap'
24
-
24
+
25
25
  # Utilities
26
26
  require_relative 'openstudio-standards/utilities/logging'
27
27
  require_relative 'openstudio-standards/utilities/simulation'
@@ -30,7 +30,6 @@ module OpenstudioStandards
30
30
  # Load the Openstudio Standards JSON
31
31
  # and assign to a constant. This
32
32
  # should never be altered by the gem.
33
- $os_standards = load_openstudio_standards_json
34
-
35
-
33
+ # @Todo: A constant in ruby is $CONSTANT not $constant
34
+ $os_standards = load_openstudio_standards_json
36
35
  end
@@ -40,395 +40,8 @@ module BTAP
40
40
  GroundRoof = [0.568,0.379,0.284,0.284,0.284,0.210]
41
41
  GroundFloor = [0.757,0.757,0.757,0.757,0.757,0.379]
42
42
  end
43
-
44
-
45
- #NECB Weekday, Sat,Sun Schedules.
46
- Schedules = [
47
- ["NECB","A","Occ","Wkd","FRACTION",0,0,0,0,0,0,0,0.1,0.7,0.9,0.9,0.9,0.5,0.5,0.9,0.9,0.9,0.7,0.3,0.1,0.1,0.1,0.1,0],
48
- ["NECB","A","Occ","Sat","FRACTION",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
49
- ["NECB","A","Occ","SunHol","FRACTION",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
50
- ["NECB","A","Ltg","Wkd","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.3,0.8,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.8,0.5,0.3,0.3,0.1,0.1,0.05],
51
- ["NECB","A","Ltg","Sat","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05],
52
- ["NECB","A","Ltg","SunHol","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05],
53
- ["NECB","A","Equ","Wkd","FRACTION",0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.3,0.8,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.5,0.3,0.3,0.2,0.2,0.2],
54
- ["NECB","A","Equ","Sat","FRACTION",0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2],
55
- ["NECB","A","Equ","SunHol","FRACTION",0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2],
56
- ["NECB","A","Fan","Wkd","ON_OFF",0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0],
57
- ["NECB","A","Fan","Sat","ON_OFF",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
58
- ["NECB","A","Fan","SunHol","ON_OFF",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
59
- ["NECB","A","Proc","Wkd","FRACTION",0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.3,0.8,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.5,0.3,0.3,0.2,0.2,0.2],
60
- ["NECB","A","Proc","Sat","FRACTION",0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2],
61
- ["NECB","A","Proc","SunHol","FRACTION",0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2],
62
- ["NECB","A","Clg","Wkd","TEMPERATURE",35,35,35,35,35,35,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,35,35,35],
63
- ["NECB","A","Clg","Sat","TEMPERATURE",35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35],
64
- ["NECB","A","Clg","SunHol","TEMPERATURE",35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35],
65
- ["NECB","A","Htg","Wkd","TEMPERATURE",18,18,18,18,18,18,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,18,18,18],
66
- ["NECB","A","Htg","Sat","TEMPERATURE",18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18],
67
- ["NECB","A","Htg","SunHol","TEMPERATURE",18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18],
68
- ["NECB","A","HW","Wkd","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.1,0.5,0.5,0.9,0.9,0.9,0.9,0.9,0.9,0.7,0.5,0.3,0.2,0.2,0.2,0.05,0.05],
69
- ["NECB","A","HW","Sat","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05],
70
- ["NECB","A","HW","SunHol","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05],
71
- ["NECB","B","Occ","Wkd","FRACTION",0.3,0.1,0,0,0,0,0,0,0,0.1,0.2,0.5,0.9,0.8,0.5,0.2,0.2,0.3,0.6,0.9,0.9,0.9,0.6,0.4],
72
- ["NECB","B","Occ","Sat","FRACTION",0.5,0.3,0,0,0,0,0,0,0,0.1,0.2,0.5,0.9,0.8,0.5,0.2,0.2,0.3,0.6,0.9,0.9,0.9,0.6,0.6],
73
- ["NECB","B","Occ","SunHol","FRACTION",0.1,0.3,0,0,0,0,0,0,0,0,0.1,0.4,0.5,0.5,0.4,0.2,0.2,0.2,0.5,0.7,0.7,0.5,0.3,0.1],
74
- ["NECB","B","Ltg","Wkd","FRACTION",0.9,0.5,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.5,0.7,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9],
75
- ["NECB","B","Ltg","Sat","FRACTION",0.9,0.5,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.5,0.7,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9],
76
- ["NECB","B","Ltg","SunHol","FRACTION",0.5,0.5,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.5,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.5],
77
- ["NECB","B","Equ","Wkd","FRACTION",0.9,0.5,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.5,0.7,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9],
78
- ["NECB","B","Equ","Sat","FRACTION",0.9,0.5,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.5,0.7,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9],
79
- ["NECB","B","Equ","SunHol","FRACTION",0.5,0.5,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.5,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.5],
80
- ["NECB","B","Fan","Wkd","ON_OFF",1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
81
- ["NECB","B","Fan","Sat","ON_OFF",1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
82
- ["NECB","B","Fan","SunHol","ON_OFF",0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
83
- ["NECB","B","Proc","Wkd","FRACTION",0.9,0.5,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.5,0.7,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9],
84
- ["NECB","B","Proc","Sat","FRACTION",0.9,0.5,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.5,0.7,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9],
85
- ["NECB","B","Proc","SunHol","FRACTION",0.5,0.5,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.5,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.5],
86
- ["NECB","B","Clg","Wkd","TEMPERATURE",24,35,35,35,35,35,35,35,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24],
87
- ["NECB","B","Clg","Sat","TEMPERATURE",24,35,35,35,35,35,35,35,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24],
88
- ["NECB","B","Clg","SunHol","TEMPERATURE",35,35,35,35,35,35,35,35,35,24,24,24,24,24,24,24,24,24,24,24,24,24,24,35],
89
- ["NECB","B","Htg","Wkd","TEMPERATURE",22,22,18,18,18,18,18,18,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22],
90
- ["NECB","B","Htg","Sat","TEMPERATURE",22,22,18,18,18,18,18,18,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22],
91
- ["NECB","B","Htg","SunHol","TEMPERATURE",18,22,18,18,18,18,18,18,18,20,22,22,22,22,22,22,22,22,22,22,22,22,22,18],
92
- ["NECB","B","HW","Wkd","FRACTION",0.6,0.5,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.7,0.7,0.4,0.5,0.6,0.6,0.4,0.3,0.3,0.4,0.5,0.8,0.8,0.9,0.9],
93
- ["NECB","B","HW","Sat","FRACTION",0.7,0.6,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.7,0.7,0.4,0.5,0.6,0.6,0.4,0.3,0.3,0.4,0.5,0.8,0.8,0.9,0.9],
94
- ["NECB","B","HW","SunHol","FRACTION",0.5,0.6,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.7,0.7,0.4,0.5,0.6,0.6,0.4,0.3,0.3,0.4,0.5,0.8,0.8,0.5,0.5],
95
- ["NECB","C","Occ","Wkd","FRACTION",0,0,0,0,0,0,0,0,0.1,0.2,0.5,0.5,0.7,0.7,0.7,0.7,0.8,0.7,0.5,0.3,0.3,0,0,0],
96
- ["NECB","C","Occ","Sat","FRACTION",0,0,0,0,0,0,0,0,0.1,0.2,0.5,0.6,0.8,0.9,0.9,0.9,0.8,0.7,0.5,0.2,0.2,0,0,0],
97
- ["NECB","C","Occ","SunHol","FRACTION",0,0,0,0,0,0,0,0,0,0,0.1,0.2,0.2,0.4,0.4,0.4,0.4,0.4,0.2,0,0,0,0,0],
98
- ["NECB","C","Ltg","Wkd","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.5,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.6,0.5,0.05,0.05,0.05],
99
- ["NECB","C","Ltg","Sat","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.5,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.6,0.5,0.05,0.05,0.05],
100
- ["NECB","C","Ltg","SunHol","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.5,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.6,0.05,0.05,0.05,0.05,0.05],
101
- ["NECB","C","Equ","Wkd","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.5,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.6,0.5,0.05,0.05,0.05],
102
- ["NECB","C","Equ","Sat","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.5,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.6,0.5,0.05,0.05,0.05],
103
- ["NECB","C","Equ","SunHol","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.5,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.6,0.05,0.05,0.05,0.05,0.05],
104
- ["NECB","C","Fan","Wkd","ON_OFF",0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0],
105
- ["NECB","C","Fan","Sat","ON_OFF",0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0],
106
- ["NECB","C","Fan","SunHol","ON_OFF",0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0],
107
- ["NECB","C","Proc","Wkd","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.5,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.6,0.5,0.05,0.05,0.05],
108
- ["NECB","C","Proc","Sat","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.5,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.6,0.5,0.05,0.05,0.05],
109
- ["NECB","C","Proc","SunHol","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.5,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.6,0.05,0.05,0.05,0.05,0.05],
110
- ["NECB","C","Clg","Wkd","TEMPERATURE",35,35,35,35,35,35,35,24,24,24,24,24,24,24,24,24,24,24,24,24,24,35,35,35],
111
- ["NECB","C","Clg","Sat","TEMPERATURE",35,35,35,35,35,35,35,24,24,24,24,24,24,24,24,24,24,24,24,24,24,35,35,35],
112
- ["NECB","C","Clg","SunHol","TEMPERATURE",35,35,35,35,35,35,35,35,35,24,24,24,24,24,24,24,24,24,24,35,35,35,35,35],
113
- ["NECB","C","Htg","Wkd","TEMPERATURE",18,18,18,18,18,18,18,20,22,22,22,22,22,22,22,22,22,22,22,22,22,18,18,18],
114
- ["NECB","C","Htg","Sat","TEMPERATURE",18,18,18,18,18,18,18,20,22,22,22,22,22,22,22,22,22,22,22,22,22,18,18,18],
115
- ["NECB","C","Htg","SunHol","TEMPERATURE",18,18,18,18,18,18,18,18,18,20,22,22,22,22,22,22,22,22,22,18,18,18,18,18],
116
- ["NECB","C","HW","Wkd","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.1,0.2,0.3,0.4,0.8,0.8,0.8,0.8,0.6,0.4,0.3,0.2,0.2,0.05,0.05,0.05],
117
- ["NECB","C","HW","Sat","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.1,0.2,0.3,0.5,0.9,0.9,0.9,0.9,0.7,0.5,0.3,0.2,0.2,0.05,0.05,0.05],
118
- ["NECB","C","HW","SunHol","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.1,0.2,0.4,0.8,0.8,0.6,0.4,0.3,0.2,0.05,0.05,0.05,0.05,0.05],
119
- ["NECB","D","Occ","Wkd","FRACTION",0,0,0,0,0,0,0,0,0.1,0.9,0.9,0.9,0.8,0.8,0.8,0.8,0.5,0.2,0.1,0.3,0.3,0.3,0.1,0],
120
- ["NECB","D","Occ","Sat","FRACTION",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
121
- ["NECB","D","Occ","SunHol","FRACTION",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
122
- ["NECB","D","Ltg","Wkd","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.3,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.7,0.5,0.5,0.7,0.7,0.7,0.3,0.05],
123
- ["NECB","D","Ltg","Sat","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05],
124
- ["NECB","D","Ltg","SunHol","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05],
125
- ["NECB","D","Equ","Wkd","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.3,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.7,0.5,0.5,0.7,0.7,0.7,0.3,0.05],
126
- ["NECB","D","Equ","Sat","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05],
127
- ["NECB","D","Equ","SunHol","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05],
128
- ["NECB","D","Fan","Wkd","ON_OFF",0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
129
- ["NECB","D","Fan","Sat","ON_OFF",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
130
- ["NECB","D","Fan","SunHol","ON_OFF",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
131
- ["NECB","D","Proc","Wkd","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.3,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.7,0.5,0.5,0.7,0.7,0.7,0.3,0.05],
132
- ["NECB","D","Proc","Sat","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05],
133
- ["NECB","D","Proc","SunHol","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05],
134
- ["NECB","D","Clg","Wkd","TEMPERATURE",35,35,35,35,35,35,35,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,35],
135
- ["NECB","D","Clg","Sat","TEMPERATURE",35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35],
136
- ["NECB","D","Clg","SunHol","TEMPERATURE",35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35],
137
- ["NECB","D","Htg","Wkd","TEMPERATURE",18,18,18,18,18,18,18,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,18],
138
- ["NECB","D","Htg","Sat","TEMPERATURE",18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18],
139
- ["NECB","D","Htg","SunHol","TEMPERATURE",18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18],
140
- ["NECB","D","HW","Wkd","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.5,0.5,0.9,0.9,0.9,0.9,0.9,0.9,0.7,0.3,0.5,0.5,0.5,0.3,0.05,0.05],
141
- ["NECB","D","HW","Sat","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05],
142
- ["NECB","D","HW","SunHol","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05],
143
- ["NECB","E","Occ","Wkd","FRACTION",0,0,0,0,0,0,0,0,0.2,0.7,0.9,0.9,0.9,0.9,0.5,0.9,0.8,0.8,0.2,0,0,0,0,0],
144
- ["NECB","E","Occ","Sat","FRACTION",0,0,0,0,0,0,0,0,0,0.2,0.2,0.2,0.2,0.1,0.1,0.1,0.1,0,0,0,0,0,0,0],
145
- ["NECB","E","Occ","SunHol","FRACTION",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
146
- ["NECB","E","Ltg","Wkd","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.4,0.7,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.4,0.05,0.05,0.05,0.05,0.05],
147
- ["NECB","E","Ltg","Sat","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.5,0.9,0.9,0.9,0.9,0.9,0.7,0.5,0.05,0.05,0.05,0.05,0.05,0.05,0.05],
148
- ["NECB","E","Ltg","SunHol","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05],
149
- ["NECB","E","Equ","Wkd","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.4,0.7,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.4,0.05,0.05,0.05,0.05,0.05],
150
- ["NECB","E","Equ","Sat","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.5,0.9,0.9,0.9,0.9,0.9,0.7,0.5,0.05,0.05,0.05,0.05,0.05,0.05,0.05],
151
- ["NECB","E","Equ","SunHol","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05],
152
- ["NECB","E","Fan","Wkd","ON_OFF",0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0],
153
- ["NECB","E","Fan","Sat","ON_OFF",0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0],
154
- ["NECB","E","Fan","SunHol","ON_OFF",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
155
- ["NECB","E","Proc","Wkd","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.4,0.7,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.4,0.05,0.05,0.05,0.05,0.05],
156
- ["NECB","E","Proc","Sat","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.5,0.9,0.9,0.9,0.9,0.9,0.7,0.5,0.05,0.05,0.05,0.05,0.05,0.05,0.05],
157
- ["NECB","E","Proc","SunHol","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05],
158
- ["NECB","E","Clg","Wkd","TEMPERATURE",35,35,35,35,35,35,35,24,24,24,24,24,24,24,24,24,24,24,24,35,35,35,35,35],
159
- ["NECB","E","Clg","Sat","TEMPERATURE",35,35,35,35,35,35,35,35,24,24,24,24,24,24,24,24,24,35,35,35,35,35,35,35],
160
- ["NECB","E","Clg","SunHol","TEMPERATURE",35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35],
161
- ["NECB","E","Htg","Wkd","TEMPERATURE",18,18,18,18,18,18,18,20,22,22,22,22,22,22,22,22,22,22,22,18,18,18,18,18],
162
- ["NECB","E","Htg","Sat","TEMPERATURE",18,18,18,18,18,18,18,18,20,22,22,22,22,22,22,22,22,18,18,18,18,18,18,18],
163
- ["NECB","E","Htg","SunHol","TEMPERATURE",18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18],
164
- ["NECB","E","HW","Wkd","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.1,0.4,0.5,0.5,0.7,0.9,0.8,0.7,0.8,0.3,0.05,0.05,0.05,0.05,0.05,0.05],
165
- ["NECB","E","HW","Sat","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.2,0.2,0.4,0.2,0.2,0.2,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05],
166
- ["NECB","E","HW","SunHol","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05],
167
- ["NECB","F","Occ","Wkd","FRACTION",0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.7,0.4,0.4,0.2,0.2,0.2,0.2,0.2,0.2,0.3,0.5,0.5,0.5,0.7,0.7,0.8,0.9],
168
- ["NECB","F","Occ","Sat","FRACTION",0.7,0.9,0.9,0.9,0.9,0.9,0.9,0.7,0.5,0.5,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.5,0.6,0.6,0.6,0.7,0.7],
169
- ["NECB","F","Occ","SunHol","FRACTION",0.8,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.5,0.5,0.5,0.3,0.3,0.2,0.2,0.2,0.3,0.4,0.4,0.6,0.6,0.8,0.8],
170
- ["NECB","F","Ltg","Wkd","FRACTION",0.3,0.2,0.2,0.1,0.1,0.1,0.2,0.4,0.5,0.4,0.4,0.3,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.6,0.8,0.9,0.8,0.6],
171
- ["NECB","F","Ltg","Sat","FRACTION",0.3,0.2,0.2,0.1,0.1,0.1,0.1,0.3,0.3,0.4,0.4,0.3,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.6,0.7,0.7,0.7,0.6],
172
- ["NECB","F","Ltg","SunHol","FRACTION",0.3,0.3,0.3,0.2,0.2,0.2,0.2,0.3,0.4,0.4,0.3,0.3,0.3,0.3,0.2,0.2,0.2,0.2,0.2,0.5,0.7,0.8,0.6,0.5],
173
- ["NECB","F","Equ","Wkd","FRACTION",0.3,0.2,0.2,0.1,0.1,0.1,0.2,0.4,0.5,0.4,0.4,0.3,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.6,0.8,0.9,0.8,0.6],
174
- ["NECB","F","Equ","Sat","FRACTION",0.3,0.2,0.2,0.1,0.1,0.1,0.1,0.3,0.3,0.4,0.4,0.3,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.6,0.7,0.7,0.7,0.6],
175
- ["NECB","F","Equ","SunHol","FRACTION",0.3,0.3,0.3,0.2,0.2,0.2,0.2,0.3,0.4,0.4,0.3,0.3,0.3,0.3,0.2,0.2,0.2,0.2,0.2,0.5,0.7,0.8,0.6,0.5],
176
- ["NECB","F","Fan","Wkd","ON_OFF",1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
177
- ["NECB","F","Fan","Sat","ON_OFF",1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
178
- ["NECB","F","Fan","SunHol","ON_OFF",1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
179
- ["NECB","F","Proc","Wkd","FRACTION",0.3,0.2,0.2,0.1,0.1,0.1,0.2,0.4,0.5,0.4,0.4,0.3,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.6,0.8,0.9,0.8,0.6],
180
- ["NECB","F","Proc","Sat","FRACTION",0.3,0.2,0.2,0.1,0.1,0.1,0.1,0.3,0.3,0.4,0.4,0.3,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.6,0.7,0.7,0.7,0.6],
181
- ["NECB","F","Proc","SunHol","FRACTION",0.3,0.3,0.3,0.2,0.2,0.2,0.2,0.3,0.4,0.4,0.3,0.3,0.3,0.3,0.2,0.2,0.2,0.2,0.2,0.5,0.7,0.8,0.6,0.5],
182
- ["NECB","F","Clg","Wkd","TEMPERATURE",24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24],
183
- ["NECB","F","Clg","Sat","TEMPERATURE",24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24],
184
- ["NECB","F","Clg","SunHol","TEMPERATURE",24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24],
185
- ["NECB","F","Htg","Wkd","TEMPERATURE",22,18,18,18,18,18,18,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22],
186
- ["NECB","F","Htg","Sat","TEMPERATURE",22,18,18,18,18,18,18,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22],
187
- ["NECB","F","Htg","SunHol","TEMPERATURE",22,18,18,18,18,18,18,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22],
188
- ["NECB","F","HW","Wkd","FRACTION",0.5,0.3,0.2,0.1,0.1,0.2,0.4,0.6,0.9,0.7,0.5,0.5,0.4,0.5,0.4,0.3,0.3,0.3,0.3,0.5,0.7,0.7,0.7,0.7],
189
- ["NECB","F","HW","Sat","FRACTION",0.5,0.3,0.2,0.1,0.1,0.2,0.4,0.5,0.8,0.6,0.5,0.5,0.5,0.5,0.5,0.4,0.3,0.3,0.3,0.5,0.7,0.7,0.7,0.7],
190
- ["NECB","F","HW","SunHol","FRACTION",0.5,0.3,0.2,0.1,0.1,0.2,0.4,0.4,0.6,0.9,0.7,0.5,0.5,0.5,0.4,0.3,0.3,0.3,0.3,0.4,0.6,0.6,0.6,0.6],
191
- ["NECB","G","Occ","Wkd","FRACTION",0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.7,0.4,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.5,0.9,0.9,0.9,0.9,0.9,0.9],
192
- ["NECB","G","Occ","Sat","FRACTION",0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.7,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.7,0.9,0.9,0.9,0.9,0.9,0.9],
193
- ["NECB","G","Occ","SunHol","FRACTION",0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.7,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.7,0.9,0.9,0.9,0.9,0.9,0.9],
194
- ["NECB","G","Ltg","Wkd","FRACTION",0.3,0,0,0,0,0,0.2,0.5,0.5,0,0,0,0,0,0,0,0,0,0,0.9,0.9,0.9,0.8,0.6],
195
- ["NECB","G","Ltg","Sat","FRACTION",0.3,0,0,0,0,0,0.2,0.5,0.5,0,0,0,0,0,0,0,0,0,0,0.9,0.9,0.9,0.8,0.6],
196
- ["NECB","G","Ltg","SunHol","FRACTION",0.3,0,0,0,0,0,0.2,0.5,0.5,0,0,0,0,0,0,0,0,0,0,0.9,0.9,0.9,0.8,0.6],
197
- ["NECB","G","Equ","Wkd","FRACTION",0.3,0.2,0.2,0.2,0.2,0.2,0.2,0.8,0.8,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.5,0.2,0.9,0.9,0.7,0.5,0.5,0.5],
198
- ["NECB","G","Equ","Sat","FRACTION",0.3,0.2,0.2,0.2,0.2,0.2,0.2,0.8,0.8,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.5,0.2,0.9,0.9,0.7,0.5,0.5,0.5],
199
- ["NECB","G","Equ","SunHol","FRACTION",0.3,0.2,0.2,0.2,0.2,0.2,0.2,0.8,0.8,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.5,0.2,0.9,0.9,0.7,0.5,0.5,0.5],
200
- ["NECB","G","Fan","Wkd","ON_OFF",1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
201
- ["NECB","G","Fan","Sat","ON_OFF",1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
202
- ["NECB","G","Fan","SunHol","ON_OFF",1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
203
- ["NECB","G","Proc","Wkd","FRACTION",0.3,0.2,0.2,0.2,0.2,0.2,0.2,0.8,0.8,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.5,0.2,0.9,0.9,0.7,0.5,0.5,0.5],
204
- ["NECB","G","Proc","Sat","FRACTION",0.3,0.2,0.2,0.2,0.2,0.2,0.2,0.8,0.8,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.5,0.2,0.9,0.9,0.7,0.5,0.5,0.5],
205
- ["NECB","G","Proc","SunHol","FRACTION",0.3,0.2,0.2,0.2,0.2,0.2,0.2,0.8,0.8,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.5,0.2,0.9,0.9,0.7,0.5,0.5,0.5],
206
- ["NECB","G","Clg","Wkd","TEMPERATURE",24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24],
207
- ["NECB","G","Clg","Sat","TEMPERATURE",24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24],
208
- ["NECB","G","Clg","SunHol","TEMPERATURE",24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24],
209
- ["NECB","G","Htg","Wkd","TEMPERATURE",22,18,18,18,18,18,18,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22],
210
- ["NECB","G","Htg","Sat","TEMPERATURE",22,18,18,18,18,18,18,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22],
211
- ["NECB","G","Htg","SunHol","TEMPERATURE",22,18,18,18,18,18,18,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22],
212
- ["NECB","G","HW","Wkd","FRACTION",0.1,0.05,0.05,0.05,0.05,0.05,0.2,0.8,0.7,0.5,0.4,0.2,0.2,0.2,0.3,0.5,0.5,0.7,0.7,0.4,0.4,0.2,0.2,0.1],
213
- ["NECB","G","HW","Sat","FRACTION",0.1,0.05,0.05,0.05,0.05,0.05,0.05,0.2,0.5,0.5,0.5,0.3,0.3,0.3,0.3,0.7,0.9,0.7,0.7,0.6,0.5,0.4,0.3,0.2],
214
- ["NECB","G","HW","SunHol","FRACTION",0.1,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.2,0.3,0.3,0.2,0.2,0.3,0.4,0.5,0.6,0.7,0.4,0.3,0.2,0.2,0.2,0.2],
215
- ["NECB","H","Occ","Wkd","FRACTION",0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9],
216
- ["NECB","H","Occ","Sat","FRACTION",0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9],
217
- ["NECB","H","Occ","SunHol","FRACTION",0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9],
218
- ["NECB","H","Ltg","Wkd","FRACTION",0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9],
219
- ["NECB","H","Ltg","Sat","FRACTION",0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9],
220
- ["NECB","H","Ltg","SunHol","FRACTION",0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9],
221
- ["NECB","H","Equ","Wkd","FRACTION",0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9],
222
- ["NECB","H","Equ","Sat","FRACTION",0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9],
223
- ["NECB","H","Equ","SunHol","FRACTION",0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9],
224
- ["NECB","H","Fan","Wkd","ON_OFF",1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
225
- ["NECB","H","Fan","Sat","ON_OFF",1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
226
- ["NECB","H","Fan","SunHol","ON_OFF",1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
227
- ["NECB","H","Proc","Wkd","FRACTION",0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9],
228
- ["NECB","H","Proc","Sat","FRACTION",0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9],
229
- ["NECB","H","Proc","SunHol","FRACTION",0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9],
230
- ["NECB","H","Clg","Wkd","TEMPERATURE",24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24],
231
- ["NECB","H","Clg","Sat","TEMPERATURE",24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24],
232
- ["NECB","H","Clg","SunHol","TEMPERATURE",24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24],
233
- ["NECB","H","Htg","Wkd","TEMPERATURE",22,18,18,18,18,18,18,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22],
234
- ["NECB","H","Htg","Sat","TEMPERATURE",22,18,18,18,18,18,18,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22],
235
- ["NECB","H","Htg","SunHol","TEMPERATURE",22,18,18,18,18,18,18,20,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22],
236
- ["NECB","H","HW","Wkd","FRACTION",0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9],
237
- ["NECB","H","HW","Sat","FRACTION",0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9],
238
- ["NECB","H","HW","SunHol","FRACTION",0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9],
239
- ["NECB","I","Occ","Wkd","FRACTION",0.1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.1,0.1,0.1,0.4,0.8,0.8,0.8,0.6,0.4],
240
- ["NECB","I","Occ","Sat","FRACTION",0.1,0,0,0,0,0,0,0,0,0,0.1,0.1,0.1,0.4,0.6,0.8,0.6,0.4,0.2,0.4,0.8,0.8,0.6,0.4],
241
- ["NECB","I","Occ","SunHol","FRACTION",0,0,0,0,0,0,0,0,0.2,0.4,0.8,0.8,0.4,0.2,0,0,0,0,0,0,0,0,0,0],
242
- ["NECB","I","Ltg","Wkd","FRACTION",0.5,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.5,0.5,0.5,0.8,0.9,0.9,0.9,0.9,0.9],
243
- ["NECB","I","Ltg","Sat","FRACTION",0.5,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.5,0.5,0.5,0.8,0.9,0.9,0.9,0.8,0.6,0.8,0.9,0.9,0.9,0.9],
244
- ["NECB","I","Ltg","SunHol","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.5,0.9,0.9,0.9,0.9,0.5,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05],
245
- ["NECB","I","Equ","Wkd","FRACTION",0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.2,0.2,0.2,0.8,0.8,0.8,0.8,0.8,0.8],
246
- ["NECB","I","Equ","Sat","FRACTION",0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.2,0.2,0.2,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8],
247
- ["NECB","I","Equ","SunHol","FRACTION",0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.8,0.8,0.8,0.8,0.8,0.2,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1],
248
- ["NECB","I","Fan","Wkd","ON_OFF",1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1],
249
- ["NECB","I","Fan","Sat","ON_OFF",1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
250
- ["NECB","I","Fan","SunHol","ON_OFF",0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0],
251
- ["NECB","I","Proc","Wkd","FRACTION",0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.2,0.2,0.2,0.8,0.8,0.8,0.8,0.8,0.8],
252
- ["NECB","I","Proc","Sat","FRACTION",0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.2,0.2,0.2,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8,0.8],
253
- ["NECB","I","Proc","SunHol","FRACTION",0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.8,0.8,0.8,0.8,0.8,0.2,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1],
254
- ["NECB","I","Clg","Wkd","TEMPERATURE",35,35,35,35,35,35,35,35,35,35,35,35,35,35,24,24,24,24,24,24,24,24,24,24],
255
- ["NECB","I","Clg","Sat","TEMPERATURE",35,35,35,35,35,35,35,35,35,35,24,24,24,24,24,24,24,24,24,24,24,24,24,24],
256
- ["NECB","I","Clg","SunHol","TEMPERATURE",35,35,35,35,35,35,35,24,24,24,24,24,24,24,35,35,35,35,35,35,35,35,35,35],
257
- ["NECB","I","Htg","Wkd","TEMPERATURE",18,18,18,18,18,18,18,18,18,18,18,18,18,18,20,22,22,22,22,22,22,22,22,22],
258
- ["NECB","I","Htg","Sat","TEMPERATURE",18,18,18,18,18,18,18,18,18,18,20,22,22,22,22,22,22,22,22,22,22,22,22,22],
259
- ["NECB","I","Htg","SunHol","TEMPERATURE",18,18,18,18,18,18,18,20,22,22,22,22,22,22,18,18,18,18,18,18,18,18,18,18],
260
- ["NECB","I","HW","Wkd","FRACTION",0.2,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.2,0.2,0.2,0.4,0.9,0.9,0.9,0.8,0.6],
261
- ["NECB","I","HW","Sat","FRACTION",0.2,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.2,0.2,0.2,0.4,0.8,0.9,0.8,0.6,0.4,0.4,0.9,0.9,0.8,0.6],
262
- ["NECB","I","HW","SunHol","FRACTION",0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.1,0.2,0.4,0.4,0.2,0.1,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05,0.05]
263
- ]
264
-
265
- #NECB Building Type Data
266
- #Name,IsSpaceType?,NECBScheduleType,OccupantDensity(m2/p),Plug Loads(w/m2),DHW(W/m2),LightingPowerDensity(W/m2),AirChanges(Ac/h),Diveristy Factor (not used) ,4.2.2.2.(2,infiltration_rate m3/s/m2, SystemSpaceType ]
267
- BuildingTypeData = [
268
- ["Automotive facility",0,"E",20,5,90,8.8,0.001151044,0,0,0.00025, 1],
269
- ["Convention centre",0,"C",8,2.5,30,11.6,0.000747686,0,0,0.00025, 1],
270
- ["Courthouse",0,"A",15,5,60,11.3,0.000462385,0,0,0.00025, 1],
271
- ["Dining - bar/lounge",0,"B",10,1,115,10.7,0.001269099,0,0,0.00025, 11],
272
- ["Dining - cafeteria",0,"B",10,1,115,9.7,0.001269099,0,0,0.00025,11],
273
- ["Dining - family",0,"B",10,1,115,9.6,0.001269099,0,0,0.00025,11],
274
- ["Dormitory",0,"G",30,2.5,500,6.6,0.000383681,0,0,0.00025, 10],
275
- ["Exercise centre",0,"B",10,1,90,9.5,0.001249422,0,0,0.00025, 4],
276
- ["Fire station",0,"F",25,2.5,400,7.6,0.000751622,0,0,0.00025,2],
277
- ["Gymnasium",0,"B",10,1,90,10.8,0.001249422,0,0,0.00025, 4],
278
- ["Health-care clinic",0,"A",20,7.5,90,9.4,0.002287331,0,0,0.00025,4],
279
- ["Hospital",0,"H",20,7.5,90,13,0.002287331,0,0,0.00025,6],
280
- ["Hotel",0,"F",25,2.5,500,10.8,0.000399422,0,0,0.00025,9],
281
- ["Library",0,"C",20,2.5,90,12.7,0.00072801,0,0,0.00025,5],
282
- ["Manufacturing facility",0,"A",30,10,90,11.9,0.00107234,0,0,0.00025,8],
283
- ["Motel",0,"F",25,2.5,500,9.5,0.000399422,0,0,0.00025,9],
284
- ["Motion picture theatre",0,"C",8,1,30,8.9,0.000600116,0,0,0.00025,1],
285
- ["Multi-unit residential",0,"G",60,5,500,6.5,0.000344329,0,0,0.00025,9],
286
- ["Museum",0,"C",20,2.5,60,11.4,0.000482061,0,0,0.00025,5],
287
- ["Office",0,"A",25,7.5,90,9.7,0.000399422,0,0,0.00025,4],
288
- ["Parking garage",0,"H",1000,0,0,2.7,0.0003097,0,0,0.00025,2],
289
- ["Penitentiary",0,"H",30,2.5,400,10.4,0.000383681,0,0,0.00025,10],
290
- ["Performing arts theatre",0,"C",8,1,30,15,0.000600116,0,0,0.00025,1],
291
- ["Police station",0,"H",25,7.5,90,10.3,0.000399422,0,0,0.00025,1], # What is the systemspacetype?
292
- ["Post office",0,"A",25,7.5,90,9.4,0.000751622,0,0,0.00025, 4], # What is the systemspacetype?
293
- ["Religious",0,"I",5,1,15,11.3,0.0007772,0,0,0.00025, 1],
294
- ["Retail",0,"C",30,2.5,40,15.1,0.000423033,0,0,0.00025,4],
295
- ["School/university",0,"D",8,5,60,10.7,0.000747686,0,0,0.00025,1],
296
- ["Sports arena",0,"B",10,1,90,8.4,0.000659144,0,0,0.00025,4],
297
- ["Town hall",0,"D",25,7.5,90,9.9,0.000399422,0,0,0.00025,1],
298
- ["Transportation",0,"H",15,1,65,8.3,0.000541089,0,0,0.00025,4],
299
- ["Warehouse",0,"A",1500,1,300,7.1,0.000308126,0,0,0.00025,12],
300
- ["Workshop",0,"A",30,10,90,12.9,0.00107234,0,0,0.00025,8]
301
- ]
302
-
303
- #NECB Space Type Data
304
- #Name,IsSpaceType?,NECBScheduleType,OccupantDensity(p/m2),Plug Loads(w/m2),DHW(W/m2),LightingPowerDensity(W/m2),AirChanges(Ac/h),Diveristy Factor (not used) ,4.2.2.2.(2,infiltration_rate m3/s/m2, SystemSpaceType]
305
- SpaceTypeData = [
306
- ["- undefined -",1,"*",0,0,0,0,0,0,0,0.00025 , 0],
307
- ["Dwelling Unit(s)",1,"G",60,5,500,5,0.000344329,0,1,0.00025, 9],
308
- ["Atrium - H < 13m",1,"C",10,2.5,0,0,0.000304977,0,1,0.00025, 4],
309
- ["Atrium - H > 13m",1,"C",10,2.5,0,0,0.000304977,0,1,0.00025, 4],
310
- ["Audience - auditorium",1,"C",5,2.5,30,8.5,0.004117196,0.3,0.9,0.00025, 1],
311
- ["Audience - performance arts",1,"C",7.5,2.5,30,26.2,0.004117196,0,1,0.00025, 1],
312
- ["Audience - motion picture",1,"C",5,2.5,30,12.3,0.004117196,0,1,0.00025, 1],
313
- ["Classroom/lecture/training",1,"D",7.5,5,65,13.3,0.002782919,0.5,0.9,0.00025, 1],
314
- ["Conf./meet./multi-purpose",1,"C",5,1,45,13.2,0.001575717,0.5,0.9,0.00025, 1],
315
- ["Corr. >= 2.4m wide",1,"*",100,0,0,7.1,0.000304977,0,1,0.00025, 0],
316
- ["Corr. < 2.4m wide",1,"*",100,0,0,8.4,0.000304977,0,1,0.00025, 0],
317
- ["Dining - bar lounge/leisure",1,"B",10,1,90,14.1,0.003583485,0,1,0.00025,11],
318
- ["Dining - family space",1,"B",10,1,120,9.6,0.003583485,0,1,0.00025,11],
319
- ["Dining - other",1,"B",10,1,120,7,0.003583485,0,1,0.00025,11],
320
- ["Dress./fitt. - performance arts",1,"C",30,2.5,40,4.3,0.001181788,0.4,0.9,0.00025,1],
321
- ["Electrical/Mechanical",1,"*",200,1,0,13.3,0.000304977,0.9,1,0.00025,0],
322
- ["Food preparation",1,"B",20,10,120,10.7,0.001372399,0,1,0.00025,11], # SystemSpaceType issue.
323
- ["Lab - classrooms",1,"D",20,10,180,17.2,0.002185672,0.4,1,0.00025,6],
324
- ["Lab - research",1,"A",20,10,180,23.6,0.002185672,0,1,0.00025,6],
325
- ["Lobby - elevator",1,"C",10,1,0,6.9,0.004117196,0,1,0.00025,1],
326
- ["Lobby - performance arts",1,"C",10,1,0,21.5,0.004117196,0,1,0.00025,1],
327
- ["Lobby - motion picture",1,"C",10,1,0,5.6,0.004117196,0,1,0.00025,1],
328
- ["Lobby - other",1,"C",10,1,0,9.7,0.004117196,0,1,0.00025,1],
329
- ["Locker room",1,"*",10,2.5,0,9.8,0.000940347,0.5,0.9,0.00025,4],
330
- ["Lounge/recreation",1,"B",10,1,60,9.4,0.000940347,0,1,0.00025,11],
331
- ["Office - enclosed",1,"A",20,7.5,90,11.9,0.000432051,0.3,0.9,0.00025,4],
332
- ["Office - open plan",1,"A",20,7.5,90,11,0.000432051,0.2,0.9,0.00025,4],
333
- ["Sales area",1,"C",30,2.5,40,18.1,0.001181788,0,1,0.00025,4],
334
- ["Stairway",1,"*",200,0,0,7.4,0.000304977,0,1,0.00025,0],
335
- ["Storage area",1,"E",100,1,300,6.8,0.000355807,0.6,0.9,0.00025,12],
336
- ["Washroom",1,"*",30,1,0,10.5,0.000304977,0.5,0.9,0.00025,0],
337
- ["Workshop space",1,"A",30,10,90,17.1,0.001931524,0,1,0.00025,8],
338
- ["Automotive - repair",1,"E",20,5,90,7.2,0.001270739,0,1,0.00025,2],
339
- ["Bank - banking and offices",1,"A",25,5,60,14.9,0.00087681,0,1,0.00025,4],
340
- ["Convention centre - audience",1,"C",5,2.5,30,8.8,0.004117196,0.2,0.9,0.00025,1],
341
- ["Convention centre - exhibit",1,"C",5,2.5,30,15.6,0.000864103,0,1,0.00025,1],
342
- ["Courthouse - courtroom",1,"A",5,2.5,30,18.5,0.002084013,0.2,1,0.00025,1],
343
- ["Courthouse - cell",1,"H",25,2.5,325,14.7,0.001245325,0,1,0.00025,10],
344
- ["Courthouse - chambers",1,"A",20,7.5,90,12.6,0.000432051,0.3,0.9,0.00025,1],
345
- ["Penitentiary - audience",1,"C",5,2.5,30,4.6,0.002084013,0,1,0.00025,1],
346
- ["Penitentiary - classroom",1,"D",7.5,5,65,14.4,0.002782919,0.5,0.9,0.00025,1],
347
- ["Penitentiary - dining",1,"B",10,1,120,11.5,0.003583485,0,1,0.00025,11],
348
- ["Dormitory - living quarters",1,"G",25,2.5,500,4.1,0.000559125,0,1,0.00025,10],
349
- ["Fire station - engine room",1,"H",25,2.5,325,6,0.001270739,0.5,1,0.00025,2],
350
- ["Fire station - quarters",1,"G",25,2.5,500,3.4,0.000813273,0,1,0.00025,9],
351
- ["Gym - fitness",1,"B",5,1,90,9.8,0.004371344,0,1,0.00025,4],
352
- ["Gym - audience",1,"B",5,0,30,4.6,0.004117196,0,1,0.00025,4],
353
- ["Gym - play",1,"B",5,1.5,90,12.9,0.001524887,0,1,0.00025,4],
354
- ["Hospital corr. >= 2.4m",1,"*",100,0,0,9.6,0.000762444,0,1,0.00025,0],
355
- ["Hospital corr. < 2.4m",1,"*",100,0,0,11.7,0.000762444,0,1,0.00025,0],
356
- ["Hospital - emergency",1,"H",20,10,180,24.3,0.003049775,0,1,0.00025,6],
357
- ["Hospital - exam",1,"C",20,10,90,17.9,0.001524887,0.3,1,0.00025,6],
358
- ["Hospital - laundry/washing",1,"C",20,20,60,8,0.002287331,0,1,0.00025,6],
359
- ["Hospital - lounge/recreation",1,"B",10,1,60,11.5,0.001270739,0,1,0.00025,11],
360
- ["Hospital - medical supply",1,"H",20,1,0,13.7,0.001524887,0.5,0.9,0.00025,6],
361
- ["Hospital - nursery",1,"H",20,10,90,9.5,0.001524887,0,1,0.00025,6],
362
- ["Hospital - nurses' station",1,"H",20,2.5,45,9.4,0.001524887,0,1,0.00025,6],
363
- ["Hospital - operating room",1,"H",20,10,300,20.3,0.004574662,0.1,1,0.00025,6],
364
- ["Hospital - patient room",1,"H",20,10,90,6.7,0.001524887,0.1,1,0.00025,6],
365
- ["Hospital - pharmacy",1,"C",20,2.5,45,12.3,0.002287331,0,1,0.00025,6],
366
- ["Hospital - physical therapy",1,"C",20,10,45,9.8,0.002287331,0.2,1,0.00025,6],
367
- ["Hospital - radiology/imaging",1,"H",20,10,90,14.2,0.002287331,0,1,0.00025,6],
368
- ["Hospital - recovery",1,"H",20,10,180,12.4,0.004574662,0,1,0.00025,6],
369
- ["Hotel/Motel - dining",1,"B",10,1,115,8.8,0.003583485,0,1,0.00025,11],
370
- ["Hotel/Motel - rooms",1,"F",25,2.5,600,11.9,0.000559125,0,1,0.00025,9],
371
- ["Hotel/Motel - lobby",1,"H",10,2.5,30,11.4,0.001448643,0,1,0.00025,1],
372
- ["Hway lodging - dining",1,"B",10,1,115,9.5,0.003583485,0,1,0.00025,11],
373
- ["Hway lodging - rooms",1,"F",25,2.5,600,8.1,0.000559125,0,1,0.00025,9],
374
- ["Library - cataloging",1,"C",20,2.5,90,7.8,0.000864103,0,1,0.00025,4],
375
- ["Library - reading",1,"C",20,1,90,10,0.000864103,0,1,0.00025,4],
376
- ["Library - stacks",1,"C",20,0,90,22.9,0.000864103,0,1,0.00025,4],
377
- ["Mfg - corr. >= 2.4m",1,"*",100,0,0,4.4,0.001270739,0,1,0.00025,0],
378
- ["Mfg - corr. < 2.4m",1,"*",100,0,0,5.5,0.001270739,0,1,0.00025,0],
379
- ["Mfg - detailed",1,"A",30,0,90,13.9,0.001270739,0,1,0.00025,8],
380
- ["Mfg - equipment",1,"A",30,10,90,13.3,0.001270739,0.2,1,0.00025,8],
381
- ["Mfg - bay H > 15m",1,"A",30,10,90,11.3,0.001270739,0,1,0.00025,8],
382
- ["Mfg - 7.5 <= bay H <= 15m",1,"A",30,10,90,13.2,0.001270739,0,1,0.00025,8],
383
- ["Mfg - bay H < 7.5m",1,"A",30,10,90,12.8,0.001270739,0,1,0.00025,8],
384
- ["Museum - exhibition",1,"C",5,2.5,60,11.3,0.001829865,0.2,1,0.00025,5],
385
- ["Museum - restoration",1,"A",20,5,50,11,0.000864103,0.3,1,0.00025,5],
386
- ["Parking garage space",1,"H",1000,0,0,2,0.002541479,0.4,1,0.00025,2],
387
- ["Post office sorting",1,"A",20,7.5,90,10.1,0.00087681,0,1,0.00025,4],
388
- ["Religious - audience",1,"I",5,1,15,18.2,0.003354752,0.3,1,0.00025,1],
389
- ["Religious - fellowship hall",1,"C",5,1,45,6.9,0.003354752,0.3,1,0.00025,1],
390
- ["Religious - pulpit/choir",1,"I",5,1,15,18.2,0.003354752,0.1,1,0.00025,1],
391
- ["Retail - dressing/fitting",1,"C",30,2.5,40,9.4,0.001181788,0.4,0.9,0.00025,4],
392
- ["Retail - mall concourse",1,"C",20,1,30,11.8,0.001829865,0,1,0.00025,4],
393
- ["Retail - sales",1,"C",30,2.5,40,18.1,0.001181788,0,1,0.00025,4],
394
- ["Sports arena - audience",1,"B",5,0,30,4.6,0.006023305,0,1,0.00025,4],
395
- ["Sports arena - court c4",1,"B",5,1.5,90,7.8,0.001524887,0,1,0.00025,4],
396
- ["Sports arena - court c3",1,"B",5,1.5,90,12.9,0.001524887,0,1,0.00025,4],
397
- ["Sports arena - court c2",1,"B",5,1.5,90,20.7,0.001524887,0,1,0.00025,4],
398
- ["Sports arena - court c1",1,"B",5,1.5,90,32.4,0.001524887,0,1,0.00025,4],
399
- ["Sports arena - ring",1,"B",5,1.5,90,28.8,0.001524887,0,1,0.00025,4],
400
- ["Transp. baggage",1,"H",20,2.5,65,8.2,0.00087681,0,1,0.00025,4],
401
- ["Transp. seating",1,"H",10,0,65,5.8,0.004117196,0,1,0.00025,4],
402
- ["Transp. concourse",1,"H",20,0,65,3.9,0.004117196,0,1,0.00025,4],
403
- ["Transp. counter",1,"H",10,2.5,65,11.6,0.00087681,0,1,0.00025,4],
404
- ["Warehouse - fine",1,"A",50,1,65,10.2,0.000304977,0.5,0.9,0.00025,12],
405
- ["Warehouse - med/blk",1,"A",100,1,65,6.4,0.000304977,0.5,0.9,0.00025,12],
406
- ["Warehouse - med/blk2",1,"A",100,1,65,10.2,0.000304977,0.5,0.9,0.00025,12]
407
- ]
408
43
  end
409
- #this defines the system space types, from Table 8.4.4.8.A
410
- SystemSpaceTypes = [
411
- "None",
412
- #If greater than 4 stories
413
- "Assembly Area",[3,6],
414
- "Automotive Area",[4],
415
- #If colling cap > 20kW
416
- "Data Processing Area",[1,2],
417
- #if greater than 2 stories
418
- "General Area",[3,6],
419
-
420
- "Historical Collections Area",[2],
421
- "Hospital Area",[3],
422
- "Indoor Arena",[7],
423
- "Industrial Area",[3],
424
- #if heated and cooled use proposed.
425
- "Residential/Accomodation Area",[1],
426
- "Sleeping Area",[3],
427
- #food prep with a vented hood (add a new space type?)
428
- "Supermarket/Food Services Area",[3,4],
429
- #non_refridgerated spaces, refrigerated spaces.(New space types?)
430
- "Warehouse Area",[4,5]
431
- ]
44
+
432
45
 
433
46
  #This method ???.
434
47
  #@author phylroy.lopez@nrcan.gc.ca
@@ -570,62 +183,9 @@ module BTAP
570
183
  end
571
184
 
572
185
 
573
- #This method will set the fwdr for a building. It will remove all glazings
574
- # and hard set the FDWR.
575
- #@author phylroy.lopez@nrcan.gc.ca
576
- #@param model [OpenStudio::model::Model] A model object
577
- #@param runner [Object]
578
- #@param [Boolean] use_max
579
- def self.set_necb_fwdr(model,use_max = false, runner = nil)
580
- BTAP::runner_register("Info","set_necb_fwdr", runner)
581
- if model.weatherFile.empty? or model.weatherFile.get.path.empty? or not File.exists?(model.weatherFile.get.path.get.to_s)
582
- BTAP::runner_register("Error","Weather file is not defined. Please ensure the weather file is defined and exists.", runner)
583
- return false
584
- end
585
- hdd = BTAP::Environment::WeatherFile.new(model.weatherFile.get.path.get).hdd18
586
-
587
- old_fwdr = BTAP::Geometry::get_fwdr(model)
588
- BTAP::runner_register("Info","old FWDR is #{old_fwdr}", runner)
589
- outdoor_surfaces = BTAP::Geometry::Surfaces::filter_by_boundary_condition(model.getSurfaces(), "Outdoors")
590
- outdoor_subsurfaces = BTAP::Geometry::Surfaces::get_subsurfaces_from_surfaces(outdoor_surfaces)
591
- outdoor_walls = BTAP::Geometry::Surfaces::filter_by_surface_types(outdoor_surfaces, "Wall")
592
-
593
- #Remove all windows
594
- BTAP::Geometry::Surfaces::filter_subsurfaces_by_types(outdoor_subsurfaces, ["FixedWindow" , "OperableWindow" ]).each {|door| door.remove}
595
- #Remove all doors
596
- BTAP::Geometry::Surfaces::filter_subsurfaces_by_types(outdoor_subsurfaces, ["Door" , "GlassDoor" ]).each {|door| door.remove}
597
-
598
- if use_max == true or old_fwdr > self.max_fwdr(hdd)
599
- ratio = self.max_fwdr(hdd)
600
- else
601
- ratio = old_fwdr
602
- end
603
- outdoor_walls.each {|wall| wall.setWindowToWallRatio(ratio) }
604
-
605
- BTAP::runner_register("Info","New FWDR is #{BTAP::Geometry::get_fwdr(model)} based on HDD of #{hdd}.", runner)
606
- return model
607
- end
608
186
 
609
- #This method will set the fwdr for a building. It will remove all glazings
610
- # and hard set the FDWR.
611
- #@author phylroy.lopez@nrcan.gc.ca
612
- #@param model [OpenStudio::model::Model] A model object
613
- #@param runner [OpenStudio::Ruleset::OSRunner]
614
- def self.set_necb_srr(model, runner = nil)
615
- BTAP::runner_register("Info","Setting NECB Skylight to Roof Ration to 0.05", runner)
616
- ratio = 0.05
617
- old_srr = BTAP::Geometry::get_srr(model)
618
- BTAP::runner_register("InitialCondition","old Skylight to Roof Ratio is #{old_srr}", runner)
619
- outdoor_surfaces = BTAP::Geometry::Surfaces::filter_by_boundary_condition(model.getSurfaces(), "Outdoors")
620
- outdoor_subsurfaces = BTAP::Geometry::Surfaces::get_subsurfaces_from_surfaces(outdoor_surfaces)
621
- outdoor_roofs = BTAP::Geometry::Surfaces::filter_by_surface_types(outdoor_surfaces, "RoofCeiling")
622
- skylights = BTAP::Geometry::Surfaces::filter_subsurfaces_by_types(outdoor_subsurfaces, ["Skylight", "TubularDaylightDiffuser","TubularDaylightDome" ])
623
- overhead_doors = BTAP::Geometry::Surfaces::filter_subsurfaces_by_types(outdoor_subsurfaces, ["OverheadDoor" ])
624
- skylights.each {|skylight| skylight.remove}
625
- overhead_doors.each {|overhead_door| overhead_door.remove}
626
- outdoor_roofs.each {|roof| roof.setWindowToWallRatio(ratio) }
627
- BTAP::runner_register("FinalCondition","old Skylight to Roof Ratio is #{BTAP::Geometry::get_srr(model)}", runner)
628
- end
187
+
188
+
629
189
 
630
190
 
631
191
 
@@ -726,291 +286,20 @@ module BTAP
726
286
  end
727
287
  end
728
288
 
729
- #Set all zones to NECB space types as provided by the space type map file
730
- #(doors, windows, skylights) to NECB values. This model will be bare and
731
- #only have ideal hvac installed. All previous space librairies will be removed
732
- #and only NECB libraries will remain. Constructions will remain, even if flawed.
733
- #@author phylroy.lopez@nrcan.gc.ca
734
- #@param idf_filename [String] a idf file
735
- #@param runner [Object]
736
- #@return [OpenStudio::model::Model] A model object
737
- def self.convert_idf_to_osm_and_map_doe_zones_to_necb_space_types(idf_filename, runner = nil)
738
-
739
-
740
- #spacetype map file should be in IDF folder.
741
- space_type_csv_file = File.dirname(idf_filename) + "/SpaceTypeConversions.csv"
742
- BTAP::runner_register("ERROR","Spacemap file #{space_type_csv_file} could not be found", runner) unless File.exist?(space_type_csv_file)
743
-
744
- #Load IDF file
745
- model = BTAP::FileIO.load_idf(idf_filename)
746
-
747
289
 
748
- #Set building name to match archetype name.
749
- BTAP::FileIO::set_name(model,"#{File.basename(idf_filename,'.idf')}")
750
-
751
290
 
752
-
753
- #Set Building Stories
754
- BTAP::Geometry::BuildingStoreys::auto_assign_spaces_to_stories( model )
755
-
756
- #Add NECB Libraries
757
- BTAP::runner_register("INFO", "Adding NECB default spacetype libs to model... (this may take a while)....", runner)
758
- BTAP::Compliance::NECB2011::add_necb_schedules( model )
759
- BTAP::Compliance::NECB2011::add_necb_space_types( model )
760
- BTAP::Compliance::NECB2011::add_necb_building_types( model )
761
- BTAP::runner_register("INFO", "Done!.", runner)
762
-
763
-
764
- #iterate thourgh all spaces.
765
- BTAP::runner_register("INFO", "Mapping NECB space types.",runner)
766
- #Open CSV Map file.. this contains the map from DOE spacenames to NECB space types.
767
- found_idf_file_in_space_type_csv = false
768
- idf_base_filename = Pathname.new(idf_filename).basename.to_s
769
- BTAP::runner_register("INFO", "Loaded CSV DOE Space name to NECB SpaceType map file #{space_type_csv_file}.",runner)
770
- CSV.foreach( space_type_csv_file, :headers => true, :converters => :all ) do |row|
771
- #puts "Checking #{row['idf_file']} for map."
772
- if row['idf_file'] == idf_base_filename
773
- #puts "Found #{row['idf_file']} for map."
774
- #flag that the idf file was found in the csv file.
775
- found_idf_file_in_space_type_csv = true
776
- #check if the spacetype is a valid NECB space type.
777
- if is_proper_spacetype(row['necb_space_type']) != false
778
- #get space as named in csv file.
779
- space_name = row['zone_name'].gsub(/\bThermal Zone\b/, '').strip
780
- #get space by space name
781
- if model.getSpaceTypeByName("NECB-#{row['necb_space_type']}").empty?
782
- BTAP::runner_register("ERROR","Missing spacetype: #{row['necb_space_type']}", runner)
783
- end
784
- space = model.getSpaceByName(space_name).get
785
-
786
- #Get NECB spacetype
787
- if model.getSpaceTypeByName("NECB-#{row['necb_space_type']}").empty?
788
- BTAP::runner_register("ERROR","Space name #{space_name} not found in model.", runner)
789
- return false
790
- end
791
- necb_spacetype = model.getSpaceTypeByName("NECB-#{row['necb_space_type']}").get
792
- #set space type
793
- space.setSpaceType(necb_spacetype)
794
- puts "**space #{space.name} has been set to spacetype #{necb_spacetype.name}"
795
- else
796
- BTAP::runner_register("ERROR","#{row['necb_space_type']} is not a proper NECB space type",runner)
797
- end
798
- else
799
- if found_idf_file_in_space_type_csv == true
800
- break
801
- else
802
- next
803
- end
804
- end
805
- end
806
- unless found_idf_file_in_space_type_csv == true
807
- BTAP::runner_register("ERROR","#{Pathname.new(idf_filename).basename.to_s} not found in spacetype csv mapping in #{space_type_csv_file}.")
808
- end
809
- return model
810
- end
811
-
812
291
 
813
292
 
814
- #Get Wildcard SpaceTypes
815
- #@author phylroy.lopez@nrcan.gc.ca
816
- #@param type [String]
817
- #@return [String] wildcard_space_types
818
- def self.get_spacetype_names_by_necb_schedule_type(type)
819
- wildcard_space_types = Array.new()
820
- BTAP::Compliance::NECB2011::Data::SpaceTypeData.each do |spacetype_data|
821
- if spacetype_data[2] == type
822
- wildcard_space_types << ("NECB-" + spacetype_data[0]).to_s
823
- end
824
- end
825
- return wildcard_space_types
826
- end
827
293
 
828
- #This will create space types from the type_array.
829
- #@author phylroy.lopez@nrcan.gc.ca
830
- #@param model [OpenStudio::model::Model] A model object
831
- #@param type_array[array<String>]
832
294
 
833
- def self.add_usage_types(model, type_array )
834
-
835
- people = nil
836
- lighting = nil
837
- electric = nil
838
- hotwater = nil
839
- oa_load = nil
840
- infiltration = nil
841
-
842
- type_array.each do |array|
843
- # ["Name","IsSpaceType?","ScheduleType",OccupantDensity,Plug Loads,DHW,LightingPowerDensity,AirChanges,Absence of,4.2.2.2.(2).a,infiltration_rate m3/s/m2]
844
- name, is_space_type, schedule_type,occupancy_density,plug_loads,dhw,lpd,oa_rate,absence,other,infiltration_rate = array
845
- space_type_name = "NECB-" + name.strip
846
- if schedule_type != "*"
847
- default_schedule_set = OpenStudio::Model::getDefaultScheduleSetByName(model,"NECB-" + schedule_type).get
848
-
849
- #create loads
850
- people_name = "NECB-" + name + "-sched-" + schedule_type + "-people"
851
- occupancy_density == 0.0 ? people = nil : people = BTAP::Resources::SpaceLoads::create_people_load(model,people_name,occupancy_density)
852
-
853
- light_name = "NECB-" + name + "-sched-" + schedule_type + "-lights"
854
- lpd == 0.0 ? lighting = nil : lighting = BTAP::Resources::SpaceLoads::create_lighting_load(model,light_name,lpd)
855
-
856
- elec_name = "NECB-" + name + "-sched-" + schedule_type + "-elec"
857
- plug_loads == 0.0 ? electric = nil : electric = BTAP::Resources::SpaceLoads::create_electric_load(model,elec_name,plug_loads)
858
-
859
- hotwater_name = "NECB-" + name + "-sched-" + schedule_type + "-dhw"
860
- dhw == 0.0 ? hotwater = nil : hotwater = BTAP::Resources::SpaceLoads::create_hotwater_load(model,hotwater_name,dhw)
861
-
862
- oa_name = "NECB-" + name + "-sched-" + schedule_type + "-oa"
863
- oa_rate == 0.0 ? oa_load = nil : oa_load = BTAP::Resources::SpaceLoads::create_oa_load(model,oa_name,occupancy_density * oa_rate,0,0,0,"Maximum", BTAP::Resources::Schedules::StandardSchedules::Fraction::always_on(model) )
864
-
865
- infiltration_name = "NECB-" + name + "-sched-" + schedule_type + "-inf"
866
- infiltration_rate == 0.0 ? infiltration = nil : infiltration = BTAP::Resources::SpaceLoads::create_infiltration_load(model, infiltration_name, infiltration_rate, "Flow/ExteriorArea", BTAP::Resources::Schedules::StandardSchedules::Fraction::always_on(model))
867
-
868
- BTAP::Resources::SpaceTypes::create_space_type(model,space_type_name,default_schedule_set,people,lighting,electric,hotwater,oa_load,infiltration)
869
- else
870
- ["*","A","B","C","D","E","F","G","H","I"].each do |schedule_type|
871
-
872
- default_schedule_set = OpenStudio::Model::getDefaultScheduleSetByName(model,"NECB-" + schedule_type).get unless schedule_type == "*"
873
- new_space_type_name = space_type_name
874
- new_space_type_name = space_type_name + "-" + schedule_type unless schedule_type == "*"
875
- #create loads
876
- people_name = "NECB-" + name + "-sched-" + schedule_type + "-people"
877
- occupancy_density == 0.0 ? people = nil : people = BTAP::Resources::SpaceLoads::create_people_load(model,people_name,occupancy_density)
878
-
879
- light_name = "NECB-" + name + "-sched-" + schedule_type + "-lights"
880
- lpd == 0.0 ? lighting = nil : lighting = BTAP::Resources::SpaceLoads::create_lighting_load(model,light_name,lpd)
881
-
882
- elec_name = "NECB-" + name + "-sched-" + schedule_type + "-elec"
883
- plug_loads == 0.0 ? electric = nil : electric = BTAP::Resources::SpaceLoads::create_electric_load(model,elec_name,plug_loads)
884
-
885
- hotwater_name = "NECB-" + name + "-sched-" + schedule_type + "-dhw"
886
- dhw == 0.0 ? hotwater = nil : hotwater = BTAP::Resources::SpaceLoads::create_hotwater_load(model,hotwater_name,dhw)
887
-
888
- oa_name = "NECB-" + name + "-sched-" + schedule_type + "-oa"
889
- oa_rate == 0.0 ? oa_load = nil : oa_load = BTAP::Resources::SpaceLoads::create_oa_load(model,oa_name,occupancy_density * oa_rate,0,0,0,"Maximum", BTAP::Resources::Schedules::StandardSchedules::Fraction::always_on(model) )
890
-
891
- infiltration_name = "NECB-" + name + "-sched-" + schedule_type + "-inf"
892
- infiltration_rate == 0.0 ? infiltration = nil : infiltration = BTAP::Resources::SpaceLoads::create_infiltration_load(model, infiltration_name, infiltration_rate, "Flow/ExteriorArea", BTAP::Resources::Schedules::StandardSchedules::Fraction::always_on(model))
893
-
894
- BTAP::Resources::SpaceTypes::create_space_type(model,new_space_type_name,default_schedule_set,people,lighting,electric,hotwater,oa_load,infiltration)
895
- end
896
- end
897
- end
898
- end
899
295
 
900
296
 
901
- # This method adds all the NECB 2011 schedules to the model. This was used to
902
- # generate the NECB.osm file.
903
- #@author phylroy.lopez@nrcan.gc.ca
904
- #@param model [OpenStudio::model::Model] A model object
905
- #@return [OpenStudio::model::Model] A model object
906
- def self.add_necb_schedules(model)
907
-
908
- #model.add_schedule_type_limits()
909
- counter = 0
910
- schedulesetname = ""
911
- schedule_set = ""
912
- cooling_sched = ""
913
- #why am I doing it in this primitive way? Ruby 1.8.6 does not support "step" method iterator.. :(
914
- while (NECB2011::Data::Schedules[counter] != nil)
915
- #Get Data from row.
916
- schedule_letter = BTAP::Compliance::NECB2011::Data::Schedules[counter][1]
917
- load_type = BTAP::Compliance::NECB2011::Data::Schedules[counter][2]
918
- schedule_type = BTAP::Compliance::NECB2011::Data::Schedules[counter][4]
919
- weekdayhourly = BTAP::Compliance::NECB2011::Data::Schedules[counter][5..28]
920
- sathourly = BTAP::Compliance::NECB2011::Data::Schedules[counter+1][5..28]
921
- sunhourly = BTAP::Compliance::NECB2011::Data::Schedules[counter+2][5..28]
922
-
923
- if schedulesetname != ("NECB-" + schedule_letter )
924
- schedulesetname = ("NECB-" + schedule_letter )
925
- schedule_set = OpenStudio::Model::DefaultScheduleSet.new(model)
926
- schedule_set.setName(schedulesetname)
927
- schedule_set.setInfiltrationSchedule(Resources::Schedules::StandardSchedules::Fraction::always_on(model))
928
- end
929
- rulesetname = "NECB-" + schedule_letter + "-" + load_type
930
-
931
- #Add hourly schedule
932
- ruleset = BTAP::Resources::Schedules::create_annual_ruleset_schedule(model,rulesetname,schedule_type,[weekdayhourly,sathourly,sunhourly])
933
-
934
-
935
- #assign the ruleset to the correct type.
936
- case load_type
937
- when "Occ"
938
- schedule_set.setNumberofPeopleSchedule(ruleset)
939
- when "Ltg"
940
- schedule_set.setLightingSchedule(ruleset)
941
- when "Equ"
942
- schedule_set.setElectricEquipmentSchedule(ruleset)
943
- when "Fan"
944
-
945
- schedule_set.setHoursofOperationSchedule(ruleset)
946
- when "Proc"
947
- schedule_set.setOtherEquipmentSchedule(ruleset)
948
- when "Clg"
949
- cooling_sched = ruleset
950
- when "Htg"
951
- BTAP::Resources::Schedules::create_annual_thermostat_setpoint_dual_setpoint(model,schedulesetname,ruleset,cooling_sched)
952
- when "HW"
953
-
954
- schedule_set.setHotWaterEquipmentSchedule(ruleset)
955
- end
956
- counter = counter + 3
957
- end
958
- return model
959
- end
960
297
 
961
- #This method will add all the NECB building types to a model
962
- #@author phylroy.lopez@nrcan.gc.ca
963
- #@param model [OpenStudio::model::Model] A model object
964
- #@return [OpenStudio::model::Model] A model object
965
- def self.add_necb_building_types( model )
966
- self.add_usage_types(model, BTAP::Compliance::NECB2011::Data::BuildingTypeData )
967
- return model
968
- end
969
298
 
970
- #this method will add all the NECB space types to the model.
971
- #@author phylroy.lopez@nrcan.gc.ca
972
- #@param model [OpenStudio::model::Model] A model object
973
- #@return [OpenStudio::model::Model] A model object
974
- def self.add_necb_space_types( model )
975
- self.add_usage_types(model, BTAP::Compliance::NECB2011::Data::SpaceTypeData )
976
- return model
977
- end
978
299
 
979
- #This method will add the schedules, building types and space types to the
980
- # model.
981
- #@author phylroy.lopez@nrcan.gc.ca
982
- #@param model [OpenStudio::model::Model] A model object
983
- def self.add_necb_libraries_to_model(model)
984
- self.add_necb_schedules(model)
985
- self.add_necb_building_types( model )
986
- self.add_necb_space_types( model )
987
- end
988
300
 
989
- #This method will write all the NECB libraries to the NECB model.
990
- #@author phylroy.lopez@nrcan.gc.ca
991
- def self.create_necb_libraries()
992
-
993
- puts "Creating necb_libraries in #{BTAP::TESTING_FOLDER} "
994
- necb_schedules = OpenStudio::Model::Model.new()
995
- self.add_necb_schedules(necb_schedules)
996
- FileUtils.rm_rf(BTAP::TESTING_FOLDER + "/necb_schedules.osm")
997
- necb_schedules.save(OpenStudio::Path.new(BTAP::TESTING_FOLDER + "/necb_schedules.osm"))
998
-
999
- necb_space_types = OpenStudio::Model::Model.new()
1000
- self.add_necb_space_types(self.add_necb_schedules(necb_space_types))
1001
- FileUtils.rm_rf(BTAP::TESTING_FOLDER + "/necb_space_types.osm")
1002
- necb_space_types.save(OpenStudio::Path.new(BTAP::TESTING_FOLDER + "/necb_space_types.osm"))
1003
-
1004
- necb_building_types = OpenStudio::Model::Model.new()
1005
- self.add_necb_building_types(self.add_necb_schedules(necb_building_types))
1006
- FileUtils.rm_rf(BTAP::TESTING_FOLDER + "/necb_building_types.osm")
1007
- necb_building_types.save(OpenStudio::Path.new(BTAP::TESTING_FOLDER + "/necb_building_types.osm"))
1008
-
1009
- necb_full = OpenStudio::Model::Model.new()
1010
- self.add_necb_building_types( self.add_necb_space_types( self.add_necb_schedules(necb_full) ) )
1011
- FileUtils.rm_rf(BTAP::TESTING_FOLDER + "/necb_full.osm")
1012
- necb_full.save(OpenStudio::Path.new(BTAP::TESTING_FOLDER + "/necb_full.osm"))
1013
- end
301
+
302
+
1014
303
 
1015
304
 
1016
305
  # This model converts all DOE to NECB reference building.
@@ -1091,14 +380,15 @@ module BTAP
1091
380
  puts "in set_zones_thermostat_schedule_based_on_space_type_schedules"
1092
381
  BTAP::runner_register("DEBUG","Start-set_zones_thermostat_schedule_based_on_space_type_schedules" , runner)
1093
382
  model.getThermalZones.each do |zone|
1094
- BTAP::runner_register("DEBUG","\tThermalZone:#{zone.name}" , runner)
383
+ BTAP::runner_register("DEBUG","Zone = #{zone.name} Spaces =#{zone.spaces.size} " , runner)
1095
384
  array = []
385
+
1096
386
  zone.spaces.each do |space|
1097
387
  schedule_type = BTAP::Compliance::NECB2011::determine_necb_schedule_type( space ).to_s
1098
388
  BTAP::runner_register("DEBUG","space name/type:#{space.name}/#{schedule_type}" , runner)
1099
389
 
1100
390
  # if wildcard space type, need to get dominant schedule type
1101
- if schedule_type = "*".to_s
391
+ if "*".to_s == schedule_type
1102
392
  dominant_sched_type = BTAP::Compliance::NECB2011::determine_dominant_necb_schedule_type(model)
1103
393
  schedule_type = dominant_sched_type
1104
394
  end
@@ -1250,68 +540,15 @@ module BTAP
1250
540
  return false
1251
541
  end
1252
542
 
1253
- # This method determines if all the spacetype names match the NECB spacetypes. This is a prerequisite for NECB zoning and system assignment
1254
- #@author phylroy.lopez@nrcan.gc.ca
1255
- #@param model [OpenStudio::Model::Model]
1256
- #@param runner [Object]
1257
- #@return [String] item
1258
- def self.check_all_spacetypes_are_valid_necb_names(model,runner = nil)
1259
- #collect space type and building type names.
1260
- spacetypenames = []
1261
- found = false
1262
- BTAP::Compliance::NECB2011::Data::SpaceTypeData.each { |item| spacetypenames << item[0]}
1263
- BTAP::Compliance::NECB2011::Data::BuildingTypeData.each { |item| spacetypenames << item[0]}
1264
- non_necb_spacetype_names = []
1265
- model.getSpaceTypes.each do |model_spacetype|
1266
- found = false
1267
- spacetypenames.each do |valid_spacetype_name|
1268
- # The optional suffix allows for for defined "wildcard" spacetypes to pass through.
1269
- if model_spacetype.name =~ /NECB-#{valid_spacetype_name}(\-[ABCDEFGHI])?/
1270
- found = true
1271
- end
1272
- end
1273
- non_necb_spacetype_names << model_spacetype.name unless found == true
1274
- end
1275
- if non_necb_spacetype_names.size > 0
1276
- BTAP::runner_register("ERROR","The following spacetypes are not NECB space types.", runner)
1277
- non_necb_spacetype_names.each {|item| BTAP::runner_register("ERROR","-#{item}", runner) }
1278
- BTAP::runner_register("ERROR","Please edit model and assign valid space types.", runner)
1279
- return false
1280
- end
1281
- BTAP::runner_register("INFO","All spacetypes conform to NECB naming.", runner)
1282
- return true
1283
- end
1284
-
1285
-
1286
-
1287
- # This model gets the building space type info from lookup table.
1288
- #@author phylroy.lopez@nrcan.gc.ca
1289
- #@param type [String]
1290
- #@return [String] item
1291
- def self.lookup_spacetype_info(type)
1292
- BTAP::Compliance::NECB2011::Data::SpaceTypeData.each do |item|
1293
- # The optional suffix allows for for defined "wildcard" spacetypes to pass through.
1294
- # space type names have changed - original commented out below (until i know it works)
1295
- # if type.strip =~ /NECB 2011 - Space Function - #{item[0]}(\-[ABCDEFGHI])?/
1296
- if type.strip =~ /Space Function #{item[0]}(\-[ABCDEFGHI])?/
1297
- return item
1298
- end
1299
-
1300
- end
1301
- BTAP::Compliance::NECB2011::Data::BuildingTypeData.each do |item|
1302
- # space type names have changed - original commented out below (until i know it works)
1303
- # if type.strip =~ /NECB 2011 - Space Function - #{item[0]}(\-[ABCDEFGHI])?/
1304
- if type.strip =~ /Space Function #{item[0]}(\-[ABCDEFGHI])?/
1305
- return item
1306
- end
1307
- end
1308
- raise ("#{type} is not a NECB space type, Cannot use NECB system definitions!!")
1309
- end
543
+
1310
544
 
1311
545
  #This model determines the dominant NECB schedule type
1312
546
  #@param model [OpenStudio::model::Model] A model object
1313
547
  #return s.each [String]
1314
548
  def self.determine_dominant_necb_schedule_type( model )
549
+ # lookup necb space type properties
550
+ space_type_properties = model.find_objects($os_standards["space_types"], { "template" => 'NECB 2011'})
551
+
1315
552
  # Here is a hash to keep track of the m2 running total of spacetypes for each
1316
553
  # sched type.
1317
554
  s = Hash[
@@ -1326,39 +563,35 @@ module BTAP
1326
563
  "I",0
1327
564
  ]
1328
565
  #iterate through spaces in building.
566
+ wildcard_spaces = 0
1329
567
  model.getSpaces.each do |space|
1330
- raise ("Space #{space.name} does not have a spacetype defined!") if space.spaceType.empty?
1331
-
1332
- spacetype_name = space.spaceType.get.name
1333
-
1334
-
1335
- #iterate through the NECB spacetypes
1336
568
  found_space_type = false
1337
- BTAP::Compliance::NECB2011::Data::SpaceTypeData.each do |spacetype|
1338
-
1339
- # puts "compare #{spacetype_name.to_s} == #{("Space Function " + spacetype[0]).to_s}"
1340
-
1341
- # i think spacetype names have changed, remove NECB 2011 -
1342
- #if (spacetype_name.to_s == ("NECB 2011 - Space Function - " + spacetype[0]).to_s )
1343
- # s[ spacetype[2] ] = s[ spacetype[2] ] + space.floorArea() if "*" != spacetype[2]
1344
-
1345
- if (spacetype_name.to_s == ("Space Function " + spacetype[0]).to_s )
1346
- s[ spacetype[2] ] = s[ spacetype[2] ] + space.floorArea() if "*" != spacetype[2]
1347
-
1348
- #puts "Found #{space.spaceType.get.name} schedule #{spacetype[2]} match with floor area of #{space.floorArea()}"
1349
- found_space_type = true
1350
- elsif spacetype_name.to_s =~ /NECB-#{spacetype[0].to_s}(\-[ABCDEFGHI])?/
1351
- #found wildcard..will not count to total.
1352
- found_space_type = true
569
+ #iterate through the NECB spacetype property table
570
+ space_type_properties.each do |spacetype|
571
+ unless space.spaceType.empty?
572
+ if space.spaceType.get.standardsSpaceType.empty? || space.spaceType.get.standardsBuildingType.empty?
573
+ OpenStudio::logFree(OpenStudio::Error, "openstudio.Standards.Model", "Space #{space.name} does not have a standardSpaceType defined")
574
+ found_space_type = false
575
+ elsif space.spaceType.get.standardsSpaceType.get == spacetype['space_type'] && space.spaceType.get.standardsBuildingType.get == spacetype['building_type']
576
+ if "*" == spacetype['necb_schedule_type']
577
+ wildcard_spaces =+ 1
578
+ else
579
+ s[ spacetype['necb_schedule_type'] ] = s[ spacetype['necb_schedule_type'] ] + space.floorArea() if "*" != spacetype['necb_schedule_type'] and "- undefined -" != spacetype['necb_schedule_type']
580
+ end
581
+ #puts "Found #{space.spaceType.get.name} schedule #{spacetype[2]} match with floor area of #{space.floorArea()}"
582
+ found_space_type = true
583
+ elsif "*" != spacetype['necb_schedule_type']
584
+ #found wildcard..will not count to total.
585
+ found_space_type = true
586
+ end
1353
587
  end
1354
-
1355
588
  end
1356
589
  raise ("Did not find #{space.spaceType.get.name} in NECB space types.") if found_space_type == false
1357
590
  end
1358
591
  #finds max value and returns NECB schedule letter.
1359
- puts s
1360
- raise("default necb schedule could not be determined for . ") if 0.0 == s.values.max
1361
- return s.each { |k, v| return k.to_s if v == s.values.max }
592
+ raise("Only wildcard spaces in model. You need to define the actual spaces. ") if wildcard_spaces == model.getSpaces.size
593
+ dominant_schedule = s.each { |k, v| return k.to_s if v == s.values.max }
594
+ return dominant_schedule
1362
595
  end
1363
596
 
1364
597
  #This method determines the spacetype schedule type. This will re
@@ -1366,34 +599,173 @@ module BTAP
1366
599
  #@param space [String]
1367
600
  #@return [String]:["A","B","C","D","E","F","G","H","I"] spacetype
1368
601
  def self.determine_necb_schedule_type(space)
1369
- BTAP::Compliance::NECB2011::Data::SpaceTypeData.each do |spacetype|
1370
- spacetype_name = space.spaceType.get.name unless space.spaceType.empty?
1371
- #If it is a regular space type.
1372
-
1373
- # space type names have changed - original commented out below
1374
- # if spacetype_name.to_s == ("NECB 2011 - Space Function - " + spacetype[0]).to_s
1375
- if spacetype_name.to_s == ("Space Function " + spacetype[0]).to_s
1376
- return spacetype[2]
602
+ raise ("Undefined spacetype for space #{space.get.name}) if space.spaceType.empty?") if space.spaceType.empty?
603
+ raise ("Undefined standardsSpaceType or StandardsBuildingType for space #{space.spaceType.get.name}) if space.spaceType.empty?") if space.spaceType.get.standardsSpaceType.empty? | space.spaceType.get.standardsBuildingType.empty?
604
+ space_type_properties = space.model.find_object($os_standards["space_types"], { "template" => 'NECB 2011', "space_type" => space.spaceType.get.standardsSpaceType.get,"building_type" => space.spaceType.get.standardsBuildingType.get })
605
+ return space_type_properties['necb_schedule_type'].strip
606
+ end
607
+
608
+
609
+
610
+
611
+ def self.necb_spacetype_system_selection(model, heatingDesignLoad = nil,coolingDesignLoad = nil, runner = nil )
612
+ spacezoning_data = Struct.new(
613
+ :space, # the space object
614
+ :space_name, # the space name
615
+ :building_type_name, # space type name
616
+ :space_type_name, # space type name
617
+ :necb_hvac_system_selection_type, #
618
+ :system_number, # the necb system type
619
+ :number_of_stories, #number of stories
620
+ :horizontal_placement, # the horizontal placement (norht, south, east, west, core)
621
+ :vertical_placment, # the vertical placement ( ground, top, both, middle )
622
+ :people_obj, # Spacetype people object
623
+ :heating_capacity,
624
+ :cooling_capacity )
625
+
626
+
627
+
628
+ #Array to store schedule objects
629
+ schedule_type_array = []
630
+
631
+ # #this method replaces all the "*" space types with concrete "A-I" schedule based shedules.
632
+ # BTAP::Compliance::NECB2011::set_wildcard_schedules_to_dominant_building_schedule(model, runner)
633
+ #
634
+ #
635
+
636
+
637
+
638
+ #find the number of stories in the model.
639
+ number_of_stories = model.getBuildingStorys.size
640
+
641
+ #set up system array containers. These will contain the spaces associated with the system types.
642
+ space_zoning_data_array = []
643
+
644
+ #First pass of spaces to collect information into the space_zoning_data_array .
645
+ model.getSpaces.each do |space|
646
+
647
+
648
+ #this will get the spacetype system index 8.4.4.8A from the SpaceTypeData and BuildingTypeData in (1-12)
649
+ space_system_index = nil
650
+ if space.spaceType.empty?
651
+ space_system_index = nil
652
+ else
653
+ space_type_property = space.model.find_object($os_standards["space_types"], { "template" => 'NECB 2011', "space_type" => space.spaceType.get.standardsSpaceType.get,"building_type" => space.spaceType.get.standardsBuildingType.get })
654
+ necb_hvac_system_selection_type = space_type_property['necb_hvac_system_selection_type']
655
+ raise("could not find necb system selection type for space: #{space.get.name}") if space_type_property.nil?
1377
656
  end
1378
- #if it is a wildcard space type the schedule is in the name ensure that
1379
- # space type names have changed - original commented out below
1380
- # if spacetype_name.to_s =~ /#{"NECB 2011 - Space Function - " + spacetype[0]}-(\S)$/i
1381
- if spacetype_name.to_s =~ /#{"Space Function " + spacetype[0]}-(\S)$/i
1382
- return $1
657
+
658
+
659
+
660
+
661
+
662
+ #Get the heating and cooling load for the space. Only Zones with a defined thermostat will have a load.
663
+ #Make sure we don't have sideeffects by changing the argument variables.
664
+ cooling_load = coolingDesignLoad
665
+ heating_load = heatingDesignLoad
666
+
667
+ if space.spaceType.get.standardsSpaceType.get == "- undefined -"
668
+ cooling_load = 0.0
669
+ heating_load = 0.0
670
+ else
671
+ cooling_load = space.thermalZone.get.coolingDesignLoad.get * space.floorArea * space.multiplier / 1000.0 if cooling_load.nil?
672
+ heating_load = space.thermalZone.get.heatingDesignLoad.get * space.floorArea * space.multiplier / 1000.0 if heating_load.nil?
673
+ end
674
+
675
+ #identify space-system_index and assign the right NECB system type 1-7.
676
+ system = nil
677
+ case necb_hvac_system_selection_type
678
+ when nil
679
+ raise ("#{space.name} does not have an NECB system association. Please define a NECB HVAC System Selection Type in the google docs standards database.")
680
+ when 0, "- undefined -"
681
+ #These are spaces are undefined...so they are unconditioned and have no loads other than infiltration and no systems
682
+ system = 0
683
+ when "Assembly Area" #Assembly Area.
684
+ if number_of_stories <= 4
685
+ system = 3
686
+ else
687
+ system = 6
688
+ end
689
+
690
+ when "Automotive Area"
691
+ system = 4
692
+
693
+ when "Data Processing Area"
694
+ if coolingDesignLoad > 20 #KW...need a sizing run.
695
+ system = 2
696
+ else
697
+ system = 1
698
+ end
699
+
700
+ when "General Area" #[3,6]
701
+ if number_of_stories <= 2
702
+ system = 3
703
+ else
704
+ system = 6
705
+ end
706
+
707
+ when "Historical Collections Area" #[2],
708
+ system = 2
709
+
710
+ when "Hospital Area" #[3],
711
+ system = 6
712
+
713
+ when "Indoor Arena" #,[7],
714
+ system = 7
715
+
716
+ when "Industrial Area"# [3] this need some thought.
717
+ system = 3
718
+
719
+ when "Residential/Accomodation Area"#,[1], this needs some thought.
720
+ system = 1
721
+
722
+ when "Sleeping Area" #[3],
723
+ system = 3
724
+
725
+ when "Supermarket/Food Services Area"#[3,4],
726
+ system = 3
727
+
728
+ when "Supermarket/Food Services Area - vented"
729
+ system = 4
730
+
731
+ when "Warehouse Area"
732
+ system = 4
733
+
734
+ when "Warehouse Area - refrigerated"
735
+ system = 5
736
+ when "Wildcard"
737
+ system = "Wildcard"
738
+ else
739
+ raise ("NECB HVAC System Selection Type #{necb_hvac_system_selection_type} not valid")
740
+ end
741
+ #get placement on floor, core or perimeter and if a top, bottom, middle or single story.
742
+ horizontal_placement, vertical_placement = BTAP::Geometry::Spaces::get_space_placement( space )
743
+ #dump all info into an array for debugging and iteration.
744
+ unless space.spaceType.empty?
745
+ space_type_name = space.spaceType.get.standardsSpaceType.get
746
+ building_type_name = space.spaceType.get.standardsBuildingType.get
747
+ space_zoning_data_array << spacezoning_data.new( space,
748
+ space.name.get,
749
+ building_type_name,
750
+ space_type_name,
751
+ necb_hvac_system_selection_type,
752
+ system,
753
+ number_of_stories,
754
+ horizontal_placement,
755
+ vertical_placement,
756
+ space.spaceType.get.people,
757
+ heating_load,
758
+ cooling_load )
759
+ schedule_type_array << BTAP::Compliance::NECB2011::determine_necb_schedule_type( space ).to_s
1383
760
  end
1384
761
  end
1385
- raise ("Could not find space type #{space.spaceType.get.name unless space.spaceType.empty?} as a valid NECB spacetype")
762
+
763
+
764
+
765
+
766
+ return schedule_type_array.uniq! , space_zoning_data_array
1386
767
  end
1387
-
1388
-
1389
- #Create a data struct for the space to system to placement information.
1390
- SpacezoningData = Struct.new(
1391
- :space, # the space object
1392
- :system_number, # the necb system type
1393
- :story, # the floor
1394
- :horizontal_placement, # the horizontal placement (norht, south, east, west, core)
1395
- :vertical_placment, # the vertical placement ( ground, top, both, middle )
1396
- :people_obj ) # Spacetype people object
768
+
1397
769
 
1398
770
  # This method will take a model that uses NECB 2011 spacetypes , and..
1399
771
  # 1. Create a building story schema.
@@ -1422,6 +794,9 @@ module BTAP
1422
794
  heating_coil_types_sys6 = "Hot Water",
1423
795
  fan_type = "AF_or_BI_rdg_fancurve" )
1424
796
 
797
+ #Create a data struct for the space to system to placement information.
798
+
799
+
1425
800
  #system assignment.
1426
801
  unless ["NaturalGas","Electricity","PropaneGas","FuelOil#1","FuelOil#2","Coal","Diesel","Gasoline","OtherFuel1"].include?(boiler_fueltype)
1427
802
  BTAP::runner_register("ERROR","boiler_fueltype = #{boiler_fueltype}",runner)
@@ -1482,128 +857,36 @@ module BTAP
1482
857
  BTAP::runner_register("ERROR","heating_coil_types_sys4 = #{heating_coil_types_sys4}",runner)
1483
858
  return false
1484
859
  end
1485
-
1486
- #some defaults until we figure out how to handle them. (TODO)
1487
- vented = true
1488
- heated_only = true
1489
- refrigerated = false
1490
- cooling_capacity = 19.0 #only after sizing run is completed.
860
+
1491
861
  # Reassign / set floors if required.
1492
862
  BTAP::Geometry::BuildingStoreys::auto_assign_stories(model)
1493
-
1494
-
1495
- #Array to store schedule objects
1496
- schedule_type_array = []
1497
-
1498
-
1499
- #This remove all ThermalZones in model just in case
1500
- model.getThermalZones.each do |zone|
1501
- zone.remove
1502
- end
1503
-
1504
- #this method replaces all the "*" space types with concrete "A-I" schedule based shedules.
1505
- BTAP::Compliance::NECB2011::set_wildcard_schedules_to_dominant_building_schedule(model, runner)
1506
-
1507
- #find the number of stories in the model.
1508
- number_of_stories = model.getBuildingStorys.size
1509
-
1510
- #set up system array containers. These will contain the spaces associated with the system types.
1511
- space_zoning_data_array = []
1512
-
1513
- #First pass of spaces to collect information into the space_zoning_data_array .
1514
- model.getSpaces.each do |space|
1515
- #initialize building story variable.
1516
- building_story = nil
1517
- #check to see if the space is already set to a story.
1518
- if not space.buildingStory.empty?
1519
- building_story = space.buildingStory.get
1520
- end
1521
-
1522
- #this will get the spacetype system index 8.4.4.8A from the SpaceTypeData and BuildingTypeData in (1-12)
1523
- space_system_index = nil
1524
- if space.spaceType.empty?
1525
- space_system_index = nil
1526
- else
1527
- space_system_index = self.lookup_spacetype_info(space.spaceType.get.name.get)[11]
1528
- end
1529
-
1530
- #identify space-system_index and assign the right NECB system type 1-7.
1531
- system = nil
1532
- case space_system_index
1533
- when nil
1534
- when 0
1535
- #These are spaces are undefined...so they are unconditioned and have no loads other than infiltration and no systems
1536
- system = 0
1537
- when 1 #Assembly Area.
1538
- if number_of_stories <= 4
1539
- system = 3
1540
- else
1541
- system = 6
1542
- end
1543
-
1544
- when 2 #"Automotive Area",[4]
1545
- system = 4
1546
-
1547
- when 3 #"Data Processing Area",[1,2]
1548
- if cooling_capacity > 20 #KW...need a sizing run.
1549
- system = 2
1550
- else
1551
- system = 1
1552
- end
1553
863
 
1554
- when 4 #"General Area",[3,6]
1555
- if number_of_stories <= 2
1556
- system = 3
1557
- else
1558
- system = 6
864
+ #this method will determine the spaces that should be set to each system
865
+ schedule_type_array , space_zoning_data_array = self.necb_spacetype_system_selection(model)
866
+
867
+ #Deal with Wildcard spaces. Might wish to have logic to do coridors first.
868
+ space_zoning_data_array.each do |space_zone_data|
869
+ if space_zone_data.system_number == "Wildcard"
870
+ #iterate through all adjacent spaces from largest shared wall area to smallest.
871
+ # Set system type to match first space system that is not nil.
872
+ space_zone_data.space.get_adjacent_spaces_with_shared_wall_areas(true).each do |adj_space|
873
+ raise ("Could not determine adj space to space #{space_zone_data.space.name.get}") if adj_space.nil?
874
+ adj_space_data = space_zoning_data_array.find { |data| data.space == adj_space[0] }
875
+ if adj_space_data.system_number.nil?
876
+ next
877
+ else
878
+ space_zone_data.system_number = adj_space_data.system_number
879
+ break
880
+ end
1559
881
  end
1560
-
1561
- when 5 #"Historical Collections Area",[2],
1562
- system = 2
1563
-
1564
- when 6 # "Hospital Area",[3],
1565
- system = 6
1566
-
1567
- when 7 # "Indoor Arena",[7],
1568
- system = 7
1569
-
1570
- when 8 # "Industrial Area [3] this need some thought.
1571
- system = 3
1572
-
1573
- when 9 # "Residential/Accomodation Area",[1], this needs some thought.
1574
- if heated_only
1575
- system = 1
1576
- else
1577
- system = 1
1578
- end
1579
-
1580
- when 10 #"Sleeping Area",[3],
1581
- system = 3
1582
-
1583
- when 11 #"Supermarket/Food Services Area",[3,4],
1584
- if vented
1585
- system = 3
1586
- else
1587
- system = 4
1588
- end
1589
-
1590
- when 12 # Warehouse
1591
- if refrigerated
1592
- system = 3
1593
- else
1594
- system = 3
1595
- end
1596
- end
1597
- #get placement on floor, core or perimeter and if a top, bottom, middle or single story.
1598
- horizontal_placement, vertical_placement = BTAP::Geometry::Spaces::get_space_placement( space )
1599
- #dump all info into an array for debugging and iteration.
1600
- unless space.spaceType.empty? or space.spaceType.get.name.to_s.include?("undefined")
1601
- space_zoning_data_array << SpacezoningData.new( space,system,building_story, horizontal_placement,vertical_placement,space.spaceType.get.people )
1602
- schedule_type_array << BTAP::Compliance::NECB2011::determine_necb_schedule_type( space ).to_s
882
+ raise ("Could not determine adj space system to space #{space_zone_data.space.name.get}") if space_zone_data.system_number.nil?
1603
883
  end
1604
884
  end
1605
- #remove duplicates
1606
- schedule_type_array.uniq!
885
+
886
+
887
+ #remove any thermal zones used for sizing to start fresh. Should only do this after the above system selection method.
888
+ model.getThermalZones.each {|zone| zone.remove}
889
+
1607
890
 
1608
891
  #now lets apply the rules.
1609
892
  # Rule1 all zones must contain only the same schedule / occupancy schedule.
@@ -1612,8 +895,7 @@ module BTAP
1612
895
  # Rule4 Wildcard spaces will be associated with the nearest zone of similar schedule type in which is shared most of it's internal surface with.
1613
896
  # Rule5 NECB zones must contain spaces of similar system type only.
1614
897
 
1615
- #Thermal zone hash
1616
-
898
+ #Array of system types of Array of Spaces
1617
899
  system_zone_array = []
1618
900
  #Lets iterate by system
1619
901
  (0..7).each do |system_number|
@@ -1646,44 +928,38 @@ module BTAP
1646
928
  name = "Sys-#{system_number.to_s} Flr-#{story_counter.to_s} Sch-#{schedule_type.to_s} HPlcmt-#{horizontal_placement}"
1647
929
  thermal_zone = BTAP::Geometry::Zones::create_thermal_zone(model, space_array)
1648
930
  thermal_zone.setAttribute("name",name)
1649
- BTAP::runner_register("INFO", "ThermalZone:#{name} Created with the following spaces:", runner)
1650
- space_array.each do |space|
1651
- BTAP::runner_register("DEBUG","space name/type:#{space.name}:#{space.spaceType.get.name}" , runner)
1652
- end
1653
-
1654
- #default it to ideal air system.
1655
- #thermal_zone_ideal_loads = OpenStudio::Model::ZoneHVACIdealLoadsAirSystem.new(model)
1656
- #thermal_zone_ideal_loads.addToThermalZone(thermal_zone)
1657
-
1658
- # thermal_zone.setUseIdealAirLoads(true) - this uses HVACTemplateObject
931
+ #Set Thermostat bases on
1659
932
 
1660
- #store zone in
1661
- system_zone_array[system_number] << thermal_zone
933
+ # Add a thermostat based on the first space
934
+ space_type_name = space_array[0].spaceType.get.name.get
935
+ thermostat_name = space_type_name + ' Thermostat'
936
+ thermostat = model.getThermostatSetpointDualSetpointByName(thermostat_name)
937
+ if thermostat.empty?
938
+ OpenStudio::logFree(OpenStudio::Error, 'openstudio.model.Model', "Thermostat #{thermostat_name} not found for space name: #{space_array[0].name}")
939
+ raise (" Thermostat #{thermostat_name} not found for space name: #{space_array[0].name}")
940
+ else
941
+ thermostatClone = thermostat.get.clone(model).to_ThermostatSetpointDualSetpoint.get
942
+ thermal_zone.setThermostatSetpointDualSetpoint(thermostatClone)
1662
943
 
944
+ end
945
+ #add thermal zone to system array.
946
+ system_zone_array[system_number] << thermal_zone
1663
947
  end
1664
948
  end
1665
949
  end
1666
950
  end
1667
951
  end #system iteration
1668
-
1669
- BTAP::Compliance::NECB2011::set_zones_thermostat_schedule_based_on_space_type_schedules(model,runner)
1670
952
 
953
+ #Create and assign the zones to the systems.
1671
954
  unless use_ideal_air_loads == true
1672
-
1673
-
1674
- puts "boiler_fueltype = #{boiler_fueltype}"
1675
-
1676
955
  system_zone_array.each_with_index do |zones,system_index|
1677
956
  #skip if no thermal zones for this system.
1678
957
  next if zones.size == 0
1679
- puts "Zone Names for System #{system_index}"
1680
- puts "system_index = #{system_index}"
958
+ # puts "Zone Names for System #{system_index}"
959
+ # puts "system_index = #{system_index}"
1681
960
  case system_index
1682
- when 0
1683
- zones.each do |thermal_zone|
1684
- thermal_zone_ideal_loads = OpenStudio::Model::ZoneHVACIdealLoadsAirSystem.new(model)
1685
- thermal_zone_ideal_loads.addToThermalZone(thermal_zone)
1686
- end
961
+ when 0 , nil
962
+ #Do nothing no system assigned to zone. Used for Unconditioned spaces
1687
963
  when 1
1688
964
  BTAP::Resources::HVAC::HVACTemplates::NECB2011::assign_zones_sys1(model, zones, boiler_fueltype, mau_type, mau_heating_coil_type, baseboard_type)
1689
965
  when 2
@@ -1697,9 +973,15 @@ module BTAP
1697
973
  when 6
1698
974
  BTAP::Resources::HVAC::HVACTemplates::NECB2011::assign_zones_sys6(model, zones, boiler_fueltype, heating_coil_types_sys6, baseboard_type, chiller_type, fan_type)
1699
975
  when 7
1700
- BTAP::Resources::HVAC::HVACTemplates::NECB2011::assign_zones_sys2(model, zones, boiler_fueltype, chiller_type, mua_cooling_type)
976
+ BTAP::Resources::HVAC::HVACTemplates::NECB2011::assign_zones_sys7(model, zones, boiler_fueltype, chiller_type, mua_cooling_type)
1701
977
  end
1702
978
  end
979
+ else
980
+ #otherwise use ideal loads.
981
+ model.getThermalZones.each do |thermal_zone|
982
+ thermal_zone_ideal_loads = OpenStudio::Model::ZoneHVACIdealLoadsAirSystem.new(model)
983
+ thermal_zone_ideal_loads.addToThermalZone(thermal_zone)
984
+ end
1703
985
  end
1704
986
  end
1705
987
  end