mabuseif commited on
Commit
7484065
·
verified ·
1 Parent(s): 76fc39e

Upload 31 files

Browse files
Files changed (1) hide show
  1. data/climate_data.py +233 -0
data/climate_data.py CHANGED
@@ -70,6 +70,239 @@ class ClimateData:
70
  self.countries = sorted(list(set(loc.country for loc in self.locations.values())))
71
  self.country_states = self._group_locations_by_country_state()
72
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
73
  def _load_climate_locations(self) -> Dict[str, ClimateLocation]:
74
  """
75
  Load climate location data.
 
70
  self.countries = sorted(list(set(loc.country for loc in self.locations.values())))
71
  self.country_states = self._group_locations_by_country_state()
72
 
73
+ @staticmethod
74
+ def get_design_conditions(climate_zone: str) -> Dict[str, Dict[str, float]]:
75
+ """
76
+ Get design conditions for a specific climate zone.
77
+
78
+ Args:
79
+ climate_zone: ASHRAE climate zone (e.g., '1A', '3B', '5A')
80
+
81
+ Returns:
82
+ Dictionary with summer and winter design conditions
83
+ """
84
+ # Default design conditions by climate zone
85
+ design_conditions_by_zone = {
86
+ # Hot-Humid
87
+ "1A": {
88
+ "summer": {"db": 35.0, "wb": 28.0, "dp": 25.5},
89
+ "winter": {"db": 12.0, "rh": 80.0}
90
+ },
91
+ # Hot-Dry
92
+ "1B": {
93
+ "summer": {"db": 42.0, "wb": 24.0, "dp": 18.0},
94
+ "winter": {"db": 10.0, "rh": 40.0}
95
+ },
96
+ # Hot-Humid
97
+ "2A": {
98
+ "summer": {"db": 34.0, "wb": 26.5, "dp": 24.0},
99
+ "winter": {"db": 8.0, "rh": 75.0}
100
+ },
101
+ # Hot-Dry
102
+ "2B": {
103
+ "summer": {"db": 40.0, "wb": 23.0, "dp": 16.5},
104
+ "winter": {"db": 6.0, "rh": 45.0}
105
+ },
106
+ # Warm-Humid
107
+ "3A": {
108
+ "summer": {"db": 33.0, "wb": 25.0, "dp": 22.5},
109
+ "winter": {"db": 2.0, "rh": 70.0}
110
+ },
111
+ # Warm-Dry
112
+ "3B": {
113
+ "summer": {"db": 38.0, "wb": 22.0, "dp": 15.0},
114
+ "winter": {"db": 4.0, "rh": 40.0}
115
+ },
116
+ # Warm-Marine
117
+ "3C": {
118
+ "summer": {"db": 28.0, "wb": 20.0, "dp": 17.0},
119
+ "winter": {"db": 5.0, "rh": 80.0}
120
+ },
121
+ # Mixed-Humid
122
+ "4A": {
123
+ "summer": {"db": 32.0, "wb": 24.0, "dp": 21.0},
124
+ "winter": {"db": -5.0, "rh": 70.0}
125
+ },
126
+ # Mixed-Dry
127
+ "4B": {
128
+ "summer": {"db": 35.0, "wb": 20.0, "dp": 13.0},
129
+ "winter": {"db": -3.0, "rh": 45.0}
130
+ },
131
+ # Mixed-Marine
132
+ "4C": {
133
+ "summer": {"db": 27.0, "wb": 19.0, "dp": 16.0},
134
+ "winter": {"db": -2.0, "rh": 80.0}
135
+ },
136
+ # Cool-Humid
137
+ "5A": {
138
+ "summer": {"db": 31.0, "wb": 23.0, "dp": 20.0},
139
+ "winter": {"db": -15.0, "rh": 70.0}
140
+ },
141
+ # Cool-Dry
142
+ "5B": {
143
+ "summer": {"db": 33.0, "wb": 18.0, "dp": 11.0},
144
+ "winter": {"db": -10.0, "rh": 45.0}
145
+ },
146
+ # Cool-Marine
147
+ "5C": {
148
+ "summer": {"db": 25.0, "wb": 18.0, "dp": 15.0},
149
+ "winter": {"db": -5.0, "rh": 80.0}
150
+ },
151
+ # Cold-Humid
152
+ "6A": {
153
+ "summer": {"db": 30.0, "wb": 22.0, "dp": 19.0},
154
+ "winter": {"db": -20.0, "rh": 70.0}
155
+ },
156
+ # Cold-Dry
157
+ "6B": {
158
+ "summer": {"db": 31.0, "wb": 17.0, "dp": 10.0},
159
+ "winter": {"db": -15.0, "rh": 45.0}
160
+ },
161
+ # Very Cold
162
+ "7": {
163
+ "summer": {"db": 28.0, "wb": 20.0, "dp": 17.0},
164
+ "winter": {"db": -25.0, "rh": 70.0}
165
+ },
166
+ # Subarctic/Arctic
167
+ "8": {
168
+ "summer": {"db": 25.0, "wb": 18.0, "dp": 15.0},
169
+ "winter": {"db": -30.0, "rh": 70.0}
170
+ }
171
+ }
172
+
173
+ # Return design conditions for the specified climate zone
174
+ # If climate zone not found, return default values
175
+ if climate_zone in design_conditions_by_zone:
176
+ return design_conditions_by_zone[climate_zone]
177
+ else:
178
+ # Default to 4A if climate zone not found
179
+ return design_conditions_by_zone["4A"]
180
+
181
+ @staticmethod
182
+ def get_monthly_temperatures(climate_zone: str) -> Dict[str, float]:
183
+ """
184
+ Get monthly average temperatures for a specific climate zone.
185
+
186
+ Args:
187
+ climate_zone: ASHRAE climate zone (e.g., '1A', '3B', '5A')
188
+
189
+ Returns:
190
+ Dictionary with monthly average temperatures
191
+ """
192
+ # Default monthly temperatures by climate zone
193
+ monthly_temps_by_zone = {
194
+ # Hot-Humid (like Miami)
195
+ "1A": {
196
+ "Jan": 20.0, "Feb": 20.5, "Mar": 22.0, "Apr": 24.0, "May": 26.0,
197
+ "Jun": 28.0, "Jul": 29.0, "Aug": 29.0, "Sep": 28.0, "Oct": 26.0,
198
+ "Nov": 23.0, "Dec": 21.0
199
+ },
200
+ # Hot-Dry (like Riyadh)
201
+ "1B": {
202
+ "Jan": 15.0, "Feb": 17.0, "Mar": 22.0, "Apr": 27.0, "May": 32.0,
203
+ "Jun": 35.0, "Jul": 37.0, "Aug": 36.0, "Sep": 33.0, "Oct": 28.0,
204
+ "Nov": 22.0, "Dec": 17.0
205
+ },
206
+ # Hot-Humid (like Houston)
207
+ "2A": {
208
+ "Jan": 12.0, "Feb": 13.5, "Mar": 17.0, "Apr": 21.0, "May": 25.0,
209
+ "Jun": 28.0, "Jul": 29.0, "Aug": 29.0, "Sep": 27.0, "Oct": 22.0,
210
+ "Nov": 17.0, "Dec": 13.0
211
+ },
212
+ # Hot-Dry (like Phoenix)
213
+ "2B": {
214
+ "Jan": 13.0, "Feb": 15.0, "Mar": 18.0, "Apr": 23.0, "May": 28.0,
215
+ "Jun": 33.0, "Jul": 35.0, "Aug": 34.0, "Sep": 31.0, "Oct": 25.0,
216
+ "Nov": 18.0, "Dec": 13.0
217
+ },
218
+ # Warm-Humid (like Atlanta)
219
+ "3A": {
220
+ "Jan": 6.0, "Feb": 8.0, "Mar": 12.0, "Apr": 17.0, "May": 21.0,
221
+ "Jun": 25.0, "Jul": 27.0, "Aug": 26.0, "Sep": 23.0, "Oct": 18.0,
222
+ "Nov": 12.0, "Dec": 7.0
223
+ },
224
+ # Warm-Dry (like Los Angeles)
225
+ "3B": {
226
+ "Jan": 14.6, "Feb": 15.1, "Mar": 15.8, "Apr": 17.1, "May": 18.3,
227
+ "Jun": 20.1, "Jul": 22.3, "Aug": 22.9, "Sep": 22.1, "Oct": 20.3,
228
+ "Nov": 17.2, "Dec": 14.9
229
+ },
230
+ # Warm-Marine (like San Francisco)
231
+ "3C": {
232
+ "Jan": 10.0, "Feb": 11.0, "Mar": 12.0, "Apr": 13.0, "May": 14.0,
233
+ "Jun": 16.0, "Jul": 17.0, "Aug": 17.0, "Sep": 18.0, "Oct": 16.0,
234
+ "Nov": 13.0, "Dec": 10.0
235
+ },
236
+ # Mixed-Humid (like New York)
237
+ "4A": {
238
+ "Jan": 0.5, "Feb": 2.1, "Mar": 6.3, "Apr": 12.5, "May": 18.2,
239
+ "Jun": 23.1, "Jul": 25.8, "Aug": 24.9, "Sep": 20.7, "Oct": 14.3,
240
+ "Nov": 8.2, "Dec": 2.4
241
+ },
242
+ # Mixed-Dry (like Albuquerque)
243
+ "4B": {
244
+ "Jan": 3.0, "Feb": 5.0, "Mar": 9.0, "Apr": 14.0, "May": 19.0,
245
+ "Jun": 24.0, "Jul": 26.0, "Aug": 25.0, "Sep": 21.0, "Oct": 15.0,
246
+ "Nov": 8.0, "Dec": 3.0
247
+ },
248
+ # Mixed-Marine (like Seattle)
249
+ "4C": {
250
+ "Jan": 5.0, "Feb": 6.0, "Mar": 8.0, "Apr": 10.0, "May": 13.0,
251
+ "Jun": 16.0, "Jul": 18.0, "Aug": 18.0, "Sep": 16.0, "Oct": 12.0,
252
+ "Nov": 8.0, "Dec": 5.0
253
+ },
254
+ # Cool-Humid (like Chicago)
255
+ "5A": {
256
+ "Jan": -3.5, "Feb": -1.2, "Mar": 4.1, "Apr": 10.3, "May": 16.5,
257
+ "Jun": 22.1, "Jul": 24.8, "Aug": 23.9, "Sep": 19.7, "Oct": 12.8,
258
+ "Nov": 5.2, "Dec": -1.4
259
+ },
260
+ # Cool-Dry (like Denver)
261
+ "5B": {
262
+ "Jan": 0.0, "Feb": 2.0, "Mar": 6.0, "Apr": 10.0, "May": 15.0,
263
+ "Jun": 20.0, "Jul": 23.0, "Aug": 22.0, "Sep": 18.0, "Oct": 12.0,
264
+ "Nov": 5.0, "Dec": 0.0
265
+ },
266
+ # Cool-Marine (like Vancouver)
267
+ "5C": {
268
+ "Jan": 3.0, "Feb": 4.0, "Mar": 6.0, "Apr": 9.0, "May": 12.0,
269
+ "Jun": 15.0, "Jul": 17.0, "Aug": 17.0, "Sep": 14.0, "Oct": 10.0,
270
+ "Nov": 6.0, "Dec": 3.0
271
+ },
272
+ # Cold-Humid (like Minneapolis)
273
+ "6A": {
274
+ "Jan": -9.0, "Feb": -6.0, "Mar": 0.0, "Apr": 8.0, "May": 15.0,
275
+ "Jun": 20.0, "Jul": 23.0, "Aug": 22.0, "Sep": 17.0, "Oct": 10.0,
276
+ "Nov": 1.0, "Dec": -6.0
277
+ },
278
+ # Cold-Dry (like Helena)
279
+ "6B": {
280
+ "Jan": -5.0, "Feb": -2.0, "Mar": 2.0, "Apr": 7.0, "May": 12.0,
281
+ "Jun": 17.0, "Jul": 21.0, "Aug": 20.0, "Sep": 15.0, "Oct": 9.0,
282
+ "Nov": 1.0, "Dec": -4.0
283
+ },
284
+ # Very Cold (like Duluth)
285
+ "7": {
286
+ "Jan": -12.0, "Feb": -9.0, "Mar": -3.0, "Apr": 5.0, "May": 12.0,
287
+ "Jun": 17.0, "Jul": 20.0, "Aug": 19.0, "Sep": 14.0, "Oct": 7.0,
288
+ "Nov": -1.0, "Dec": -9.0
289
+ },
290
+ # Subarctic/Arctic (like Fairbanks)
291
+ "8": {
292
+ "Jan": -20.0, "Feb": -16.0, "Mar": -10.0, "Apr": 0.0, "May": 10.0,
293
+ "Jun": 16.0, "Jul": 18.0, "Aug": 15.0, "Sep": 8.0, "Oct": -2.0,
294
+ "Nov": -12.0, "Dec": -18.0
295
+ }
296
+ }
297
+
298
+ # Return monthly temperatures for the specified climate zone
299
+ # If climate zone not found, return default values
300
+ if climate_zone in monthly_temps_by_zone:
301
+ return monthly_temps_by_zone[climate_zone]
302
+ else:
303
+ # Default to 4A if climate zone not found
304
+ return monthly_temps_by_zone["4A"]
305
+
306
  def _load_climate_locations(self) -> Dict[str, ClimateLocation]:
307
  """
308
  Load climate location data.