honeybee-energy 1.116.106__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. honeybee_energy/__init__.py +24 -0
  2. honeybee_energy/__main__.py +4 -0
  3. honeybee_energy/_extend_honeybee.py +145 -0
  4. honeybee_energy/altnumber.py +21 -0
  5. honeybee_energy/baseline/__init__.py +2 -0
  6. honeybee_energy/baseline/create.py +608 -0
  7. honeybee_energy/baseline/data/__init__.py +1 -0
  8. honeybee_energy/baseline/data/constructions.csv +64 -0
  9. honeybee_energy/baseline/data/fen_ratios.csv +15 -0
  10. honeybee_energy/baseline/data/lpd_building.csv +21 -0
  11. honeybee_energy/baseline/data/pci_2016.csv +22 -0
  12. honeybee_energy/baseline/data/pci_2019.csv +22 -0
  13. honeybee_energy/baseline/data/pci_2022.csv +22 -0
  14. honeybee_energy/baseline/data/shw.csv +21 -0
  15. honeybee_energy/baseline/pci.py +512 -0
  16. honeybee_energy/baseline/result.py +371 -0
  17. honeybee_energy/boundarycondition.py +128 -0
  18. honeybee_energy/cli/__init__.py +69 -0
  19. honeybee_energy/cli/baseline.py +475 -0
  20. honeybee_energy/cli/edit.py +327 -0
  21. honeybee_energy/cli/lib.py +1154 -0
  22. honeybee_energy/cli/result.py +810 -0
  23. honeybee_energy/cli/setconfig.py +124 -0
  24. honeybee_energy/cli/settings.py +569 -0
  25. honeybee_energy/cli/simulate.py +380 -0
  26. honeybee_energy/cli/translate.py +1714 -0
  27. honeybee_energy/cli/validate.py +224 -0
  28. honeybee_energy/config.json +11 -0
  29. honeybee_energy/config.py +842 -0
  30. honeybee_energy/construction/__init__.py +1 -0
  31. honeybee_energy/construction/_base.py +374 -0
  32. honeybee_energy/construction/air.py +325 -0
  33. honeybee_energy/construction/dictutil.py +89 -0
  34. honeybee_energy/construction/dynamic.py +607 -0
  35. honeybee_energy/construction/opaque.py +460 -0
  36. honeybee_energy/construction/shade.py +319 -0
  37. honeybee_energy/construction/window.py +1096 -0
  38. honeybee_energy/construction/windowshade.py +847 -0
  39. honeybee_energy/constructionset.py +1655 -0
  40. honeybee_energy/dictutil.py +56 -0
  41. honeybee_energy/generator/__init__.py +5 -0
  42. honeybee_energy/generator/loadcenter.py +204 -0
  43. honeybee_energy/generator/pv.py +535 -0
  44. honeybee_energy/hvac/__init__.py +21 -0
  45. honeybee_energy/hvac/_base.py +124 -0
  46. honeybee_energy/hvac/_template.py +270 -0
  47. honeybee_energy/hvac/allair/__init__.py +22 -0
  48. honeybee_energy/hvac/allair/_base.py +349 -0
  49. honeybee_energy/hvac/allair/furnace.py +168 -0
  50. honeybee_energy/hvac/allair/psz.py +131 -0
  51. honeybee_energy/hvac/allair/ptac.py +163 -0
  52. honeybee_energy/hvac/allair/pvav.py +109 -0
  53. honeybee_energy/hvac/allair/vav.py +128 -0
  54. honeybee_energy/hvac/detailed.py +337 -0
  55. honeybee_energy/hvac/doas/__init__.py +28 -0
  56. honeybee_energy/hvac/doas/_base.py +345 -0
  57. honeybee_energy/hvac/doas/fcu.py +127 -0
  58. honeybee_energy/hvac/doas/radiant.py +329 -0
  59. honeybee_energy/hvac/doas/vrf.py +81 -0
  60. honeybee_energy/hvac/doas/wshp.py +91 -0
  61. honeybee_energy/hvac/heatcool/__init__.py +23 -0
  62. honeybee_energy/hvac/heatcool/_base.py +177 -0
  63. honeybee_energy/hvac/heatcool/baseboard.py +61 -0
  64. honeybee_energy/hvac/heatcool/evapcool.py +72 -0
  65. honeybee_energy/hvac/heatcool/fcu.py +92 -0
  66. honeybee_energy/hvac/heatcool/gasunit.py +53 -0
  67. honeybee_energy/hvac/heatcool/radiant.py +269 -0
  68. honeybee_energy/hvac/heatcool/residential.py +77 -0
  69. honeybee_energy/hvac/heatcool/vrf.py +54 -0
  70. honeybee_energy/hvac/heatcool/windowac.py +70 -0
  71. honeybee_energy/hvac/heatcool/wshp.py +62 -0
  72. honeybee_energy/hvac/idealair.py +699 -0
  73. honeybee_energy/internalmass.py +310 -0
  74. honeybee_energy/lib/__init__.py +1 -0
  75. honeybee_energy/lib/_loadconstructions.py +194 -0
  76. honeybee_energy/lib/_loadconstructionsets.py +117 -0
  77. honeybee_energy/lib/_loadmaterials.py +83 -0
  78. honeybee_energy/lib/_loadprogramtypes.py +125 -0
  79. honeybee_energy/lib/_loadschedules.py +87 -0
  80. honeybee_energy/lib/_loadtypelimits.py +64 -0
  81. honeybee_energy/lib/constructions.py +207 -0
  82. honeybee_energy/lib/constructionsets.py +95 -0
  83. honeybee_energy/lib/materials.py +67 -0
  84. honeybee_energy/lib/programtypes.py +125 -0
  85. honeybee_energy/lib/schedules.py +61 -0
  86. honeybee_energy/lib/scheduletypelimits.py +31 -0
  87. honeybee_energy/load/__init__.py +1 -0
  88. honeybee_energy/load/_base.py +190 -0
  89. honeybee_energy/load/daylight.py +397 -0
  90. honeybee_energy/load/dictutil.py +47 -0
  91. honeybee_energy/load/equipment.py +771 -0
  92. honeybee_energy/load/hotwater.py +543 -0
  93. honeybee_energy/load/infiltration.py +460 -0
  94. honeybee_energy/load/lighting.py +480 -0
  95. honeybee_energy/load/people.py +497 -0
  96. honeybee_energy/load/process.py +472 -0
  97. honeybee_energy/load/setpoint.py +816 -0
  98. honeybee_energy/load/ventilation.py +550 -0
  99. honeybee_energy/material/__init__.py +1 -0
  100. honeybee_energy/material/_base.py +166 -0
  101. honeybee_energy/material/dictutil.py +59 -0
  102. honeybee_energy/material/frame.py +367 -0
  103. honeybee_energy/material/gas.py +1087 -0
  104. honeybee_energy/material/glazing.py +854 -0
  105. honeybee_energy/material/opaque.py +1351 -0
  106. honeybee_energy/material/shade.py +1360 -0
  107. honeybee_energy/measure.py +472 -0
  108. honeybee_energy/programtype.py +723 -0
  109. honeybee_energy/properties/__init__.py +1 -0
  110. honeybee_energy/properties/aperture.py +333 -0
  111. honeybee_energy/properties/door.py +342 -0
  112. honeybee_energy/properties/extension.py +244 -0
  113. honeybee_energy/properties/face.py +274 -0
  114. honeybee_energy/properties/model.py +2640 -0
  115. honeybee_energy/properties/room.py +1747 -0
  116. honeybee_energy/properties/shade.py +314 -0
  117. honeybee_energy/properties/shademesh.py +262 -0
  118. honeybee_energy/reader.py +48 -0
  119. honeybee_energy/result/__init__.py +1 -0
  120. honeybee_energy/result/colorobj.py +648 -0
  121. honeybee_energy/result/emissions.py +290 -0
  122. honeybee_energy/result/err.py +101 -0
  123. honeybee_energy/result/eui.py +100 -0
  124. honeybee_energy/result/generation.py +160 -0
  125. honeybee_energy/result/loadbalance.py +890 -0
  126. honeybee_energy/result/match.py +202 -0
  127. honeybee_energy/result/osw.py +90 -0
  128. honeybee_energy/result/rdd.py +59 -0
  129. honeybee_energy/result/zsz.py +190 -0
  130. honeybee_energy/run.py +1577 -0
  131. honeybee_energy/schedule/__init__.py +1 -0
  132. honeybee_energy/schedule/day.py +626 -0
  133. honeybee_energy/schedule/dictutil.py +59 -0
  134. honeybee_energy/schedule/fixedinterval.py +1012 -0
  135. honeybee_energy/schedule/rule.py +619 -0
  136. honeybee_energy/schedule/ruleset.py +1867 -0
  137. honeybee_energy/schedule/typelimit.py +310 -0
  138. honeybee_energy/shw.py +315 -0
  139. honeybee_energy/simulation/__init__.py +1 -0
  140. honeybee_energy/simulation/control.py +214 -0
  141. honeybee_energy/simulation/daylightsaving.py +185 -0
  142. honeybee_energy/simulation/dictutil.py +51 -0
  143. honeybee_energy/simulation/output.py +646 -0
  144. honeybee_energy/simulation/parameter.py +606 -0
  145. honeybee_energy/simulation/runperiod.py +443 -0
  146. honeybee_energy/simulation/shadowcalculation.py +295 -0
  147. honeybee_energy/simulation/sizing.py +546 -0
  148. honeybee_energy/ventcool/__init__.py +5 -0
  149. honeybee_energy/ventcool/_crack_data.py +91 -0
  150. honeybee_energy/ventcool/afn.py +289 -0
  151. honeybee_energy/ventcool/control.py +269 -0
  152. honeybee_energy/ventcool/crack.py +126 -0
  153. honeybee_energy/ventcool/fan.py +493 -0
  154. honeybee_energy/ventcool/opening.py +365 -0
  155. honeybee_energy/ventcool/simulation.py +314 -0
  156. honeybee_energy/writer.py +1078 -0
  157. honeybee_energy-1.116.106.dist-info/METADATA +113 -0
  158. honeybee_energy-1.116.106.dist-info/RECORD +162 -0
  159. honeybee_energy-1.116.106.dist-info/WHEEL +5 -0
  160. honeybee_energy-1.116.106.dist-info/entry_points.txt +2 -0
  161. honeybee_energy-1.116.106.dist-info/licenses/LICENSE +661 -0
  162. honeybee_energy-1.116.106.dist-info/top_level.txt +1 -0
