def test_assign_by_fuel_tech_p(config_file): """ """ config = data_loader.read_config_file(config_file) # Load data data = {} data['paths'] = config['CONFIG_DATA'] data['lookups'] = lookup_tables.basic_lookups() data['enduses'], data['sectors'], data[ 'fuels'], _, _ = data_loader.load_fuels(data['paths']) data['local_paths'] = data_loader.get_local_paths(path_main) #Load assumptions base_yr = 2015 data['assumptions'] = general_assumptions.Assumptions( submodels_names=['a'], base_yr=base_yr, curr_yr=None, sim_yrs=None, paths=data['paths'], enduses=data['enduses'], sectors=data['sectors'], fueltypes=data['lookups']['fueltypes'], fueltypes_nr=data['lookups']['fueltypes_nr']) strategy_vars_def.load_param_assump(data['paths'], data['local_paths'], data['assumptions']) fuel_tech_p_by = fuel_shares.assign_by_fuel_tech_p( data['enduses'], data['sectors'], data['lookups']['fueltypes'], data['lookups']['fueltypes_nr'])
# ----------------------------------------------------------------------------- # Calculate population density for base year # ----------------------------------------------------------------------------- region_objects = read_data.get_region_objects(name_region_set) data['pop_density'] = {} for region in region_objects: region_name = region['properties']['name'] region_area = region['properties']['st_areasha'] data['pop_density'][region_name] = data['scenario_data']['population'][data['assumptions'].base_yr][region_name] / region_area # ----------------------------------------------------------------------------- # Load standard strategy variable values from .py file # Containing full information # ----------------------------------------------------------------------------- default_streategy_vars = strategy_vars_def.load_param_assump( default_values=True) # ----------------------------------------------------------------------------- # Load standard smif parameters and generate standard single timestep narrative for simulation end year # ----------------------------------------------------------------------------- strategy_vars = strategy_vars_def.generate_default_parameter_narratives( default_streategy_vars=default_streategy_vars, end_yr=2050, base_yr=config['CONFIG']['base_yr']) # ----------------------------------------- # User defines stragey variable from csv files # ----------------------------------------- user_defined_vars = data_loader.load_local_user_defined_vars( default_strategy_var=default_streategy_vars, path_csv=path_strategy_vars,
config.read(os.path.join(path_config, 'wrapperconfig.ini')) # -------- # Other configuration # -------- base_yr = 2015 sim_yrs = [2015, 2050] paths = data_loader.load_paths(path_main) data_path = os.path.normpath(config['PATHS']['path_local_data']) local_paths = data_loader.get_local_paths(data_path) data = {} data['enduses'], data['sectors'], data['fuels'] = data_loader.load_fuels(paths) assumptions = general_assumptions.Assumptions(base_yr=user_defined_base_yr, curr_yr=2015, sim_yrs=sim_yrs, paths=paths, enduses=data['enduses'], sectors=data['sectors']) # Write parameters to YAML file _, _ = strategy_vars_def.load_param_assump(assumptions) print("==========") print("Finishged generating YAML file with scenario parameters") print("==========")
def simulate(self, data_handle): """Runs the Energy Demand model for one `timestep` Arguments --------- data_handle : dict A dictionary containing all parameters and model inputs defined in the smif configuration by name Returns ======= supply_results : dict key: name defined in sector models value: np.zeros((len(reg), len(intervals)) ) """ data = {} region_set_name = self._get_region_set_name() path_main = self._get_working_dir() config_file_path = os.path.join(path_main, 'wrapperconfig.ini') config = data_loader.read_config_file(config_file_path) # Replace constrained | unconstrained mode from narrative mode = self._get_mode(data_handle) config['CRITERIA']['mode_constrained'] = mode virtual_building_stock_criteria = self._get_virtual_dw_stock( data_handle) config['CRITERIA'][ 'virtual_building_stock_criteria'] = virtual_building_stock_criteria logging.info("MODE {} VIRTUAL_STOCK {}".format( mode, virtual_building_stock_criteria)) curr_yr = self._get_simulation_yr(data_handle) base_yr = config['CONFIG']['base_yr'] weather_yr = curr_yr sim_yrs = self._get_simulation_yrs(data_handle) temp_and_result_path = config['PATHS']['path_result_data'] data['result_paths'] = basic_functions.get_result_paths( temp_and_result_path) for path_folder in data['result_paths'].values(): basic_functions.create_folder(path_folder) # -------------------------------------------------- # Read all other data # -------------------------------------------------- data['scenario_data'] = defaultdict(dict) data['scenario_data']['gva_industry'] = defaultdict(dict) data['scenario_data']['rs_floorarea'] = defaultdict(dict) data['scenario_data']['ss_floorarea'] = defaultdict(dict) pop_array_by = data_handle.get_base_timestep_data('population') gva_array_by = data_handle.get_base_timestep_data( 'gva_per_head').as_ndarray() data['regions'] = pop_array_by.spec.dim_coords(region_set_name).ids data['reg_coord'] = self._get_coordinates( pop_array_by.spec.dim_coords(region_set_name)) data['scenario_data']['population'][ base_yr] = self._assign_array_to_dict(pop_array_by.as_ndarray(), data['regions']) data['scenario_data']['gva_per_head'][ base_yr] = self._assign_array_to_dict(gva_array_by, data['regions']) data['scenario_data']['gva_industry'][ base_yr] = self._load_gva_sector_data(data_handle, data['regions']) floor_area_base = data_handle.get_base_timestep_data( 'floor_area').as_ndarray() data['scenario_data']['rs_floorarea'][ base_yr] = self._assign_array_to_dict(floor_area_base[:, 0], data['regions']) data['scenario_data']['ss_floorarea'][ base_yr] = self._assign_array_to_dict(floor_area_base[:, 1], data['regions']) # -------------------------------------------- # Load scenario data for current year # -------------------------------------------- pop_array_cy = data_handle.get_data('population').as_ndarray() gva_array_cy = data_handle.get_data('gva_per_head').as_ndarray() data['scenario_data']['population'][ curr_yr] = self._assign_array_to_dict(pop_array_cy, data['regions']) data['scenario_data']['gva_per_head'][ curr_yr] = self._assign_array_to_dict(gva_array_cy, data['regions']) data['scenario_data']['gva_industry'][ curr_yr] = self._load_gva_sector_data(data_handle, data['regions']) floor_area_curr = data_handle.get_data('floor_area').as_ndarray() data['scenario_data']['rs_floorarea'][ curr_yr] = self._assign_array_to_dict(floor_area_curr[:, 0], data['regions']) data['scenario_data']['ss_floorarea'][ curr_yr] = self._assign_array_to_dict(floor_area_curr[:, 1], data['regions']) default_streategy_vars = strategy_vars_def.load_param_assump( hard_coded_default_val=True) strategy_vars = strategy_vars_def.generate_default_parameter_narratives( default_streategy_vars=default_streategy_vars, end_yr=config['CONFIG']['user_defined_simulation_end_yr'], base_yr=config['CONFIG']['base_yr']) user_defined_vars = self._load_narrative_parameters( data_handle, simulation_base_yr=config['CONFIG']['base_yr'], simulation_end_yr=config['CONFIG'] ['user_defined_simulation_end_yr'], default_streategy_vars=default_streategy_vars) strategy_vars = data_loader.replace_variable(user_defined_vars, strategy_vars) # Replace strategy variables not defined in csv files) strategy_vars = strategy_vars_def.autocomplete_strategy_vars( strategy_vars, narrative_crit=True) # ----------------------------- # Load temperatures # ----------------------------- data['temp_data'] = self._get_temperatures(data_handle, sim_yrs, data['regions'], constant_weather=False) # ----------------------------------------- # Load data # ----------------------------------------- data = wrapper_model.load_data_before_simulation( data, sim_yrs, config, curr_yr) data['assumptions'].update('strategy_vars', strategy_vars) # ----------------------------------------- # Specific region selection # ----------------------------------------- region_selection = data['regions'] # Update regions setattr(data['assumptions'], 'reg_nrs', len(region_selection)) # -------------------------------------------------- # Read results from pre_simulate from disc # -------------------------------------------------- logging.debug("... reading in results from before_model_run(): " + str(temp_and_result_path)) regional_vars = read_data.read_yaml( os.path.join(temp_and_result_path, "regional_vars.yml")) non_regional_vars = read_data.read_yaml( os.path.join(temp_and_result_path, "non_regional_vars.yml")) data['fuel_disagg'] = read_data.read_yaml( os.path.join(temp_and_result_path, "fuel_disagg.yml")) crit_switch_happening = read_data.read_yaml( os.path.join(temp_and_result_path, "crit_switch_happening.yml")) setattr(data['assumptions'], 'crit_switch_happening', crit_switch_happening) setattr(data['assumptions'], 'regional_vars', regional_vars) setattr(data['assumptions'], 'non_regional_vars', non_regional_vars) # -------------------------------------------------- # Update depending on narratives # -------------------------------------------------- # Update technological efficiencies for specific year according to narrative updated_techs = general_assumptions.update_technology_assumption( technologies=data['assumptions'].technologies, narrative_f_eff_achieved=data['assumptions']. non_regional_vars['f_eff_achieved'][curr_yr], narrative_gshp_fraction=data['assumptions']. non_regional_vars['gshp_fraction'][curr_yr], crit_narrative_input=False) data['assumptions'].technologies.update(updated_techs) # -------------------------------------------------- # Run main model function # -------------------------------------------------- sim_obj = energy_demand_model( region_selection, data, config['CRITERIA'], data['assumptions'], weather_yr=weather_yr, weather_by=data['assumptions'].weather_by) # -------------------------------------------------- # Write other results to txt files # -------------------------------------------------- wrapper_model.write_user_defined_results(config['CRITERIA'], data['result_paths'], sim_obj, data, curr_yr, region_selection, pop_array_cy) # -------------------------------------------------- # Pass results to supply model and smif # -------------------------------------------------- for key_name in self.outputs: if key_name in sim_obj.supply_results.keys(): logging.debug("...writing `{}` to smif".format(key_name)) single_result = sim_obj.supply_results[key_name] data_handle.set_results(key_name, single_result) else: logging.info( " '{}' is not provided and thus replaced with empty values" .format(key_name)) #data_handle.set_results(key_name, np.zeros((391, 8760))) logging.info(" '{}' is not in outputs".format(key_name)) raise Exception("Output '{}' is not defined".format(key_name))
def before_model_run(self, data_handle): """Implement this method to conduct pre-model run tasks """ logging.debug("... Start function before_model_run") data = {} if self._get_base_yr(data_handle) != 2015: msg = "The first defined year in model config does not correspond to \ the hardcoded base year" raise ValueError(msg) path_main = self._get_working_dir() config_file_path = os.path.join(path_main, 'wrapperconfig.ini') config = data_loader.read_config_file(config_file_path) # Replace constrained | unconstrained mode from narrative mode = self._get_mode(data_handle) config['CRITERIA']['mode_constrained'] = mode virtual_building_stock_criteria = self._get_virtual_dw_stock( data_handle) config['CRITERIA'][ 'virtual_building_stock_criteria'] = virtual_building_stock_criteria logging.debug("MODE {} VIRTUAL_STOCK {}".format( mode, virtual_building_stock_criteria)) region_set_name = self._get_region_set_name() curr_yr = self._get_base_yr(data_handle) sim_yrs = self._get_simulation_yrs(data_handle) temp_path = config['PATHS']['path_result_data'] self.create_folders_rename_folders(config) # Load hard-coded standard default assumptions default_streategy_vars = strategy_vars_def.load_param_assump( hard_coded_default_val=True) # ----------------------------- # Reading in narrative variables # ----------------------------- strategy_vars = strategy_vars_def.generate_default_parameter_narratives( default_streategy_vars=default_streategy_vars, end_yr=config['CONFIG']['user_defined_simulation_end_yr'], base_yr=config['CONFIG']['base_yr']) user_defined_vars = self._load_narrative_parameters( data_handle, simulation_base_yr=config['CONFIG']['base_yr'], simulation_end_yr=config['CONFIG'] ['user_defined_simulation_end_yr'], default_streategy_vars=default_streategy_vars) strategy_vars = data_loader.replace_variable(user_defined_vars, strategy_vars) strategy_vars = strategy_vars_def.autocomplete_strategy_vars( strategy_vars, narrative_crit=True) # ------------------------------------------------ # Load base year scenario data # ------------------------------------------------ data['scenario_data'] = defaultdict(dict) data['scenario_data']['gva_industry'] = defaultdict(dict) data['scenario_data']['floor_area'] = defaultdict(dict) pop_array_by = data_handle.get_base_timestep_data('population') gva_array_by = data_handle.get_base_timestep_data('gva_per_head') data['regions'] = pop_array_by.spec.dim_coords(region_set_name).ids # Floor area and service building count inputs (not from virtual dwelling stock) floor_area_curr = data_handle.get_base_timestep_data( 'floor_area').as_ndarray() data['scenario_data']['rs_floorarea'][ curr_yr] = self._assign_array_to_dict(floor_area_curr[:, 0], data['regions']) data['scenario_data']['ss_floorarea'][ curr_yr] = self._assign_array_to_dict(floor_area_curr[:, 1], data['regions']) data['service_building_count'] = {} data['service_building_count'][curr_yr] = [] data['scenario_data']['population'][ curr_yr] = self._assign_array_to_dict(pop_array_by.as_ndarray(), data['regions']) data['scenario_data']['gva_per_head'][ curr_yr] = self._assign_array_to_dict(gva_array_by.as_ndarray(), data['regions']) data['reg_coord'] = self._get_coordinates( pop_array_by.spec.dim_coords(region_set_name)) pop_density = self._calculate_pop_density(pop_array_by, region_set_name) data['scenario_data']['gva_industry'][ curr_yr] = self._load_gva_sector_data(data_handle, data['regions']) # ----------------------------- # Load temperatures and weather stations # ----------------------------- data['temp_data'] = self._get_temperatures(data_handle, sim_yrs, data['regions'], constant_weather=False) # ----------------------------------------- # Load data # ------------------------------------------ data = wrapper_model.load_data_before_simulation( data, sim_yrs, config, curr_yr) # Update variables data['assumptions'].update('strategy_vars', strategy_vars) data['assumptions'].update("rs_regions_without_floorarea", {}) #TODO data['assumptions'].update("ss_regions_without_floorarea", {}) #TODO technologies = general_assumptions.update_technology_assumption( data['assumptions'].technologies, data['assumptions'].strategy_vars['f_eff_achieved'], data['assumptions'].strategy_vars['gshp_fraction']) data['assumptions'].technologies.update(technologies) # ----------------------------------------- # Load switches # ----------------------------------------- switches_service_raw = data_handle.get_parameter( 'switches_service').as_df() switches_service_raw = self._series_to_df(switches_service_raw, 'switches_service') service_switches = read_data.service_switch(switches_service_raw) fuel_switches = read_data.read_fuel_switches( os.path.join(data['local_paths']['path_strategy_vars'], "switches_fuel.csv"), data['enduses'], data['assumptions'].fueltypes, data['assumptions'].technologies) capacity_switches = read_data.read_capacity_switch( os.path.join(data['local_paths']['path_strategy_vars'], "switches_capacity.csv")) # ----------------------------------------- # Perform pre-step calculations # ------------------------------------------ regional_vars, non_regional_vars, fuel_disagg, crit_switch_happening = wrapper_model.before_simulation( data, config, sim_yrs, pop_density, service_switches, fuel_switches, capacity_switches) # ----------------------------------------- # Write pre_simulate to disc # ------------------------------------------ write_data.write_yaml(regional_vars, os.path.join(temp_path, "regional_vars.yml")) write_data.write_yaml(non_regional_vars, os.path.join(temp_path, "non_regional_vars.yml")) write_data.write_yaml(fuel_disagg, os.path.join(temp_path, "fuel_disagg.yml")) write_data.write_yaml( crit_switch_happening, os.path.join(temp_path, "crit_switch_happening.yml"))