How to add a new technology#

Add a new technology from the Danish Energy Agency (DEA)#

You can add a new technology from the Danish Energy Agency database which are saved in inputs/*.xlsx. One can add the wished technology name (e.g. “onwind”) as a key and the excel sheet name of the technology in DEA (e.g. ‘20 Onshore turbines’) as a value to the dictionary sheet_names in the compile_cost_assumptions.py. For using the technology data uncertainty of DEA, add to the dictionary uncrtnty_lookup the columns in the excel sheet which contain the uncertainty estimations (e.g. 'onwind':'J:K') It is recommended to still check in the output csv if all new technology data is compiled correctly.

sheet_names = {'onwind': '20 Onshore turbines',
               'offwind': '21 Offshore turbines',
               'solar-utility': '22 Utility-scale PV',
               'solar-utility single-axis tracking': '22 Utility-scale PV tracker',
               'solar-rooftop residential': '22 Rooftop PV residential',
               'solar-rooftop commercial': '22 Rooftop PV commercial',
               'OCGT': '52 OCGT - Natural gas',
               'CCGT': '05 Gas turb. CC, steam extract.',
               'oil': '50 Diesel engine farm',
               'biomass CHP': '09c Straw, Large, 40 degree',
               'biomass EOP': '09c Straw, Large, 40 degree',
               'biomass HOP': '09c Straw HOP',
               'central coal CHP': '01 Coal CHP',
               'central gas CHP': '04 Gas turb. simple cycle, L',
               'central gas CHP CC': '04 Gas turb. simple cycle, L',
               'central solid biomass CHP': '09a Wood Chips, Large 50 degree',
               'central solid biomass CHP CC': '09a Wood Chips, Large 50 degree',
               'central solid biomass CHP powerboost CC': '09a Wood Chips, Large 50 degree',
               # 'solid biomass power': '09a Wood Chips extract. plant',
               # 'solid biomass power CC': '09a Wood Chips extract. plant',
               'central air-sourced heat pump': '40 Comp. hp, airsource 3 MW',
               'central ground-sourced heat pump': '40 Absorption heat pump, DH',
               'central resistive heater': '41 Electric Boilers',
               'central gas boiler': '44 Natural Gas DH Only',
               'decentral gas boiler': '202 Natural gas boiler',
               'direct firing gas': '312.a Direct firing Natural Gas',
               'direct firing gas CC': '312.a Direct firing Natural Gas',
               'direct firing solid fuels': '312.b Direct firing Sold Fuels',
               'direct firing solid fuels CC': '312.b Direct firing Sold Fuels',
               'decentral ground-sourced heat pump': '207.7 Ground source existing',
               'decentral air-sourced heat pump': '207.3 Air to water existing',
               # 'decentral resistive heater': '216 Electric heating',
               'central water tank storage': '140 PTES seasonal',
               # 'decentral water tank storage': '142 Small scale hot water tank',
               'fuel cell': '12 LT-PEMFC CHP',
               'hydrogen storage underground': '151c Hydrogen Storage - Caverns',
               'hydrogen storage tank type 1 including compressor': '151a Hydrogen Storage - Tanks',
               'micro CHP': '219 LT-PEMFC mCHP - natural gas',
               'biogas' : '81 Biogas Plant, Basic conf.',
               'biogas CC' : '81 Biogas Plant, Basic conf.',
               'biogas upgrading': '82 Biogas, upgrading',
               'battery': '180 Lithium Ion Battery',
               'industrial heat pump medium temperature': '302.a High temp. hp Up to 125 C',
               'industrial heat pump high temperature': '302.b High temp. hp Up to 150',
               'electric boiler steam': '310.1 Electric boiler steam  ',
               'gas boiler steam': '311.1c Steam boiler Gas',
               'solid biomass boiler steam': '311.1e Steam boiler Wood',
               'solid biomass boiler steam CC': '311.1e Steam boiler Wood',
               'biomass boiler': '204 Biomass boiler, automatic',
               'electrolysis': '86 AEC 100MW', #'88 Alkaline Electrolyser',
               'direct air capture': '403.a Direct air capture',
               'biomass CHP capture': '401.a Post comb - small CHP',
               'cement capture': '401.c Post comb - Cement kiln',
               'BioSNG': '84 Gasif. CFB, Bio-SNG',
               'BtL': '85 Gasif. Ent. Flow FT, liq fu ',
               'biomass-to-methanol': '97 Methanol from biomass gasif.',
               'biogas plus hydrogen': '99 SNG from methan. of biogas',
               'methanolisation': '98 Methanol from power',
               'Fischer-Tropsch': '102 Hydrogen to Jet',
               'central hydrogen CHP': '12 LT-PEMFC CHP',
               'Haber-Bosch': '103 Hydrogen to Ammonia',
               'air separation unit': '103 Hydrogen to Ammonia',
               'waste CHP': '08 WtE CHP, Large, 50 degree',
               'waste CHP CC': '08 WtE CHP, Large, 50 degree',
               # 'electricity distribution rural': '101 2 el distri Rural',
               # 'electricity distribution urban': '101 4 el distri  city',
               # 'gas distribution rural': '102 7 gas  Rural',
               # 'gas distribution urban': '102 9 gas City',
               # 'DH distribution rural': '103_12 DH_Distribu Rural',
               # 'DH distribution urban': '103_14 DH_Distribu City',
               # 'DH distribution low T': '103_16 DH_Distr New area LTDH',
               # 'gas pipeline': '102 6 gas Main distri line',
               # "DH main transmission": "103_11 DH transmission",
               }

If you want to extract further parameters from the DEA excel sheets you can add them to the parameter list in the function get_data_DEA().

Add a new technology from another source#

A new technology can be added to the technology-data with an additional function in the compile_cost_assumptions.py. In this script a pandas Dataframe called costs is created for every year specified in the config.yaml. costs has a MultiIndex (['technology', 'parameter']) and four columns (['value', 'unit', 'source', 'further description']).

    for year in years:
        costs = (data[[year, "unit", "source", "further description"]]
                .rename(columns={year: "value"}))
        costs["value"] = costs["value"].astype(float)

The function for the newly added technology should extend this pandas Dataframe costs. This is done for example for solar PV costs in the function add_solar_from_other(costs)

If a new technology is added, existing parameter names (e.g. “investment”) and units (e.g. EUR/MW) should be used. If the energy output is not distinct, clarify e.g. EUR/MW_el or EUR/MW_th. Efficiencies for converting/using hydrogen or methane are given for Lower Heating Values (LHV). All parameters and corresponding units are summarised in the table below. It is not necessary to add for one technology all parameters, e.g. if there are only investment costs for a technology only those can be added without specifying e.g. VOM.

parameter

unit

description

investment

EUR/kW

overall investment costs, if the energy output is not distinct, clarify with e.g. EUR/kWel or EUR/kWCH4

FOM

%/year (% of investment costs)

Fixed operation and maintenance costs (FOM) are given as a percentage of the overnight costs per year

VOM

EUR/MWh

Variable operation and maintenance costs (VOM), if the energy output is not distinct, clarify with e.g. EUR/MWhel or EUR/MWhCH4

efficiency

per unit

efficiency of a technology

lifetime

years

lifetime which is used in PyPSA-Eur and PyPSA-Eur-Sec to annualise the investment costs

fuel

EUR/MWh_th

fuel costs

discount_rate

per unit

technology specific discount rate, used for annualising the investment costs

CO2 intensity

tCO2/MWh_th

amount of emitted CO2 per energy output

c_b

per unit

back-pressure coefficient (electricity divided by heat) used for CHP plants

c_v

per unit

loss of electricity generation per unit of heat generated at fixed fuel input, used for CHP plants

efficiency-heat

per unit

heat efficiency for technologies with heat and power output (e.g. CHPs)

Try to make the source of the data as clear as possible (e.g. including page number, DOI) and add the source to the source_dict in the compile_cost_assumptions.py. Convert the units within the script (this can be done in part (2) in the script) to be as transparent as possible.

The inflation rate should be considered for the investment costs, as it is done for example for the cost assumptions from DIW from 2010

def unify_diw(costs):
    """"
    include inflation for the DIW costs from 2010
    """
    inflation = (1 + snakemake.config['rate_inflation'])**(2010 - snakemake.config['eur_year'])

The output cost assumptions are given for different years. So either the added cost assumptions have to be interpolated for different in the config.yaml specified years, as done e.g. with the technology data from DEA here

    for index in df_final.index:
        values = np.interp(x=years, xp=df.columns.values.astype(float), fp=df.loc[index, :].values.astype(float))
        df_final.loc[index, :] = values

or the technology data is assumed to be constant for the different years, as e.g. done if other electrolyzer data is assumed in this function.

def add_h2_from_other(costs):
    """
    assume higher efficiency for electrolysis(0.8) and fuel cell(0.58)
    """
    costs.loc[('electrolysis', 'efficiency'), 'value'] = 0.8
    costs.loc[('fuel cell', 'efficiency'), 'value'] = 0.58
    costs.loc[('electrolysis', 'efficiency'), 'source'] = 'budischak2013'
    costs.loc[('fuel cell', 'efficiency'), 'source'] = 'budischak2013'

    return costs