bug fix in result reading
This commit is contained in:
parent
246e3442a6
commit
1bac29118e
@ -21,6 +21,7 @@ class EnergyBuildingsExportsFactory:
|
|||||||
"""
|
"""
|
||||||
Energy Buildings exports factory class
|
Energy Buildings exports factory class
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, handler, city, path, custom_insel_block='d18599', target_buildings=None, weather_file=None):
|
def __init__(self, handler, city, path, custom_insel_block='d18599', target_buildings=None, weather_file=None):
|
||||||
self._city = city
|
self._city = city
|
||||||
self._export_type = '_' + handler.lower()
|
self._export_type = '_' + handler.lower()
|
||||||
@ -72,8 +73,7 @@ class EnergyBuildingsExportsFactory:
|
|||||||
with open(weather_path, 'wb') as epw_file:
|
with open(weather_path, 'wb') as epw_file:
|
||||||
epw_file.write(requests.get(url, allow_redirects=True).content)
|
epw_file.write(requests.get(url, allow_redirects=True).content)
|
||||||
return CercIdf(self._city, self._path, (idf_data_path / 'base.idf'), (idf_data_path / 'Energy+.idd'), weather_path,
|
return CercIdf(self._city, self._path, (idf_data_path / 'base.idf'), (idf_data_path / 'Energy+.idd'), weather_path,
|
||||||
target_buildings=self._target_buildings)
|
target_buildings=self._target_buildings)
|
||||||
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def _insel_monthly_energy_balance(self):
|
def _insel_monthly_energy_balance(self):
|
||||||
|
@ -48,10 +48,13 @@ class EnergyPlus:
|
|||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
for building in self._city.buildings:
|
for building in self._city.buildings:
|
||||||
building_energy_demands = self._building_energy_demands.copy()
|
_energy_demands = {}
|
||||||
for header in self._building_energy_demands:
|
for header in self._building_energy_demands:
|
||||||
|
print(header)
|
||||||
if header == 'Zone Ideal Loads Supply Air Total Heating Energy [J](Hourly)':
|
if header == 'Zone Ideal Loads Supply Air Total Heating Energy [J](Hourly)':
|
||||||
field_name = f'{building.name} IDEAL LOADS AIR SYSTEM:{header}'
|
field_name = f'{building.name} IDEAL LOADS AIR SYSTEM:{header}'
|
||||||
|
elif header == 'Zone Ideal Loads Supply Air Total Cooling Energy [J](Hourly)':
|
||||||
|
field_name = f'{building.name} IDEAL LOADS AIR SYSTEM:{header}'
|
||||||
else:
|
else:
|
||||||
field_name = f'{building.name}:{header}'
|
field_name = f'{building.name}:{header}'
|
||||||
position = -1
|
position = -1
|
||||||
@ -60,22 +63,25 @@ class EnergyPlus:
|
|||||||
if position == -1:
|
if position == -1:
|
||||||
continue
|
continue
|
||||||
for line in self._lines:
|
for line in self._lines:
|
||||||
building_energy_demands[header].append(line[position])
|
if header not in _energy_demands.keys():
|
||||||
|
_energy_demands[header] = []
|
||||||
|
_energy_demands[header].append(line[position])
|
||||||
# print(building_energy_demands['Zone Ideal Loads Supply Air Total Heating Energy [J](Hourly)'])
|
# print(building_energy_demands['Zone Ideal Loads Supply Air Total Heating Energy [J](Hourly)'])
|
||||||
EnergyPlus._set_building_demands(building, building_energy_demands)
|
EnergyPlus._set_building_demands(building, _energy_demands)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _set_building_demands(building, building_energy_demands):
|
def _set_building_demands(building, energy_demands):
|
||||||
heating = [float(x) for x in building_energy_demands['Zone Ideal Loads Supply Air Total Heating Energy [J](Hourly)']]
|
print(energy_demands.keys())
|
||||||
cooling = [float(x) for x in building_energy_demands['Zone Ideal Loads Supply Air Total Cooling Energy [J](Hourly)']]
|
heating = [float(x) for x in energy_demands['Zone Ideal Loads Supply Air Total Heating Energy [J](Hourly)']]
|
||||||
dhw = [float(x) * cte.WATTS_HOUR_TO_JULES for x in building_energy_demands['Water Use Equipment Heating Rate [W](Hourly)']]
|
cooling = [float(x) for x in energy_demands['Zone Ideal Loads Supply Air Total Cooling Energy [J](Hourly)']]
|
||||||
appliances = [float(x) * cte.WATTS_HOUR_TO_JULES for x in building_energy_demands['Other Equipment Electricity Rate [W](Hourly)']]
|
dhw = [float(x) * cte.WATTS_HOUR_TO_JULES for x in energy_demands['Water Use Equipment Heating Rate [W](Hourly)']]
|
||||||
lighting = [float(x) * cte.WATTS_HOUR_TO_JULES for x in building_energy_demands['Zone Lights Electricity Rate [W](Hourly)']]
|
appliances = [float(x) * cte.WATTS_HOUR_TO_JULES for x in energy_demands['Other Equipment Electricity Rate [W](Hourly)']]
|
||||||
building.heating_demand[cte.HOUR] = heating.copy()
|
lighting = [float(x) * cte.WATTS_HOUR_TO_JULES for x in energy_demands['Zone Lights Electricity Rate [W](Hourly)']]
|
||||||
building.cooling_demand[cte.HOUR] = cooling.copy()
|
building.heating_demand[cte.HOUR] = heating
|
||||||
building.domestic_hot_water_heat_demand[cte.HOUR] = dhw.copy()
|
building.cooling_demand[cte.HOUR] = cooling
|
||||||
building.appliances_electrical_demand[cte.HOUR] = appliances.copy()
|
building.domestic_hot_water_heat_demand[cte.HOUR] = dhw
|
||||||
building.lighting_electrical_demand[cte.HOUR] = lighting.copy()
|
building.appliances_electrical_demand[cte.HOUR] = appliances
|
||||||
|
building.lighting_electrical_demand[cte.HOUR] = lighting
|
||||||
building.heating_demand[cte.MONTH] = []
|
building.heating_demand[cte.MONTH] = []
|
||||||
building.cooling_demand[cte.MONTH] = []
|
building.cooling_demand[cte.MONTH] = []
|
||||||
building.domestic_hot_water_heat_demand[cte.MONTH] = []
|
building.domestic_hot_water_heat_demand[cte.MONTH] = []
|
||||||
@ -83,25 +89,17 @@ class EnergyPlus:
|
|||||||
building.lighting_electrical_demand[cte.MONTH] = []
|
building.lighting_electrical_demand[cte.MONTH] = []
|
||||||
|
|
||||||
start = 0
|
start = 0
|
||||||
"""
|
|
||||||
for hours in cte.HOURS_A_MONTH.values():
|
for hours in cte.HOURS_A_MONTH.values():
|
||||||
end = hours + start
|
end = hours + start
|
||||||
if end == 8760:
|
|
||||||
print(building.heating_demand[cte.HOUR][start: end])
|
|
||||||
building.heating_demand[cte.MONTH].append(sum(building.heating_demand[cte.HOUR][start: end]))
|
building.heating_demand[cte.MONTH].append(sum(building.heating_demand[cte.HOUR][start: end]))
|
||||||
building.cooling_demand[cte.MONTH].append(sum(building.cooling_demand[cte.HOUR][start: end]))
|
building.cooling_demand[cte.MONTH].append(sum(building.cooling_demand[cte.HOUR][start: end]))
|
||||||
building.domestic_hot_water_heat_demand[cte.MONTH].append(sum(dhw[start: end]))
|
building.domestic_hot_water_heat_demand[cte.MONTH].append(sum(dhw[start: end]))
|
||||||
building.appliances_electrical_demand[cte.MONTH].append(sum(appliances[start: end]))
|
building.appliances_electrical_demand[cte.MONTH].append(sum(appliances[start: end]))
|
||||||
building.lighting_electrical_demand[cte.MONTH].append(sum(lighting[start: end]))
|
building.lighting_electrical_demand[cte.MONTH].append(sum(lighting[start: end]))
|
||||||
start = end
|
start = end
|
||||||
"""
|
|
||||||
building.heating_demand[cte.YEAR] = [sum(building.heating_demand[cte.HOUR])]
|
building.heating_demand[cte.YEAR] = [sum(building.heating_demand[cte.HOUR])]
|
||||||
building.cooling_demand[cte.YEAR] = [sum(building.cooling_demand[cte.HOUR])]
|
building.cooling_demand[cte.YEAR] = [sum(building.cooling_demand[cte.HOUR])]
|
||||||
building.domestic_hot_water_heat_demand[cte.YEAR] = [sum(building.domestic_hot_water_heat_demand[cte.HOUR])]
|
building.domestic_hot_water_heat_demand[cte.YEAR] = [sum(building.domestic_hot_water_heat_demand[cte.HOUR])]
|
||||||
building.appliances_electrical_demand[cte.YEAR] = [sum(building.appliances_electrical_demand[cte.HOUR])]
|
building.appliances_electrical_demand[cte.YEAR] = [sum(building.appliances_electrical_demand[cte.HOUR])]
|
||||||
building.lighting_electrical_demand[cte.YEAR] = [sum(building.lighting_electrical_demand[cte.HOUR])]
|
building.lighting_electrical_demand[cte.YEAR] = [sum(building.lighting_electrical_demand[cte.HOUR])]
|
||||||
|
|
||||||
#print(f'jan: {building.heating_demand[cte.MONTH][0]}, year {building.heating_demand[cte.YEAR]}')
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -129,7 +129,6 @@ class TestExports(TestCase):
|
|||||||
"""
|
"""
|
||||||
export to IDF
|
export to IDF
|
||||||
"""
|
"""
|
||||||
# file = '1588_v1.geojson'
|
|
||||||
file = 'test.geojson'
|
file = 'test.geojson'
|
||||||
file_path = (self._example_path / file).resolve()
|
file_path = (self._example_path / file).resolve()
|
||||||
city = GeometryFactory('geojson',
|
city = GeometryFactory('geojson',
|
||||||
@ -139,9 +138,30 @@ class TestExports(TestCase):
|
|||||||
function_field='CODE_UTILI',
|
function_field='CODE_UTILI',
|
||||||
function_to_hub=Dictionaries().montreal_function_to_hub_function).city
|
function_to_hub=Dictionaries().montreal_function_to_hub_function).city
|
||||||
self.assertIsNotNone(city, 'city is none')
|
self.assertIsNotNone(city, 'city is none')
|
||||||
#EnergyBuildingsExportsFactory('idf', city, self._output_path).export()
|
EnergyBuildingsExportsFactory('idf', city, self._output_path).export()
|
||||||
|
ConstructionFactory('nrcan', city).enrich()
|
||||||
|
EnergyBuildingsExportsFactory('idf', city, self._output_path).export()
|
||||||
|
UsageFactory('nrcan', city).enrich()
|
||||||
|
WeatherFactory('epw', city).enrich()
|
||||||
|
try:
|
||||||
|
idf = EnergyBuildingsExportsFactory('idf', city, self._output_path).export()
|
||||||
|
except Exception:
|
||||||
|
self.fail("Idf ExportsFactory raised ExceptionType unexpectedly!")
|
||||||
|
|
||||||
|
def test_cerc_idf_export(self):
|
||||||
|
"""
|
||||||
|
export to IDF
|
||||||
|
"""
|
||||||
|
file = 'test.geojson'
|
||||||
|
file_path = (self._example_path / file).resolve()
|
||||||
|
city = GeometryFactory('geojson',
|
||||||
|
path=file_path,
|
||||||
|
height_field='citygml_me',
|
||||||
|
year_of_construction_field='ANNEE_CONS',
|
||||||
|
function_field='CODE_UTILI',
|
||||||
|
function_to_hub=Dictionaries().montreal_function_to_hub_function).city
|
||||||
|
self.assertIsNotNone(city, 'city is none')
|
||||||
ConstructionFactory('nrcan', city).enrich()
|
ConstructionFactory('nrcan', city).enrich()
|
||||||
# EnergyBuildingsExportsFactory('idf', city, self._output_path).export()
|
|
||||||
UsageFactory('nrcan', city).enrich()
|
UsageFactory('nrcan', city).enrich()
|
||||||
WeatherFactory('epw', city).enrich()
|
WeatherFactory('epw', city).enrich()
|
||||||
try:
|
try:
|
||||||
@ -151,7 +171,6 @@ class TestExports(TestCase):
|
|||||||
ResultFactory('cerc_idf', city, csv_output_path).enrich()
|
ResultFactory('cerc_idf', city, csv_output_path).enrich()
|
||||||
self.assertTrue(csv_output_path.is_file())
|
self.assertTrue(csv_output_path.is_file())
|
||||||
for building in city.buildings:
|
for building in city.buildings:
|
||||||
print(building.name)
|
|
||||||
self.assertIsNotNone(building.heating_demand)
|
self.assertIsNotNone(building.heating_demand)
|
||||||
self.assertIsNotNone(building.cooling_demand)
|
self.assertIsNotNone(building.cooling_demand)
|
||||||
self.assertIsNotNone(building.domestic_hot_water_heat_demand)
|
self.assertIsNotNone(building.domestic_hot_water_heat_demand)
|
||||||
@ -159,8 +178,7 @@ class TestExports(TestCase):
|
|||||||
self.assertIsNotNone(building.appliances_electrical_demand)
|
self.assertIsNotNone(building.appliances_electrical_demand)
|
||||||
total_demand = sum(building.heating_demand[cte.HOUR])
|
total_demand = sum(building.heating_demand[cte.HOUR])
|
||||||
total_demand_month = sum(building.heating_demand[cte.MONTH])
|
total_demand_month = sum(building.heating_demand[cte.MONTH])
|
||||||
print(building.heating_demand[cte.YEAR])
|
|
||||||
# print(building.heating_demand[cte.YEAR][0], total_demand_month, total_demand)
|
|
||||||
self.assertAlmostEqual(total_demand, building.heating_demand[cte.YEAR][0], 2)
|
self.assertAlmostEqual(total_demand, building.heating_demand[cte.YEAR][0], 2)
|
||||||
|
self.assertAlmostEqual(total_demand_month, building.heating_demand[cte.YEAR][0], 2)
|
||||||
except Exception:
|
except Exception:
|
||||||
self.fail("Idf ExportsFactory raised ExceptionType unexpectedly!")
|
self.fail("Idf ExportsFactory raised ExceptionType unexpectedly!")
|
||||||
|
@ -92,48 +92,3 @@ class TestResultsImport(TestCase):
|
|||||||
building.cooling_demand[cte.HOUR] = values
|
building.cooling_demand[cte.HOUR] = values
|
||||||
self.assertIsNotNone(building.heating_peak_load)
|
self.assertIsNotNone(building.heating_peak_load)
|
||||||
self.assertIsNotNone(building.cooling_peak_load)
|
self.assertIsNotNone(building.cooling_peak_load)
|
||||||
|
|
||||||
def test_energy_plus_results_import(self):
|
|
||||||
# todo: this tests aren't actually testing the functionality
|
|
||||||
ResultFactory('energy_plus_single_building', self._city, self._example_path).enrich()
|
|
||||||
for building in self._city.buildings:
|
|
||||||
csv_output_name = f'{building.name}_out.csv'
|
|
||||||
csv_output_path = (self._example_path / csv_output_name).resolve()
|
|
||||||
if csv_output_path.is_file():
|
|
||||||
self.assertEqual(building.name, '12')
|
|
||||||
self.assertIsNotNone(building.heating_demand)
|
|
||||||
self.assertIsNotNone(building.cooling_demand)
|
|
||||||
self.assertIsNotNone(building.domestic_hot_water_heat_demand)
|
|
||||||
self.assertIsNotNone(building.lighting_electrical_demand)
|
|
||||||
self.assertIsNotNone(building.appliances_electrical_demand)
|
|
||||||
total_demand = sum(building.heating_demand[cte.HOUR])
|
|
||||||
self.assertAlmostEqual(total_demand, building.heating_demand[cte.YEAR][0], 3)
|
|
||||||
total_demand = sum(building.heating_demand[cte.MONTH])
|
|
||||||
self.assertEqual(total_demand, building.heating_demand[cte.YEAR][0], 3)
|
|
||||||
if building.name != '12':
|
|
||||||
self.assertDictEqual(building.heating_demand, {})
|
|
||||||
self.assertDictEqual(building.cooling_demand, {})
|
|
||||||
self.assertDictEqual(building.domestic_hot_water_heat_demand, {})
|
|
||||||
self.assertDictEqual(building.lighting_electrical_demand, {})
|
|
||||||
self.assertDictEqual(building.appliances_electrical_demand, {})
|
|
||||||
|
|
||||||
def test_energy_plus_multiple_buildings_results_import(self):
|
|
||||||
# todo: this tests aren't actually testing the functionality
|
|
||||||
ResultFactory('energy_plus_multiple_buildings', self._city, self._example_path).enrich()
|
|
||||||
csv_output_name = f'{self._city.name}_out.csv'
|
|
||||||
csv_output_path = (self._example_path / csv_output_name).resolve()
|
|
||||||
if csv_output_path.is_file():
|
|
||||||
for building in self._city.buildings:
|
|
||||||
self.assertIsNotNone(building.heating_demand)
|
|
||||||
self.assertIsNotNone(building.cooling_demand)
|
|
||||||
self.assertIsNotNone(building.domestic_hot_water_heat_demand)
|
|
||||||
self.assertIsNotNone(building.lighting_electrical_demand)
|
|
||||||
self.assertIsNotNone(building.appliances_electrical_demand)
|
|
||||||
total_demand = sum(building.heating_demand[cte.HOUR])
|
|
||||||
self.assertAlmostEqual(total_demand, building.heating_demand[cte.YEAR][0], 2)
|
|
||||||
total_demand = sum(building.heating_demand[cte.MONTH])
|
|
||||||
self.assertEqual(total_demand, building.heating_demand[cte.YEAR][0], 2)
|
|
||||||
|
|
||||||
def test_cerc_idf_results(self):
|
|
||||||
csv_output_path = (self._output_path / f'Montreal_out.csv').resolve()
|
|
||||||
ResultFactory('cerc_idf', self._city, csv_output_path).enrich()
|
|
||||||
|
Loading…
Reference in New Issue
Block a user