コード例 #1
0
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'])
コード例 #2
0
    # -----------------------------------------------------------------------------
    # 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,
コード例 #3
0
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("==========")
コード例 #4
0
ファイル: run.py プロジェクト: nismod/nismod2
    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))
コード例 #5
0
ファイル: run.py プロジェクト: nismod/nismod2
    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"))