@@ -0,0 +1,329 @@
1
+ # coding=utf-8
2
+ """Low temperature radiant with DOAS HVAC system."""
3
+ from __future__ import division
4
+
5
+ from ._base import _DOASBase
6
+
7
+ from honeybee._lockable import lockable
8
+ from honeybee.typing import float_positive, valid_string
9
+
10
+
11
+ @lockable
12
+ class RadiantwithDOAS(_DOASBase):
13
+ """Low temperature radiant with DOAS HVAC system.
14
+
15
+ This HVAC template will change the floor and/or ceiling constructions
16
+ of the Rooms that it is applied to, replacing them with a construction that
17
+ aligns with the radiant_type property (eg. CeilingMetalPanel).
18
+
19
+ All rooms/zones in the system are connected to a Dedicated Outdoor Air System
20
+ (DOAS) that supplies a constant volume of ventilation air at the same temperature
21
+ to all rooms/zones. The ventilation air temperature will vary from 21.1C (70F)
22
+ to 15.5C (60F) depending on the outdoor air temperature (the DOAS supplies cooler air
23
+ when outdoor conditions are warmer). The ventilation air temperature is maintained
24
+ by a two-speed direct expansion (DX) cooling coil and a single-speed DX
25
+ heating coil with backup electrical resistance heat.
26
+
27
+ The heating and cooling needs of the space are met with the radiant constructions,
28
+ which use chilled water at 12.8C (55F) and a hot water temperature somewhere
29
+ between 32.2C (90F) and 49C (120F) (warmer temperatures are used in colder
30
+ climate zones).
31
+
32
+ Note that radiant systems are particularly limited in cooling capacity and
33
+ using them may result in many unmet hours. To reduce unmet hours, one can
34
+ remove carpets, reduce internal loads, reduce solar and envelope gains during
35
+ peak times, add thermal mass, and use an expanded comfort range.
36
+
37
+ Args:
38
+ identifier: Text string for system identifier. Must be < 100 characters
39
+ and not contain any EnergyPlus special characters. This will be used to
40
+ identify the object across a model and in the exported IDF.
41
+ vintage: Text for the vintage of the template system. This will be used
42
+ to set efficiencies for various pieces of equipment within the system.
43
+ Choose from the following.
44
+
45
+ * DOE_Ref_Pre_1980
46
+ * DOE_Ref_1980_2004
47
+ * ASHRAE_2004
48
+ * ASHRAE_2007
49
+ * ASHRAE_2010
50
+ * ASHRAE_2013
51
+ * ASHRAE_2016
52
+ * ASHRAE_2019
53
+
54
+ equipment_type: Text for the specific type of the system and equipment. (Default:
55
+ the first option below) Choose from.
56
+
57
+ * DOAS_Radiant_Chiller_Boiler
58
+ * DOAS_Radiant_Chiller_ASHP
59
+ * DOAS_Radiant_Chiller_DHW
60
+ * DOAS_Radiant_ACChiller_Boiler
61
+ * DOAS_Radiant_ACChiller_ASHP
62
+ * DOAS_Radiant_ACChiller_DHW
63
+ * DOAS_Radiant_DCW_Boiler
64
+ * DOAS_Radiant_DCW_ASHP
65
+ * DOAS_Radiant_DCW_DHW
66
+
67
+ sensible_heat_recovery: A number between 0 and 1 for the effectiveness
68
+ of sensible heat recovery within the system. (Default: 0).
69
+ latent_heat_recovery: A number between 0 and 1 for the effectiveness
70
+ of latent heat recovery within the system. (Default: 0).
71
+ demand_controlled_ventilation: Boolean to note whether demand controlled
72
+ ventilation should be used on the system, which will vary the amount
73
+ of ventilation air according to the occupancy schedule of the
74
+ Rooms. (Default: False).
75
+ doas_availability_schedule: An optional On/Off discrete schedule to set when
76
+ the dedicated outdoor air system (DOAS) shuts off. This will not only
77
+ prevent any outdoor air from flowing thorough the system but will also
78
+ shut off the fans, which can result in more energy savings when spaces
79
+ served by the DOAS are completely unoccupied. If None, the DOAS will be
80
+ always on. (Default: None).
81
+ radiant_type: Text to indicate which faces are thermally active. Note
82
+ that systems are assumed to be embedded in concrete slabs unless
83
+ CeilingMetalPanel or FloorWithHardwood is specified. Choose from the
84
+ following. (Default: Floor).
85
+
86
+ * Floor
87
+ * Ceiling
88
+ * FloorWithCarpet
89
+ * CeilingMetalPanel
90
+ * FloorWithHardwood
91
+
92
+ minimum_operation_time: A number for the minimum number of hours of operation
93
+ for the radiant system before it shuts off. Note that this has no effect
94
+ if the radiant_type is not in a slab. (Default: 1).
95
+ switch_over_time: A number for the minimum number of hours for when the system
96
+ can switch between heating and cooling. Note that this has no effect
97
+ if the radiant_type is not in a slab. (Default: 24).
98
+
99
+ Properties:
100
+ * identifier
101
+ * display_name
102
+ * vintage
103
+ * equipment_type
104
+ * sensible_heat_recovery
105
+ * latent_heat_recovery
106
+ * demand_controlled_ventilation
107
+ * doas_availability_schedule
108
+ * minimum_operation_time
109
+ * switch_over_time
110
+ * radiant_type
111
+ * schedules
112
+ * has_district_heating
113
+ * has_district_cooling
114
+ * user_data
115
+ * properties
116
+ """
117
+ __slots__ = ('_radiant_type', '_minimum_operation_time', '_switch_over_time')
118
+
119
+ EQUIPMENT_TYPES = (
120
+ 'DOAS_Radiant_Chiller_Boiler',
121
+ 'DOAS_Radiant_Chiller_ASHP',
122
+ 'DOAS_Radiant_Chiller_DHW',
123
+ 'DOAS_Radiant_ACChiller_Boiler',
124
+ 'DOAS_Radiant_ACChiller_ASHP',
125
+ 'DOAS_Radiant_ACChiller_DHW',
126
+ 'DOAS_Radiant_DCW_Boiler',
127
+ 'DOAS_Radiant_DCW_ASHP',
128
+ 'DOAS_Radiant_DCW_DHW'
129
+ )
130
+
131
+ radiant_typeS = ('Floor', 'Ceiling', 'FloorWithCarpet',
132
+ 'CeilingMetalPanel', 'FloorWithHardwood')
133
+
134
+ def __init__(self, identifier, vintage='ASHRAE_2019', equipment_type=None,
135
+ sensible_heat_recovery=0, latent_heat_recovery=0,
136
+ demand_controlled_ventilation=False, doas_availability_schedule=None,
137
+ radiant_type='Floor', minimum_operation_time=1, switch_over_time=24):
138
+ """Initialize HVACSystem."""
139
+ # initialize base HVAC system properties
140
+ _DOASBase.__init__(
141
+ self, identifier, vintage, equipment_type, sensible_heat_recovery,
142
+ latent_heat_recovery, demand_controlled_ventilation,
143
+ doas_availability_schedule
144
+ )
145
+
146
+ # set the main features of the HVAC system
147
+ self.radiant_type = radiant_type
148
+ self.minimum_operation_time = minimum_operation_time
149
+ self.switch_over_time = switch_over_time
150
+
151
+ @property
152
+ def radiant_type(self):
153
+ """Get or set text to indicate the type of radiant system."""
154
+ return self._radiant_type
155
+
156
+ @radiant_type.setter
157
+ def radiant_type(self, value):
158
+ clean_input = valid_string(value).lower()
159
+ for key in self.radiant_typeS:
160
+ if key.lower() == clean_input:
161
+ value = key
162
+ break
163
+ else:
164
+ raise ValueError(
165
+ 'radiant_type {} is not recognized.\nChoose from the '
166
+ 'following:\n{}'.format(value, self.radiant_typeS))
167
+ self._radiant_type = value
168
+
169
+ @property
170
+ def minimum_operation_time(self):
171
+ """Get or set a the minimum hours of operation before the system shuts off."""
172
+ return self._minimum_operation_time
173
+
174
+ @minimum_operation_time.setter
175
+ def minimum_operation_time(self, value):
176
+ self._minimum_operation_time = \
177
+ float_positive(value, 'hvac minimum operation time')
178
+
179
+ @property
180
+ def switch_over_time(self):
181
+ """Get or set the minimum hours the system can switch between heating/cooling."""
182
+ return self._switch_over_time
183
+
184
+ @switch_over_time.setter
185
+ def switch_over_time(self, value):
186
+ self._switch_over_time = float_positive(value, 'hvac switch over time')
187
+
188
+ @classmethod
189
+ def from_dict(cls, data):
190
+ """Create a HVAC object from a dictionary.
191
+
192
+ Args:
193
+ data: A DOAS dictionary in following the format below.
194
+
195
+ .. code-block:: python
196
+
197
+ {
198
+ "type": "", # text for the class name of the HVAC
199
+ "identifier": "Classroom1_System", # identifier for the HVAC
200
+ "display_name": "Standard System", # name for the HVAC
201
+ "vintage": "ASHRAE_2019", # text for the vintage of the template
202
+ "equipment_type": "", # text for the HVAC equipment type
203
+ "sensible_heat_recovery": 0.75, # Sensible heat recovery effectiveness
204
+ "latent_heat_recovery": 0.7, # Latent heat recovery effectiveness
205
+ "demand_controlled_ventilation": False # Boolean for DCV
206
+ "doas_availability_schedule": {}, # Schedule for DOAS availability or None
207
+ "radiant_type": "Ceiling",
208
+ "minimum_operation_time": 1,
209
+ "switch_over_time": 24
210
+ }
211
+ """
212
+ assert data['type'] == cls.__name__, \
213
+ 'Expected {} dictionary. Got {}.'.format(cls.__name__, data['type'])
214
+ # extract the key features and properties of the HVAC
215
+ sensible, latent, dcv = cls._properties_from_dict(data)
216
+ f_type, mot, sot = cls._radiant_properties_from_dict(data)
217
+ # extract the schedule
218
+ doas_avail = cls._get_schedule_from_dict(data['doas_availability_schedule']) if \
219
+ 'doas_availability_schedule' in data and \
220
+ data['doas_availability_schedule'] is not None else None
221
+
222
+ new_obj = cls(data['identifier'], data['vintage'], data['equipment_type'],
223
+ sensible, latent, dcv, doas_avail, f_type, mot, sot)
224
+ if 'display_name' in data and data['display_name'] is not None:
225
+ new_obj.display_name = data['display_name']
226
+ if 'user_data' in data and data['user_data'] is not None:
227
+ new_obj.user_data = data['user_data']
228
+ return new_obj
229
+
230
+ @classmethod
231
+ def from_dict_abridged(cls, data, schedule_dict):
232
+ """Create a HVAC object from an abridged dictionary.
233
+
234
+ Args:
235
+ data: A DOAS abridged dictionary in following the format below.
236
+ schedule_dict: A dictionary with schedule identifiers as keys and honeybee
237
+ schedule objects as values (either ScheduleRuleset or
238
+ ScheduleFixedInterval). These will be used to assign the schedules
239
+ to the Setpoint object.
240
+
241
+ .. code-block:: python
242
+
243
+ {
244
+ "type": "", # text for the class name of the HVAC
245
+ "identifier": "Classroom1_System", # identifier for the HVAC
246
+ "display_name": "Standard System", # name for the HVAC
247
+ "vintage": "ASHRAE_2019", # text for the vintage of the template
248
+ "equipment_type": "", # text for the HVAC equipment type
249
+ "sensible_heat_recovery": 0.75, # Sensible heat recovery effectiveness
250
+ "latent_heat_recovery": 0.7, # Latent heat recovery effectiveness
251
+ "demand_controlled_ventilation": False # Boolean for DCV
252
+ "doas_availability_schedule": "", # Schedule id for DOAS availability
253
+ "radiant_type": "Ceiling",
254
+ "minimum_operation_time": 1,
255
+ "switch_over_time": 24
256
+ }
257
+ """
258
+ assert cls.__name__ in data['type'], \
259
+ 'Expected {} dictionary. Got {}.'.format(cls.__name__, data['type'])
260
+ # extract the key features and properties of the HVAC
261
+ sensible, latent, dcv = cls._properties_from_dict(data)
262
+ f_type, mot, sot = cls._radiant_properties_from_dict(data)
263
+ # extract the schedule
264
+ doas_avail = None
265
+ if 'doas_availability_schedule' in data and \
266
+ data['doas_availability_schedule'] is not None:
267
+ try:
268
+ doas_avail = schedule_dict[data['doas_availability_schedule']]
269
+ except KeyError as e:
270
+ raise ValueError('Failed to find {} in the schedule_dict.'.format(e))
271
+ new_obj = cls(data['identifier'], data['vintage'], data['equipment_type'],
272
+ sensible, latent, dcv, doas_avail, f_type, mot, sot)
273
+ if 'display_name' in data and data['display_name'] is not None:
274
+ new_obj.display_name = data['display_name']
275
+ if 'user_data' in data and data['user_data'] is not None:
276
+ new_obj.user_data = data['user_data']
277
+ return new_obj
278
+
279
+ def to_dict(self, abridged=False):
280
+ """DOAS system dictionary representation.
281
+
282
+ Args:
283
+ abridged: Boolean to note whether the full dictionary describing the
284
+ object should be returned (False) or just an abridged version (True).
285
+ This input currently has no effect but may eventually have one if
286
+ schedule-type properties are exposed on this template.
287
+ """
288
+ base = self._base_dict(abridged)
289
+ base['radiant_type'] = self.radiant_type
290
+ base['minimum_operation_time'] = self.minimum_operation_time
291
+ base['switch_over_time'] = self.switch_over_time
292
+ return base
293
+
294
+ @staticmethod
295
+ def _radiant_properties_from_dict(data):
296
+ """Extract basic radiant properties from a dictionary and assign defaults."""
297
+ mot = data['minimum_operation_time'] if 'minimum_operation_time' in data else 1
298
+ sot = data['switch_over_time'] if 'switch_over_time' in data else 24
299
+ rad_type = data['radiant_type'] if 'radiant_type' in data and \
300
+ data['radiant_type'] is not None else 'Floor'
301
+ return rad_type, mot, sot
302
+
303
+ def __copy__(self):
304
+ new_obj = self.__class__(
305
+ self._identifier, self._vintage, self._equipment_type,
306
+ self._sensible_heat_recovery, self._latent_heat_recovery,
307
+ self._demand_controlled_ventilation, self._doas_availability_schedule,
308
+ self._radiant_type, self._minimum_operation_time,
309
+ self._switch_over_time)
310
+ new_obj._display_name = self._display_name
311
+ new_obj._user_data = None if self._user_data is None else self._user_data.copy()
312
+ return new_obj
313
+
314
+ def __key(self):
315
+ """A tuple based on the object properties, useful for hashing."""
316
+ return (self._identifier, self._vintage, self._equipment_type,
317
+ self._sensible_heat_recovery, self._latent_heat_recovery,
318
+ self._demand_controlled_ventilation,
319
+ hash(self._doas_availability_schedule),
320
+ self._radiant_type, self._minimum_operation_time, self._switch_over_time)
321
+
322
+ def __hash__(self):
323
+ return hash(self.__key())
324
+
325
+ def __eq__(self, other):
326
+ return isinstance(other, self.__class__) and self.__key() == other.__key()
327
+
328
+ def __ne__(self, other):
329
+ return not self.__eq__(other)
@@ -0,0 +1,81 @@
1
+ # coding=utf-8
2
+ """Variable Refrigerant Flow (VRF) with DOAS HVAC system."""
3
+ from __future__ import division
4
+
5
+ from ._base import _DOASBase
6
+
7
+ from honeybee._lockable import lockable
8
+
9
+
10
+ @lockable
11
+ class VRFwithDOAS(_DOASBase):
12
+ """Variable Refrigerant Flow (VRF) with DOAS HVAC system.
13
+
14
+ All rooms/zones in the system are connected to a Dedicated Outdoor Air System
15
+ (DOAS) that supplies a constant volume of ventilation air at the same temperature
16
+ to all rooms/zones. The ventilation air temperature will vary from 21.1C (70F)
17
+ to 15.5C (60F) depending on the outdoor air temperature (the DOAS supplies cooler air
18
+ when outdoor conditions are warmer). The ventilation air temperature is maintained
19
+ by a single speed direct expansion (DX) cooling coil along with a single-speed
20
+ direct expansion (DX) heat pump with a backup electrical resistance coil.
21
+
22
+ Each room/zone also receives its own Variable Refrigerant Flow (VRF) terminal,
23
+ which meets the heating and cooling loads of the space. All room/zone terminals
24
+ are connected to the same outdoor unit, meaning that either all rooms must be
25
+ in cooling or heating mode together.
26
+
27
+ Args:
28
+ identifier: Text string for system identifier. Must be < 100 characters
29
+ and not contain any EnergyPlus special characters. This will be used to
30
+ identify the object across a model and in the exported IDF.
31
+ vintage: Text for the vintage of the template system. This will be used
32
+ to set efficiencies for various pieces of equipment within the system.
33
+ Choose from the following.
34
+
35
+ * DOE_Ref_Pre_1980
36
+ * DOE_Ref_1980_2004
37
+ * ASHRAE_2004
38
+ * ASHRAE_2007
39
+ * ASHRAE_2010
40
+ * ASHRAE_2013
41
+ * ASHRAE_2016
42
+ * ASHRAE_2019
43
+
44
+ equipment_type: Text for the specific type of the system and equipment. (Default:
45
+ the first option below) Choose from.
46
+
47
+ * DOAS_VRF
48
+
49
+ sensible_heat_recovery: A number between 0 and 1 for the effectiveness
50
+ of sensible heat recovery within the system. (Default: 0).
51
+ latent_heat_recovery: A number between 0 and 1 for the effectiveness
52
+ of latent heat recovery within the system. (Default: 0).
53
+ demand_controlled_ventilation: Boolean to note whether demand controlled
54
+ ventilation should be used on the system, which will vary the amount
55
+ of ventilation air according to the occupancy schedule of the
56
+ Rooms. (Default: False).
57
+ doas_availability_schedule: An optional On/Off discrete schedule to set when
58
+ the dedicated outdoor air system (DOAS) shuts off. This will not only
59
+ prevent any outdoor air from flowing thorough the system but will also
60
+ shut off the fans, which can result in more energy savings when spaces
61
+ served by the DOAS are completely unoccupied. If None, the DOAS will be
62
+ always on. (Default: None).
63
+
64
+ Properties:
65
+ * identifier
66
+ * display_name
67
+ * vintage
68
+ * equipment_type
69
+ * sensible_heat_recovery
70
+ * latent_heat_recovery
71
+ * demand_controlled_ventilation
72
+ * doas_availability_schedule
73
+ * schedules
74
+ * has_district_heating
75
+ * has_district_cooling
76
+ * user_data
77
+ * properties
78
+ """
79
+ __slots__ = ()
80
+
81
+ EQUIPMENT_TYPES = ('DOAS_VRF',)
@@ -0,0 +1,91 @@
1
+ # coding=utf-8
2
+ """Water Source Heat Pump (WSHP) with DOAS HVAC system."""
3
+ from __future__ import division
4
+
5
+ from ._base import _DOASBase
6
+
7
+ from honeybee._lockable import lockable
8
+
9
+
10
+ @lockable
11
+ class WSHPwithDOAS(_DOASBase):
12
+ """Water Source Heat Pump (WSHP) with DOAS HVAC system.
13
+
14
+ All rooms/zones in the system are connected to a Dedicated Outdoor Air System
15
+ (DOAS) that supplies a constant volume of ventilation air at the same temperature
16
+ to all rooms/zones. The ventilation air temperature will vary from 21.1C (70F)
17
+ to 15.5C (60F) depending on the outdoor air temperature (the DOAS supplies cooler air
18
+ when outdoor conditions are warmer). The ventilation air temperature is maintained
19
+ by a chilled water cooling coil and a hot water heating coil except when the
20
+ ground source heat pump (GSHP) option is selected. In this case, the ventilation
21
+ air temperature is maintained by a two-speed direct expansion (DX) cooling coil
22
+ and a single-speed DX heating coil with backup electrical resistance heat.
23
+
24
+ Each room/zone also receives its own Water Source Heat Pump (WSHP), which meets
25
+ the heating and cooling loads of the space. All WSHPs are connected to the
26
+ same water condenser loop, which has its temperature maintained by the
27
+ equipment_type (eg. Boiler with Cooling Tower).
28
+
29
+ Args:
30
+ identifier: Text string for system identifier. Must be < 100 characters
31
+ and not contain any EnergyPlus special characters. This will be used to
32
+ identify the object across a model and in the exported IDF.
33
+ vintage: Text for the vintage of the template system. This will be used
34
+ to set efficiencies for various pieces of equipment within the system.
35
+ Choose from the following.
36
+
37
+ * DOE_Ref_Pre_1980
38
+ * DOE_Ref_1980_2004
39
+ * ASHRAE_2004
40
+ * ASHRAE_2007
41
+ * ASHRAE_2010
42
+ * ASHRAE_2013
43
+ * ASHRAE_2016
44
+ * ASHRAE_2019
45
+
46
+ equipment_type: Text for the specific type of the system and equipment. (Default:
47
+ the first option below) Choose from.
48
+
49
+ * DOAS_WSHP_FluidCooler_Boiler
50
+ * DOAS_WSHP_CoolingTower_Boiler
51
+ * DOAS_WSHP_GSHP
52
+ * DOAS_WSHP_DCW_DHW
53
+
54
+ sensible_heat_recovery: A number between 0 and 1 for the effectiveness
55
+ of sensible heat recovery within the system. (Default: 0).
56
+ latent_heat_recovery: A number between 0 and 1 for the effectiveness
57
+ of latent heat recovery within the system. (Default: 0).
58
+ demand_controlled_ventilation: Boolean to note whether demand controlled
59
+ ventilation should be used on the system, which will vary the amount
60
+ of ventilation air according to the occupancy schedule of the
61
+ Rooms. (Default: False).
62
+ doas_availability_schedule: An optional On/Off discrete schedule to set when
63
+ the dedicated outdoor air system (DOAS) shuts off. This will not only
64
+ prevent any outdoor air from flowing thorough the system but will also
65
+ shut off the fans, which can result in more energy savings when spaces
66
+ served by the DOAS are completely unoccupied. If None, the DOAS will be
67
+ always on. (Default: None).
68
+
69
+ Properties:
70
+ * identifier
71
+ * display_name
72
+ * vintage
73
+ * equipment_type
74
+ * sensible_heat_recovery
75
+ * latent_heat_recovery
76
+ * demand_controlled_ventilation
77
+ * doas_availability_schedule
78
+ * schedules
79
+ * has_district_heating
80
+ * has_district_cooling
81
+ * user_data
82
+ * properties
83
+ """
84
+ __slots__ = ()
85
+
86
+ EQUIPMENT_TYPES = (
87
+ 'DOAS_WSHP_FluidCooler_Boiler',
88
+ 'DOAS_WSHP_CoolingTower_Boiler',
89
+ 'DOAS_WSHP_GSHP',
90
+ 'DOAS_WSHP_DCW_DHW'
91
+ )
@@ -0,0 +1,23 @@
1
+ """Template HVAC definitions that only supply heating + cooling (no ventilation).
2
+
3
+ These systems are only designed to satisfy heating + cooling demand and they
4
+ cannot meet any minimum ventilation requirements.
5
+
6
+ As such, these systems tend to be used in residential or storage settings where
7
+ meeting minimum ventilation requirements may not be required or the density
8
+ of occupancy is so low that infiltration is enough to meet fresh air demand.
9
+
10
+ Properties:
11
+ * HVAC_TYPES_DICT: A dictionary containing pointers to the classes of each
12
+ HVAC system. The keys of this dictionary are the names of the HVAC
13
+ classes (eg. 'Baseboard').
14
+ * EQUIPMENT_TYPES_DICT: A dictionary containing pointers to the classes of
15
+ the HVAC systems. The keys of this dictionary are the names of the HVAC
16
+ systems as they appear in the OpenStudio standards gem and include the
17
+ specific equipment in the system (eg. 'Baseboard gas boiler').
18
+ """
19
+ from ._base import _HeatCoolEnumeration
20
+
21
+ _heat_cool_types = _HeatCoolEnumeration(import_modules=True)
22
+ HVAC_TYPES_DICT = _heat_cool_types.types_dict
23
+ EQUIPMENT_TYPES_DICT = _heat_cool_types.equipment_types_dict