Main changed to incorporate NPV calculation for life cycle costs. Excel creation per building

This commit is contained in:
Oriol Gavalda 2023-05-29 09:08:06 -04:00
parent 520f0ee7a9
commit b49fbcf4f4
2 changed files with 49 additions and 13 deletions

View File

@ -172,7 +172,7 @@ class LifeCycleCosts:
for year in range(1, self._number_of_years + 1):
price_increase += math.pow(1 + self._consumer_price_index, year)
if year == self._number_of_years:
self._end_of_life_cost = total_floor_area * archetype.end_of_life_cost*price_increase
self._end_of_life_cost[year]['End_of_life_costs'] = total_floor_area * archetype.end_of_life_cost*price_increase
return self._end_of_life_cost
def calculate_total_operational_costs(self):

60
main.py
View File

@ -9,6 +9,7 @@ import os
from pathlib import Path
import sys
import pandas as pd
import numpy as np
from hub.imports.construction_factory import ConstructionFactory
@ -26,6 +27,10 @@ from energy_systems_sizing import EnergySystemsSizing
from life_cycle_costs import LifeCycleCosts
def _npv_from_list(discount_rate, list_cashflow):
lcc_value = np.npv(discount_rate,list_cashflow)
raise KeyError('bad inputs')
def _search_archetype(costs_catalog, building_function):
costs_archetypes = costs_catalog.entries('archetypes').archetypes
for building_archetype in costs_archetypes:
@ -127,18 +132,49 @@ for retrofitting_scenario in retrofitting_scenarios:
lcc = LifeCycleCosts(building, archetype, number_of_years, consumer_price_index, electricity_peak_index,
electricity_price_index, gas_price_index, discount_rate, retrofitting_scenario)
total_capital_costs = lcc.calculate_capital_costs()
print(f'total capital costs {total_capital_costs}')
end_of_life_costs = lcc.calculate_end_of_life_costs()
total_operational_costs = lcc.calculate_total_operational_costs()
total_maintenance_costs = lcc.calculate_total_maintenance_costs()
life_cycle_costs = total_capital_costs + end_of_life_costs + total_operational_costs + total_maintenance_costs
life_cycle_results[f'Scenario {retrofitting_scenario}'] = [total_capital_costs, end_of_life_costs,
total_operational_costs, total_maintenance_costs,
life_cycle_costs]
df_capital_costs_skin = lcc.calculate_capital_costs()['B2010_opaque_walls']+\
lcc.calculate_capital_costs()['B2020_transparent']+\
lcc.calculate_capital_costs()['B3010_opaque_roof']+\
lcc.calculate_capital_costs()['B10_superstructure']
df_capital_costs_systems = lcc.calculate_capital_costs()['D3020_heat_generating_systems']+\
lcc.calculate_capital_costs()['D3030_cooling_generation_systems']+\
lcc.calculate_capital_costs()['D3080_other_hvac_ahu']+\
lcc.calculate_capital_costs()['D5020_lighting_and_branch_wiring']+\
lcc.calculate_capital_costs()['D301010_photovoltaic_system']
df_end_of_life_costs = lcc.calculate_end_of_life_costs()['End_of_life_costs']
df_operational_costs = lcc.calculate_total_operational_costs()['Fixed_costs_electricity_peak']+\
lcc.calculate_total_operational_costs()['Fixed_costs_electricity_monthly']+\
lcc.calculate_total_operational_costs()['Fixed_costs_electricity_peak']+\
lcc.calculate_total_operational_costs()['Fixed_costs_electricity_monthly']+\
lcc.calculate_total_operational_costs()['Variable_costs_electricity']+ \
lcc.calculate_total_operational_costs()['Fixed_costs_gas']+ \
lcc.calculate_total_operational_costs()['Variable_costs_gas']
df_maintenance_costs = lcc.calculate_total_operational_costs()['Heating_maintenance']+\
lcc.calculate_total_operational_costs()['Cooling_maintenance']+\
lcc.calculate_total_operational_costs()['PV_maintenance']
df_operational_incomes = lcc.calculate_total_operational_incomes()['Incomes electricity']
life_cycle_results.index = ['total_capital_costs','end_of_life_costs', 'total_operational_costs',
'total_maintenance_costs','life_cycle_costs']
life_cycle_costs_capital_skin=_npv_from_list(discount_rate , df_capital_costs_skin.values.tolist())
life_cycle_costs_capital_systems=_npv_from_list(discount_rate , df_capital_costs_systems.values.tolist())
life_cycle_costs_end_of_life_costs = _npv_from_list(discount_rate, df_end_of_life_costs.values.tolist())
life_cycle_operational_costs = _npv_from_list(discount_rate, df_operational_costs.values.tolist())
life_cycle_maintenance_costs = _npv_from_list(discount_rate, df_maintenance_costs.values.tolist())
life_cycle_operational_incomes = _npv_from_list(discount_rate, df_operational_incomes.values.tolist())
life_cycle_results.to_excel(Path(__file__).parent/'out_files'/'Results.xlsx', index=True)
life_cycle_costs = life_cycle_costs_capital_skin + life_cycle_costs_capital_systems + \
life_cycle_costs_end_of_life_costs + life_cycle_operational_costs + \
life_cycle_maintenance_costs - life_cycle_operational_incomes
life_cycle_results[f'Scenario {retrofitting_scenario}'] = [life_cycle_costs_capital_skin,
life_cycle_costs_capital_systems ,
life_cycle_costs_end_of_life_costs,
life_cycle_operational_costs,
life_cycle_maintenance_costs,
life_cycle_operational_incomes]
life_cycle_results.index = ['total_capital_costs_skin','total_capital_costs_systems','end_of_life_costs',
'total_operational_costs','total_maintenance_costs','life_cycle_costs',
'maintenance_costs']
life_cycle_results.to_excel(Path(__file__).parent/'out_files'/f'Results{building.name}.xlsx', index=True)