Skip to content

Commit

Permalink
cleaned finished
Browse files Browse the repository at this point in the history
  • Loading branch information
Sven Eggimann committed Jan 12, 2018
1 parent 88a8b74 commit e890391
Show file tree
Hide file tree
Showing 5 changed files with 159 additions and 169 deletions.
82 changes: 81 additions & 1 deletion energy_demand/geography/spatial_diffusion.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"""
from collections import defaultdict
import numpy as np
from energy_demand.scripts import s_generate_sigmoid

def load_spatial_diff_values(regions, enduses):
"""Load or calculate spatial diffusion values
Expand All @@ -16,7 +17,7 @@ def load_spatial_diff_values(regions, enduses):
regions : dict
Regions
enduses : list
Enduses
Enduses for which spatial explicit is calculated
Returns
-------
Expand Down Expand Up @@ -230,3 +231,82 @@ def calc_regional_services(
rs_reg_enduse_tech_p_ey[enduse][region][tech] = service_tech / tot_service_reg_enduse

return dict(rs_reg_enduse_tech_p_ey)

def spatially_differentiated_modelling(
regions,
all_enduses,
sd_cont,
sgs_cont,
fts_cont,
sum_across_sectors_all_regs,
rs_share_service_tech_ey_p,
ss_share_service_tech_ey_p,
is_share_service_tech_ey_p
):
"""
TODO
"""
# --------------------------------------------------
# Define technologies affected by regional diffusion TODO
# --------------------------------------------------
techs_affected_spatial_f = ['heat_pumps_electricity'] #'boiler_hydrogen',

# Load diffusion values
spatial_diff_values = load_spatial_diff_values(
regions,
all_enduses)

# Load diffusion factors
spatial_diffusion_factor = calc_diff_factor(
regions,
spatial_diff_values,
[sd_cont['rs_fuel_disagg'], sd_cont['ss_fuel_disagg'], sd_cont['is_fuel_disagg']])

# Residential spatial explicit modelling
rs_reg_share_service_tech_ey_p = calc_regional_services(
rs_share_service_tech_ey_p,
regions,
spatial_diffusion_factor,
sd_cont['rs_fuel_disagg'],
techs_affected_spatial_f)

# Generate sigmoid curves (s_generate_sigmoid) for every region
ss_reg_share_service_tech_ey_p = calc_regional_services(
ss_share_service_tech_ey_p,
regions,
spatial_diffusion_factor,
sum_across_sectors_all_regs(sd_cont['ss_fuel_disagg']),
techs_affected_spatial_f)

is_reg_share_service_tech_ey_p = calc_regional_services(
is_share_service_tech_ey_p,
regions,
spatial_diffusion_factor,
sum_across_sectors_all_regs(sd_cont['is_fuel_disagg']),
techs_affected_spatial_f)

# -------------------------------
# Calculate regional service shares of technologies for every technology
# -------------------------------
for enduse in fts_cont['rs_service_tech_by_p']:
sgs_cont['rs_tech_increased_service'][enduse], sgs_cont['rs_tech_decreased_service'][enduse], sgs_cont['rs_tech_constant_service'][enduse], = s_generate_sigmoid.get_tech_future_service(
fts_cont['rs_service_tech_by_p'][enduse],
rs_reg_share_service_tech_ey_p[enduse],
regions,
True)

for enduse in fts_cont['ss_service_tech_by_p']:
sgs_cont['ss_tech_increased_service'][enduse], sgs_cont['ss_tech_decreased_service'][enduse], sgs_cont['ss_tech_constant_service'][enduse], = s_generate_sigmoid.get_tech_future_service(
fts_cont['ss_service_tech_by_p'][enduse],
ss_reg_share_service_tech_ey_p[enduse],
regions,
True)

for enduse in fts_cont['is_service_tech_by_p']:
sgs_cont['is_tech_increased_service'][enduse], sgs_cont['is_tech_decreased_service'][enduse], sgs_cont['is_tech_constant_service'][enduse], = s_generate_sigmoid.get_tech_future_service(
fts_cont['is_service_tech_by_p'][enduse],
is_reg_share_service_tech_ey_p[enduse],
regions,
True)

return rs_reg_share_service_tech_ey_p, ss_reg_share_service_tech_ey_p, is_reg_share_service_tech_ey_p, sgs_cont
4 changes: 2 additions & 2 deletions energy_demand/read_write/data_loader.py
Original file line number Diff line number Diff line change
Expand Up @@ -572,9 +572,9 @@ def load_fuels(paths, lookups):
paths['is_fuel_raw_data_enduses'], lookups['fueltypes_nr'], lookups['fueltypes'])

# Iterate enduses per sudModel and flatten list
all_enduses = []
enduses['all_enduses'] = []
for enduse in enduses.values():
all_enduses += enduse
enduses['all_enduses'] += enduse

