diff --git a/demand_generator/tek_data/gen_heat_profile.py b/demand_generator/tek_data/gen_heat_profile.py
index 49e260f03bf17bc6fadbf75d1c54fbebd4bdb83e..cb8ced976abbcdf2c0b28ed38d28075ab349e9e2 100644
--- a/demand_generator/tek_data/gen_heat_profile.py
+++ b/demand_generator/tek_data/gen_heat_profile.py
@@ -24,7 +24,9 @@ building_typ_list = ["Verwaltungsgebäude",
"Beherbergen und Verpflegen",
"Gewerbliche und industrielle",
"Verkaufsstätten",
- "Technikgebäude"]
+ "Technikgebäude",
+ "Wohngebäude",
+ "Wohngebäude (MFH)"]
energy_typ_list = ["sehr hoch", "hoch", "mittel", "gering", "sehr gering"]
# ==============================================================================
@@ -82,36 +84,39 @@ def gen_heat_profile(building_typ,
def gen_hot_water_profile(building_typ, area, year=2021, energy_typ="mittel"):
- new_zone_df = analysis_bld_zone(building_typ, area)
- for row in range(len(new_zone_df)):
- zone = new_zone_df.loc[row, 'DIN_Zone']
+ # new_zone_df = analysis_bld_zone(building_typ, area)
+ # for row in range(len(new_zone_df)):
+ # zone = new_zone_df.loc[row, 'DIN_Zone']
bld_hot_water_demand = calc_bld_demand(building_typ, area, 'hot_water',
energy_typ)
- hot_water_heating_demand_df = pd.read_excel(input_dhw_path,
- sheet_name='DHW',
- header=None,
- usecols=[1],
- skiprows=1)
- hot_water_heating_demand_df.columns = ['Wärmebedarf für '
- 'Trinkwassererwärmung (kWh)']
- # The data is for 300 liter hot water demand and 60 grade Celsius supply
- # hot water with 12 grade Celsius inlet water.
- hot_water_heating_demand_df['Aktueller Wärmebedarf für ' \
- 'Trinkwassererwärmung (kWh)'] = \
- hot_water_heating_demand_df['Wärmebedarf für Trinkwassererwärmung (' \
- 'kWh)'].map(
- lambda x: x / (4180 * 300 * (60 - 12) / 3600 / 1000 * 365) *
- bld_hot_water_demand)
-
- hot_water_heating_demand_array = np.array(
- hot_water_heating_demand_df['Aktueller Wärmebedarf für '
- 'Trinkwassererwärmung (kWh)'])
-
- if building_typ == 'Verwaltungsgebäude':
- hour_status_array = np.array(op_time_status(year, zone))
- hot_water_heating_demand_array = np.multiply(hour_status_array,
- hot_water_heating_demand_array)
+ if building_typ == "Wohngebäude" or building_typ == "Wohngebäude (MFH)":
+ hot_water_heating_demand_df = pd.read_excel(input_dhw_path,
+ sheet_name='DHW',
+ header=None,
+ usecols=[1],
+ skiprows=1)
+ hot_water_heating_demand_df.columns = ['Wärmebedarf für '
+ 'Trinkwassererwärmung (kWh)']
+ # The data is for 300 liter hot water demand and 60 grade Celsius supply
+ # hot water with 12 grade Celsius inlet water.
+ hot_water_heating_demand_df['Aktueller Wärmebedarf für ' \
+ 'Trinkwassererwärmung (kWh)'] = \
+ hot_water_heating_demand_df['Wärmebedarf für ' \
+ 'Trinkwassererwärmung (kWh)'].map(
+ lambda x: x / (4180 * 300 * (60 - 12) / 3600 / 1000 * 365) *
+ bld_hot_water_demand)
+
+ hot_water_heating_demand_array = np.array(
+ hot_water_heating_demand_df['Aktueller Wärmebedarf für '
+ 'Trinkwassererwärmung (kWh)'])
+
+ elif building_typ in building_typ_list and building_typ != "Wohngebäude" \
+ or building_typ != "Wohngebäude (MFH)":
+ bld_occupancy = calc_bld_occupancy(building_typ, area, year)
+ hot_water_heating_demand_array = bld_hot_water_demand / sum(
+ bld_occupancy) * np.array(bld_occupancy)
+ # print(hot_water_heating_demand_array)
return hot_water_heating_demand_array
@@ -277,6 +282,49 @@ def calc_zone_demand(demand_df, demand_typ, zone_typ, zone_area):
return total_demand
+def calc_bld_occupancy(building_typ,
+ area,
+ year):
+ """According to standard SIA2024, the occupancy for each hour are given
+ for each thermal zone"""
+ din_table = pd.read_excel(input_profile_path, sheet_name='DIN V 18599')
+ sia_table = pd.read_excel(input_profile_path, sheet_name='SIA2024')
+ bld_occupancy = [0] * 8760
+
+ new_zone_df = analysis_bld_zone(building_typ, area)
+ # print(new_zone_df)
+
+ for row in range(len(new_zone_df)):
+ din_zone = new_zone_df.loc[row, 'DIN_Zone']
+ sia_zone = din_table.loc[
+ din_table['Raumtyp'] == din_zone, 'Raumtyp_SIA'].values[0]
+ hour_status = op_time_status(year, din_zone)
+ # print(sia_zone)
+ zone_area = new_zone_df.loc[row, 'new_area']
+ sia_pers = sia_table.loc[
+ sia_table['Raumtyp'] == sia_zone, 'Personenfläche'].values[0]
+ # print(sia_pers)
+ sia_pers_profile = sia_table.loc[
+ sia_table['Raumtyp'] == sia_zone, 'Personenbelegung'].values[0]
+ sia_pers_profile = sia_pers_profile.split(', ')
+ sia_pers_profile = list(map(float, sia_pers_profile))
+ # print(sia_pers_profile)
+ if not np.isnan(sia_pers):
+ zone_pers = zone_area / sia_pers
+ # print(zone_pers)
+ zone_pers_profile = zone_pers * np.array(sia_pers_profile)
+ zone_occupancy = [0] * 8760
+
+ for day in range(365):
+ for hour in range(24):
+ if hour_status[day*24+hour] == 1:
+ zone_occupancy[day*24+hour] = zone_pers_profile[hour]
+ # print(zone_pers_profile)
+ bld_occupancy += np.array(zone_occupancy)
+ # print(bld_occupancy)
+ return bld_occupancy
+
+
def degree_day(zone_typ, annual_value, profile_df, temperature_profile,
status_list):
heat_profile = []
@@ -347,7 +395,9 @@ if __name__ == "__main__":
input_temp_path = os.path.join(base_path, 'tek_data', 'temperature.csv')
temperature = pd.read_csv(input_temp_path)['temperature'].values
# gen_heat_profile("Wohngebäude", 300, temperature, plot=True)
- print('Space heating demand profile:')
- print(gen_heat_profile("Verwaltungsgebäude", 300, temperature))
+ # print('Space heating demand profile:')
+ # print(gen_heat_profile("Wohngebäude (MFH)", 300, temperature))
print('Hot water demand profile:')
print(gen_hot_water_profile("Verwaltungsgebäude", 300))
+
+ # calc_bld_occupancy("Verwaltungsgebäude", 300, year=2021)