# Convert units
fuels['rs_fuel_raw_data_enduses'] = conversions.convert_fueltypes_ktoe_GWh(rs_fuel_raw_data_enduses)
Expand Down
211 changes: 67 additions & 144 deletions energy_demand/scripts/init_scripts.py
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ def scenario_initalisation(path_data_ed, data=False):
fts_cont['is_service_tech_by_p'])

# ------------
# Capacity installations (assumed only national so far)
# Capacity installations (on a national scale)
# ------------
switches_cont['rs_service_switches'] = fuel_service_switch.capacity_installations(
switches_cont['rs_service_switches'],
Expand Down Expand Up @@ -197,156 +197,79 @@ def scenario_initalisation(path_data_ed, data=False):
for key_name in key_to_init:
sgs_cont[key_name] = {}

# -------------------------------
# Spatially differentiated modelling
# -------------------------------
if data['criterias']['spatial_exliclit_diffusion']:

# -------------------------------
# Spatially differentiated modelling
# -------------------------------
# Define technologies affected by regional diffusion TODO
techs_affected_spatial_f = ['heat_pumps_electricity'] #'boiler_hydrogen',

# Load diffusion values
spatial_diff_values = spatial_diffusion.load_spatial_diff_values(
rs_reg_share_service_tech_ey_p, ss_reg_share_service_tech_ey_p, is_reg_share_service_tech_ey_p, sgs_cont = spatial_diffusion.spatially_differentiated_modelling(
data['lu_reg'],
data['enduses']['all_enduses'])

# Load diffusion factors
spatial_diffusion_factor = spatial_diffusion.calc_diff_factor(
data['lu_reg'],
spatial_diff_values,
[sd_cont['rs_fuel_disagg'], sd_cont['ss_fuel_disagg'], sd_cont['is_fuel_disagg']])

# Residential spatial explicit modelling
rs_reg_enduse_tech_p_ey = spatial_diffusion.calc_regional_services(
data['enduses']['all_enduses'],
sd_cont,
sgs_cont,
fts_cont,
sum_across_sectors_all_regs,
rs_share_service_tech_ey_p,
data['lu_reg'],
spatial_diffusion_factor,
sd_cont['rs_fuel_disagg'],
techs_affected_spatial_f)

# Generate sigmoid curves (s_generate_sigmoid) for every region
ss_reg_enduse_tech_p_ey = spatial_diffusion.calc_regional_services(
ss_share_service_tech_ey_p,
data['lu_reg'],
spatial_diffusion_factor,
sum_across_sectors_all_regs(sd_cont['ss_fuel_disagg']),
techs_affected_spatial_f)
is_share_service_tech_ey_p)

is_reg_enduse_tech_p_ey = spatial_diffusion.calc_regional_services(
is_share_service_tech_ey_p,
data['lu_reg'],
spatial_diffusion_factor,
sum_across_sectors_all_regs(sd_cont['is_fuel_disagg']),
techs_affected_spatial_f)

# -------------------------------
# Calculate regional service shares of technologies for every technology
# -------------------------------
for enduse in fts_cont['rs_service_tech_by_p']:
sgs_cont['rs_tech_increased_service'][enduse], sgs_cont['rs_tech_decreased_service'][enduse], sgs_cont['rs_tech_constant_service'][enduse], = s_generate_sigmoid.get_tech_future_service(
fts_cont['rs_service_tech_by_p'][enduse],
rs_reg_enduse_tech_p_ey[enduse],
data['lu_reg'], True)

for enduse in fts_cont['ss_service_tech_by_p']:
sgs_cont['ss_tech_increased_service'][enduse], sgs_cont['ss_tech_decreased_service'][enduse], sgs_cont['ss_tech_constant_service'][enduse], = s_generate_sigmoid.get_tech_future_service(
fts_cont['ss_service_tech_by_p'][enduse],
ss_reg_enduse_tech_p_ey[enduse],
data['lu_reg'],
True)

for enduse in fts_cont['is_service_tech_by_p']:
sgs_cont['is_tech_increased_service'][enduse], sgs_cont['is_tech_decreased_service'][enduse], sgs_cont['is_tech_constant_service'][enduse], = s_generate_sigmoid.get_tech_future_service(
fts_cont['is_service_tech_by_p'][enduse],
is_reg_enduse_tech_p_ey[enduse],
data['lu_reg'], True)

#----------------------------
# Calculate sigmoid diffusion
#----------------------------
for enduse in data['enduses']['rs_all_enduses']:

sgs_cont['rs_sig_param_tech'][enduse], sgs_cont['rs_tech_increased_service'][enduse], sgs_cont['rs_tech_decreased_service'][enduse], sgs_cont['rs_tech_constant_service'][enduse], sgs_cont['rs_service_switch'][enduse] = sig_param_calculation_including_fuel_switch(
data['sim_param']['base_yr'],
data['assumptions']['technologies'],
enduse=enduse,
fuel_switches=data['assumptions']['rs_fuel_switches'],
service_switches=switches_cont['rs_service_switches'],
service_tech_by_p=fts_cont['rs_service_tech_by_p'][enduse],
service_fueltype_by_p=fts_cont['rs_service_fueltype_by_p'][enduse],
share_service_tech_ey_p=rs_reg_enduse_tech_p_ey[enduse],
fuel_tech_p_by=data['assumptions']['rs_fuel_tech_p_by'][enduse],
regions=data['lu_reg'],
regional_specific=True)

for enduse in data['enduses']['ss_all_enduses']:
sgs_cont['ss_sig_param_tech'][enduse], sgs_cont['ss_tech_increased_service'][enduse], sgs_cont['ss_tech_decreased_service'][enduse], sgs_cont['ss_tech_constant_service'][enduse], sgs_cont['ss_service_switch'][enduse] = sig_param_calculation_including_fuel_switch(
data['sim_param']['base_yr'],
data['assumptions']['technologies'],
enduse=enduse,
fuel_switches=data['assumptions']['ss_fuel_switches'],
service_switches=switches_cont['ss_service_switches'],
service_tech_by_p=fts_cont['ss_service_tech_by_p'][enduse],
service_fueltype_by_p=fts_cont['ss_service_fueltype_by_p'][enduse],
share_service_tech_ey_p=ss_reg_enduse_tech_p_ey[enduse],
fuel_tech_p_by=data['assumptions']['ss_fuel_tech_p_by'][enduse],
regions=data['lu_reg'],
regional_specific=True)

for enduse in data['enduses']['is_all_enduses']:
sgs_cont['is_sig_param_tech'][enduse], sgs_cont['is_tech_increased_service'][enduse], sgs_cont['is_tech_decreased_service'][enduse], sgs_cont['is_tech_constant_service'][enduse], sgs_cont['is_service_switch'][enduse] = sig_param_calculation_including_fuel_switch(
data['sim_param']['base_yr'],
data['assumptions']['technologies'],
enduse=enduse,
fuel_switches=data['assumptions']['is_fuel_switches'],
service_switches=switches_cont['is_service_switches'],
service_tech_by_p=fts_cont['is_service_tech_by_p'][enduse],
service_fueltype_by_p=fts_cont['is_service_fueltype_by_p'][enduse],
share_service_tech_ey_p=is_reg_enduse_tech_p_ey[enduse],
fuel_tech_p_by=data['assumptions']['is_fuel_tech_p_by'][enduse],
regions=data['lu_reg'],
regional_specific=True)
regions = data['lu_reg']
regional_specific = True
rs_share_service_tech_ey_p = rs_reg_share_service_tech_ey_p
ss_share_service_tech_ey_p = ss_reg_share_service_tech_ey_p
is_share_service_tech_ey_p = is_reg_share_service_tech_ey_p
else:
# -------------------------------
# Non spatiall differentiated modelling of
# technology diffusion (same diffusion pattern for
# the whole UK)
# -------------------------------
for enduse in data['enduses']['rs_all_enduses']:
sgs_cont['rs_sig_param_tech'][enduse], sgs_cont['rs_tech_increased_service'][enduse], sgs_cont['rs_tech_decreased_service'][enduse], sgs_cont['rs_tech_constant_service'][enduse], sgs_cont['rs_service_switch'][enduse] = sig_param_calculation_including_fuel_switch(
data['sim_param']['base_yr'],
data['assumptions']['technologies'],
enduse=enduse,
fuel_switches=data['assumptions']['rs_fuel_switches'],
service_switches=switches_cont['rs_service_switches'],
service_tech_by_p=fts_cont['rs_service_tech_by_p'][enduse],
service_fueltype_by_p=fts_cont['rs_service_fueltype_by_p'][enduse],
share_service_tech_ey_p=rs_share_service_tech_ey_p[enduse],
fuel_tech_p_by=data['assumptions']['rs_fuel_tech_p_by'][enduse])

for enduse in data['enduses']['ss_all_enduses']:
sgs_cont['ss_sig_param_tech'][enduse], sgs_cont['ss_tech_increased_service'][enduse], sgs_cont['ss_tech_decreased_service'][enduse], sgs_cont['ss_tech_constant_service'][enduse], sgs_cont['ss_service_switch'][enduse] = sig_param_calculation_including_fuel_switch(
data['sim_param']['base_yr'],
data['assumptions']['technologies'],
enduse=enduse,
fuel_switches=data['assumptions']['ss_fuel_switches'],
service_switches=switches_cont['ss_service_switches'],
service_tech_by_p=fts_cont['ss_service_tech_by_p'][enduse],
service_fueltype_by_p=fts_cont['ss_service_fueltype_by_p'][enduse],
share_service_tech_ey_p=ss_share_service_tech_ey_p[enduse],
fuel_tech_p_by=data['assumptions']['ss_fuel_tech_p_by'][enduse])

for enduse in data['enduses']['is_all_enduses']:
sgs_cont['is_sig_param_tech'][enduse], sgs_cont['is_tech_increased_service'][enduse], sgs_cont['is_tech_decreased_service'][enduse], sgs_cont['is_tech_constant_service'][enduse], sgs_cont['is_service_switch'][enduse] = sig_param_calculation_including_fuel_switch(
data['sim_param']['base_yr'],
data['assumptions']['technologies'],
enduse=enduse,
fuel_switches=data['assumptions']['is_fuel_switches'],
service_switches=switches_cont['is_service_switches'],
service_tech_by_p=fts_cont['is_service_tech_by_p'][enduse],
service_fueltype_by_p=fts_cont['is_service_fueltype_by_p'][enduse],
share_service_tech_ey_p=is_share_service_tech_ey_p[enduse],
fuel_tech_p_by=data['assumptions']['is_fuel_tech_p_by'][enduse])
regions = False
regional_specific = False

# ---------------------------------------
# Calculate sigmoid diffusion
#
# Non spatiall differentiated modelling of
# technology diffusion (same diffusion pattern for
# the whole UK) or spatiall differentiated (every region)
# ---------------------------------------
for enduse in data['enduses']['rs_all_enduses']:
sgs_cont['rs_sig_param_tech'][enduse], sgs_cont['rs_tech_increased_service'][enduse], sgs_cont['rs_tech_decreased_service'][enduse], sgs_cont['rs_tech_constant_service'][enduse], sgs_cont['rs_service_switch'][enduse] = sig_param_calculation_including_fuel_switch(
data['sim_param']['base_yr'],
data['assumptions']['technologies'],
enduse=enduse,
fuel_switches=data['assumptions']['rs_fuel_switches'],
service_switches=switches_cont['rs_service_switches'],
service_tech_by_p=fts_cont['rs_service_tech_by_p'][enduse],
service_fueltype_by_p=fts_cont['rs_service_fueltype_by_p'][enduse],
share_service_tech_ey_p=rs_share_service_tech_ey_p[enduse],
fuel_tech_p_by=data['assumptions']['rs_fuel_tech_p_by'][enduse],
regions=regions,
regional_specific=regional_specific)

for enduse in data['enduses']['ss_all_enduses']:
sgs_cont['ss_sig_param_tech'][enduse], sgs_cont['ss_tech_increased_service'][enduse], sgs_cont['ss_tech_decreased_service'][enduse], sgs_cont['ss_tech_constant_service'][enduse], sgs_cont['ss_service_switch'][enduse] = sig_param_calculation_including_fuel_switch(
data['sim_param']['base_yr'],
data['assumptions']['technologies'],
enduse=enduse,
fuel_switches=data['assumptions']['ss_fuel_switches'],
service_switches=switches_cont['ss_service_switches'],
service_tech_by_p=fts_cont['ss_service_tech_by_p'][enduse],
service_fueltype_by_p=fts_cont['ss_service_fueltype_by_p'][enduse],
share_service_tech_ey_p=ss_share_service_tech_ey_p[enduse],
fuel_tech_p_by=data['assumptions']['ss_fuel_tech_p_by'][enduse],
regions=regions,
regional_specific=regional_specific)

for enduse in data['enduses']['is_all_enduses']:
sgs_cont['is_sig_param_tech'][enduse], sgs_cont['is_tech_increased_service'][enduse], sgs_cont['is_tech_decreased_service'][enduse], sgs_cont['is_tech_constant_service'][enduse], sgs_cont['is_service_switch'][enduse] = sig_param_calculation_including_fuel_switch(
data['sim_param']['base_yr'],
data['assumptions']['technologies'],
enduse=enduse,
fuel_switches=data['assumptions']['is_fuel_switches'],
service_switches=switches_cont['is_service_switches'],
service_tech_by_p=fts_cont['is_service_tech_by_p'][enduse],
service_fueltype_by_p=fts_cont['is_service_fueltype_by_p'][enduse],
share_service_tech_ey_p=is_share_service_tech_ey_p[enduse],
fuel_tech_p_by=data['assumptions']['is_fuel_tech_p_by'][enduse],
regions=regions,
regional_specific=regional_specific)

return fts_cont, sgs_cont, sd_cont, switches_cont

Expand Down

0 comments on commit e890391

Please sign in to comment.